Как использовать автоинкремент индекса в Tarantool? - PullRequest
3 голосов
/ 27 мая 2020

Я сделал индекс автоинкремента:

box.space.metric:create_index('primary', {
        parts = {{'id', 'unsigned'}},
        sequence = true,
})

Затем я пытаюсь передать nil в поле id :

metric.id = nil

Когда я пытаюсь вставить эти значения, Я обнаружил ошибку:

Tuple field 1 type does not match one required by operation: expected unsigned

Какое значение я должен передать для поля автоинкремента?

Второй вопрос. Если я использую tarantool-cluster с несколькими экземплярами (например, на основе картриджей), докажет ли это использование индексов автоинкремента? Будут ли случаи, когда в разных экземплярах будут одинаковые ключи?

1 Ответ

5 голосов
/ 28 мая 2020

Невозможно пройти nil. Когда вы назначаете nil, вы стираете поле. Вместо этого используйте box.NULL. Но лучше использовать какой-то идентификатор кластера, который хорошо работает в кластере, вместо автоинкремента, который работает только внутри одного узла.

Для идентификаторов всего кластера я мог бы предложить UUID или что-то вроде ULID (например, https://github.com/moonlibs/id)

...