Вызов выбирает осколки Тарантула
У меня есть 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.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)'
...
Как я могу взять все данные из всех шардов и выбора вызовов во вторичные индексы?
1 ответ
shard.T:select()
не может быть выполнен без первичного ключа. Я подал 574 против команды документации.
относительно secondary_select
:
Похоже, что соединение как минимум с одним хранилищем было разорвано. Стоит взглянуть на файл журнала переднего tarantool (где используется модуль шарда).
На всякий случай стоит проверить, что вы можете подключиться к хранилищам и сделать выбор из пространств с указанным пользователем, используя net.box.
Используйте скобки вместо фигурных скобок (функция принимает несколько аргументов, а не одну таблицу).
Вы используете e75d2c7a версию модуля шарда, но пытаетесь использовать API более поздней версии. Правильный запрос для e75d2c7a будет, скажем,
shard.space_name:secondary_select(index_no_or_name, index_key, opts)
, Или попробуйте обновить до последней версии шарда.Индексы отсчитываются от нуля, поэтому вы пытались использовать "беззнаковый" индекс "три" с ключом "строка" (кстати,
secondary_select
позволяет использовать индексные имена).redundacy
установлено на 2, но количество хранилищ нечетное. Последний не будет использован.
Надеюсь, поможет.