получить текущее значение box.sequence в tarantool

Получил текущее значение последовательности 3

localhost:3401> box.sequence.S:next()
---
- 3
...

Я не могу найти текущее значение в объекте

localhost:3401> box.sequence.S
---
- step: 1
  id: 1
  min: 1
  cache: 0
  uid: 1
  max: 9223372036854775807
  cycle: false
  name: S
  start: 1
...

Как получить текущую стоимость? В документации не нашел.


person Vasil    schedule 09.06.2020    source источник


Ответы (1)


Как видите, ваша последовательность S имеет id=1

Существует системное пространство box.space._sequence_data, в котором хранятся текущие значения всех последовательностей. Все, что вам нужно сделать, это просто выбрать свой идентификатор последовательности из пробела: box.space._sequence_data:select(1).

Например, my_seq - это 4-я последовательность в моей базе данных.

tarantool> my_seq = box.schema.sequence.create('MySeq', {start=111})
---
...

tarantool> box.space._sequence_data:select(my_seq.id)
---
- []
...

tarantool> my_seq:next()
---
- 111
...

tarantool> box.space._sequence_data:select(my_seq.id)
---
- - [4, 111]

Как видите, сразу после создания _sequence_data не имеет никаких подробностей о новой последовательности до первого использования my_seq:next(), который инициализирует последовательность.

Как видите, box.space._sequence_data:select(my_seq.id) возвращает кортеж с номером последовательности и текущим значением.

Обратите внимание на отсутствие гарантий на этот метод. И есть некоторые проблемы с репликацией.

В 2.4.1 представлен sequence:currval(): https://github.com/tarantool/tarantool/issues/4752

person Alexander Zaraysky    schedule 10.06.2020