Модуль dictionary¶
Модуль dictionary
предоставляет методы для работы со словарями и используется на узлах
с включенной технологической ролью roles.dictionary-router или roles.dictionary-storage.
Каждый метод в списке ниже может быть вызван как с роутера, так и с хранилища.
При вызове с роутера вызов перенаправляется на один из доступных узлов с ролью roles.dictionary-storage
.
При вызове с хранилища метод выполняется сразу.
Разрешения на запуск методов собраны в пользовательскую роль dictionary_api_executor
.
Примечание
Tarantool DB 2.x поддерживает как новый формат названий методов dictionary API (dictionary_router_get()
), так и старый (dictionary_router.get()
).
Методы, добавленные в версии 2.x, поддерживают оба формата названий.
Вызвать метод в новом формате через tt CLI или в TCM во вкладке Terminal (TT Connect
)
можно через box.schema.func.call
, например:
box.schema.func.call('dictionary_router_set', 'categories', '1', 'Shops')
Вызвать метод в старом формате можно напрямую, например:
dictionary_router.set('categories', '1', 'Shops')
Смотрите также: Совместимость модуля dictionary c Tarantool 1.x.
dictionary_get(entity_name, key)¶
local value = dictionary_router_get(entity_name, key) -- вызов на роутере
local value = dictionary_get(entity_name, key) -- вызов на хранилище
Получить значение элемента с одного из доступных узлов со словарем.
Параметры:
entity_name
(string) – название словаря. Если названия нет, укажите пустую строку;key
(string) – идентификатор элемента словаря.
Возвращает:
value
(any) – данные элемента словаря по идентификатору, илиnil
, если данных с таким идентификатором нет.
dictionary_set(entity_name, key, value[, opt])¶
local ok, error_message = dictionary_router_set(entity_name, key, value, opt) -- вызов на роутере
local ok, error_message = dictionary_set(entity_name, key, value, opt) -- вызов на хранилище
Сохранить значение элемента в один из доступных узлов со словарем.
Параметры:
entity_name
(string) – название словаря. Если названия нет, укажите пустую строку;key
(string) – идентификатор элемента словаря;value
(any) – данные элемента словаря;opt
(table) – дополнительные параметры вызова:wait_consistency
(boolean) – ждать окончания репликации по всем узлам. Все узлы при этом должны быть рабочими (healthy). Запрещено использовать внутри транзакции. Опция гарантирует, что при следующем чтении с любого узла будут получены актуальные данные;wait_consistency_timeout
(number) – максимальное время ожидания репликации по всем узлам в секундах. Значение по умолчанию: 3 секунды.
Возвращает:
ok
(boolean) –true
, если операция выполнена успешно;error_message
(string) – информация об ошибке, если она произошла, иначеnil
.
dictionary_del(entity_name, key[, opt])¶
local ok, error_message = dictionary_router_del(entity_name, key, opt) -- вызов на роутере
local ok, error_message = dictionary_del(entity_name, key, opt) -- вызов на хранилище
Удалить значение элемента в одном из доступных узлов со словарем.
Параметры:
entity_name
(string) – название словаря. Если названия нет, укажите пустую строку;key
(string) – идентификатор удаляемого элемента словаря;opt
(table) – дополнительные параметры вызова:wait_consistency
(boolean) – ждать окончания репликации по всем узлам. Все узлы при этом должны быть рабочими (healthy). Запрещено использовать внутри транзакции. Опция гарантирует, что при следующем чтении с любого узла будут получены актуальные данные;wait_consistency_timeout
(number) – максимальное время ожидания репликации по всем узлам в секундах. Значение по умолчанию: 3 секунды.
Возвращает:
ok
(boolean) –true
, если операция выполнена успешно;error_message
(string) – информация об ошибке, если она произошла, иначеnil
.
dictionary_get_keys(entity_name[, opt])¶
local key_list = dictionary_router_get_keys(entity_name, opt) -- вызов на роутере
local key_list = dictionary_get_keys(entity_name, opt) -- вызов на хранилище
Получить все ключи для словаря.
Параметры:
entity_name
(string) – название словаря;opt
(table) – дополнительные параметры вызова:limit
(number) – максимальное число ключей в ответе. Значение по умолчанию: 5000;yield
(number) – количество ключей до следующей передачи управления. Значение по умолчанию: 1000.
Возвращает:
key_list
(table) – список ключей.
dictionary_get_entity(entity_name[, opt])¶
local data = dictionary_router_get_entity(entity_name, opt) -- вызов на роутере
local data = dictionary_get_entity(entity_name, opt) -- вызов на хранилище
Получить все данные словаря.
Параметры:
entity_name
(string) – название словаря;opt
(table) – дополнительные параметры вызова:limit
(number) – максимальное число ключей в ответе. Значение по умолчанию: 1000;yield
(number) – количество ключей до следующей передачи управления. Значение по умолчанию: 1000.
Возвращает:
key_value
(table) – ассоциативный массивключ-значение
;qty
(number) – число прочитанных строк.
dictionary_get_batch(entity_name, key_list)¶
local key_value = dictionary_router_get_batch(entity_name, key) -- вызов на роутере
local key_value = dictionary_get_batch(entity_name, key) -- вызов на хранилище
Получить значения словаря по списку ключей.
Параметры:
entity_name
(string) – название словаря;key
(table) – список ключей.
Возвращает:
key_value
(table) – ассоциативный массивключ-значение
.
dictionary_set_batch(entity_name, key_value)¶
local res = dictionary_router_set_batch(entity_name, key_value) -- вызов на роутере
local res = dictionary_set_batch(entity_name, key_value) -- вызов на хранилище
Задать пачку значений словаря.
Параметры:
entity_name
(string) – название словаря;key_value
(table) – ассоциативный массивключ-значение
.
Возвращает:
res
(boolean) –true
, если операция выполнена успешно.
dictionary_del_entity(entity_name)¶
local res = dictionary_router_del_entity(entity_name) -- вызов на роутере
local res = dictionary_del_entity(entity_name) -- вызов на хранилище
Удалить все значения словаря.
Параметры:
entity_name
(string) – название словаря.
Возвращает:
res
(boolean) –true
, если операция выполнена успешно.
dictionary_check_consistency()¶
local res, error_message = dictionary_router_check_consistency() -- вызов на роутере
local res, error_message = dictionary_check_consistency() -- вызов на хранилище
Для каждого узла со словарем вычислить хэш всех его данных. При вычислении учитываются поля:
название словаря (
entity_name
);ключ (
key
);значение (
value
).
Для успешного выполнения все узлы со словарями должны быть рабочими (healthy).
Параметры: нет
Возвращает:
result
(table) – структура, содержащая поля:consistency
(boolean) –true
, если на всех узлах одинаковый хэш данных словаря;hash_map
(table) – справочная таблица, которая содержит перечень узлов со словарями и их хэши данных;
error_message
(string) – информация об ошибке, если она произошла, иначеnil
.
dictionary_check_key_consistency()¶
local res, error_message = dictionary_router_check_key_consistency(entity_name, key) -- вызов на роутере
local res, error_message = dictionary_check_key_consistency(entity_name, key) -- вызов на хранилище
Для каждого узла со словарем вычислить хэш одного ключа. При вычислении учитываются поля:
название словаря (
entity_name
);ключ (
key
);значение (
value
).
Для успешного выполнения все узлы со словарями должны быть рабочими (healthy).
Параметры:
entity_name
(string) – название словаря;key
(string) – идентификатор элемента словаря.
Возвращает:
result
(table) – структура, содержащая поля:consistency
(bool) –true
, если на всех узлах одинаковый хэш данных словаря;hash_map
(table) – справочная таблица, содержащая перечень узлов со словарями с хэшем выбранного ключа;
error_message
(string) – информация об ошибке, если она произошла, иначеnil
.
dictionary_wait_key_consistency(entity_name, key)¶
local res, error_message = dictionary_router_wait_key_consistency(entity_name, key) -- вызов на роутере
local res, error_message = dictionary_wait_key_consistency(entity_name, key) -- вызов на хранилище
Ждать наступления момента, когда данные по ключу на всех узлах со словарями станут одинаковыми. Для успешного выполнения все узлы со словарями должны быть рабочими (healthy).
Параметры:
entity_name
(string) – название словаря;key
(string) – идентификатор элемента словаря;timeout
(number) – время ожидания в секундах. Значение по умолчанию: 3.
Возвращает:
error_message
(string) – информация об ошибке, если она произошла, иначеnil
.
dictionary_notify_neighbors()¶
dictionary_router_notify_neighbors() -- вызов на роутере
dictionary_notify_neighbors() -- вызов на хранилище
Выполнить асинхронную попытку оповестить ближайший доступный экземпляр о новых данных.
Параметры: нет
Возвращает: нет
dictionary_try_sync()¶
local ok, error_message = dictionary_router_try_sync() -- вызов на роутере
local ok, error_message = dictionary_try_sync() -- вызов на хранилище
Запустить принудительно обмен данными с соседними экземплярами. При таком обмене данных экземпляр:
запрашивает новые данные с других экземпляров;
оповещает соседние экземпляры о своих новых данных.
При работе со словарями попытка обмена данными с другими узлами происходит в двух случаях:
при выполнении операции сохранения (
set
) или удаления (del
) не в транзакции;по таймеру, периодичность которого регулируется опцией конфигурации dictionary.worker_sleep_in_second.
Если операции set
или del
выполняются в транзакции, библиотека не начинает синхронизацию
с другими узлами.
В этом случае в логике клиентской функции можно принудительно вызвать обмен данными
после окончания транзакции, чтобы не дожидаться срабатывания таймера.
Параметры: нет
Возвращает:
ok
(boolean) –true
, если операция выполнена успешно;error_message
(string) – информация об ошибке, если она произошла, иначеnil
.