Вызов выборок в шарды Tarantool

У меня есть Tarantool с модулем осколков и такой конфигурацией пространства:

local h_box = box.schema.create_space('hotbox')
h_box:create_index('one', {type = 'hash', parts = {1, 'string'}})
h_box:create_index('two', {type = 'tree', parts = {2, 'string'}})
h_box:create_index('three', {type = 'tree', parts = {3, 'unsigned'}})
h_box:create_index('four', {type = 'tree', parts = {4, 'boolean'}})
h_box:create_index('five', {type = 'tree', parts = {5, 'unsigned'}})
h_box:create_index('six', {type = 'tree', parts = {6, 'boolean'}})

В документации модуля Tarantool shard говорится:

Запрос shard.T: select {} без первичного ключа будет искать все шарды.

Но я вижу ошибку, когда пытаюсь позвонить по этому номеру.

shard.h_box:select{}
---
- error: 'builtin/digest.lua:138: Usage digest.crc32(string)'
...

Также при вызове shard.h_box:secondary_select{2, {limit = 10}, 'foo'} Tarantool выдавал ошибку:

---
- error: '/usr/share/tarantool/shard/init.lua:1015: attempt to index field ''conn''
    (a nil value)'
...

Как я могу взять все данные со всех шардов и вызвать выборки во вторичные индексы?


person iPhosgen    schedule 21.03.2018    source источник
comment
Предлагаю вам модуль vshard [1], лучше, что модуль shard сейчас слишком экспериментален. [1] github.com/tarantool/vshard   -  person Vasiliy Soshnikov    schedule 22.03.2018
comment
О твоей теме. Вы установили осколок? Можете показать код, если да?   -  person Vasiliy Soshnikov    schedule 22.03.2018
comment
@VasiliySoshnikov, здесь моя основная конфигурация   -  person iPhosgen    schedule 22.03.2018


Ответы (1)


shard.T:select() не может выполняться без первичного ключа. Я подал # 574 против группы документации.

Относительно secondary_select:

  1. Похоже, оборвалась связь хотя бы с одним хранилищем. Стоит посмотреть лог-файл фронтального тарантула (где используется модуль shard).

  2. На всякий случай стоит проверить, можно ли подключиться к хранилищам и сделать выбор из пробелов с указанным пользователем с помощью net.box.

  3. Используйте круглые скобки вместо фигурных скобок (функция принимает несколько аргументов, а не одну таблицу).

  4. Вы используете версию модуля shard e75d2c7a, но пытаетесь использовать API более поздней версии. Правильный запрос для e75d2c7a будет, скажем, shard.space_name:secondary_select(index_no_or_name, index_key, opts). В качестве альтернативы попробуйте выполнить обновление до последней версии шарда.

  5. Индексы отсчитываются с нуля, поэтому вы пробовали использовать «беззнаковый» индекс «три» с ключом «строка» (кстати, secondary_select позволяет использовать имена индексов).

  6. redundacy установлен на 2, но количество хранилищ нечетное. Последний не будет использоваться.

Надеюсь, это поможет.

person Alexander Turenko    schedule 19.06.2018