Работа с read view через Lua API | Tdb

Версия:

latest
Руководство пользователя Read view Работа с read view через Lua API

Работа с read view через Lua API

В этом руководстве описано, как с помощью Lua API открыть представление для чтения, получить данные из этого представления и закрыть его. Полный справочник по API приведен в разделе Read views: Lua API в документации Tarantool Enterprise.

Руководство включает следующие шаги:

Создание спейса

Сначала нужно создать спейс, с которым будет использоваться read view. Создайте спейс bands:

bands = box.schema.space.create('bands')

Задайте формат спейса:

box.space.bands:format({
    { name = 'id', type = 'unsigned' },
    { name = 'band_name', type = 'string' },
    { name = 'year', type = 'unsigned' }
})

Создайте первичный и вторичные индексы:

box.space.bands:create_index('primary', { parts = { 'id' } })
box.space.bands:create_index('band', { parts = { 'band_name' } })
box.space.bands:create_index('year', { parts = { { 'year' } }, unique = false })

Добавьте в спейс несколько групп:

bands:insert { 1, 'Roxette', 1986 }
bands:insert { 2, 'Scorpions', 1965 }
bands:insert { 3, 'Ace of Base', 1987 }
bands:insert { 4, 'The Beatles', 1960 }

Создание представления для чтения

Создать read view можно с помощью функции box.read_view.open():

rv:instance001> rv = box.read_view.open({ name = 'rv' })

Здесь:

rv – название read view.

Проверить статус read view можно следующим образом:

rv:instance001> rv.status
---
- open
...

Чтобы просмотреть полную информацию о созданном read view, вызовите функцию read_view_object:info():

rv:instance001> rv:instance001> rv:info()
---
- timestamp: 66.606817935
  signature: 24
  is_system: false
  status: open
  vclock: { 1: 24 }
  name: rv
  id: 1
...

Чтобы просмотра списка всех созданных read view, используйте функцию box.read_view.list().

Запросы к данным

После создания read view обращаться к спейсам можно через поле read_view_object.space. Поле обеспечивает доступ к объекту спейса с методами select, get и pairs. Поведение этих методов соответствует методам box.space.

В примере ниже показано, как выбрать 4 записи из спейса bands:

rv:instance001> rv.space.bands:select({}, { limit = 4 })
---
- - [ 1, 'Roxette', 1986 ]
  - [ 2, 'Scorpions', 1965 ]
  - [ 3, 'Ace of Base', 1987 ]
  - [ 4, 'The Beatles', 1960 ]
...

Аналогичным образом можно получить данные по определенному индексу:

rv:instance001> rv.space.bands.index.year:select({}, { limit = 4 })
---
- - [ 4, 'The Beatles', 1960 ]
  - [ 2, 'Scorpions', 1965 ]
  - [ 1, 'Roxette', 1986 ]
  - [ 3, 'Ace of Base', 1987 ]
...

Теперь поменяйте данные в спейсе. Для этого удалите кортеж с id = 4:

rv:instance001> bands:delete(4)
---
- [ 4, 'The Beatles', 1960 ]
...

Read view содержит снимок данных (snapshot), полученный перед удалением кортежа. Чтобы проверить это, используйте операцию select:

rv:instance001> rv.space.bands:select()
---
- - [ 1, 'Roxette', 1986 ]
  - [ 2, 'Scorpions', 1965 ]
  - [ 3, 'Ace of Base', 1987 ]
  - [ 4, 'The Beatles', 1960 ]

Действительно, в снимке есть кортеж с id = 4.

Закрытие read view

Представления для чтения могут занимать значительный объем памяти. Если read view больше не требуется, закройте его с помощью метода read_view_object:close():

rv:close()

Если не закрыть read view таким образом, он закроется неявно, когда сборщик мусора Lua соберет объект read view. После закрытия read view его статус меняется на closed. Попытка использовать закрытый read view вызовет ошибку.

Нашли ответ на свой вопрос?
Обратная связь