Сортировка в tarantool с помощью min(), если несколько записей имеют одинаковый вторичный индекс

  local orders = box.schema.space.create('orders')
  box.schema.sequence.create('orderId')
  orders:create_index('id', {sequence='orderId'})
  orders:create_index('price', {unique=false, parts={2, 'integer'}})

  local bestOrder = orders.index.price:min()

Я ищу лучший заказ (минимальная цена) с функцией min() по вторичному индексу. Как Tarantool сортирует записи, если они имеют одинаковую цену (вторичный индекс)? Я протестировал и выгляжу по первичному индексу. Это поведение стандартизировано?


person farwayer    schedule 12.03.2018    source источник


Ответы (1)


Tarantool имеет несколько типов индексов [1]. И некоторые из них отсортированы некоторые из не отсортированы. Например, индекс дерева [2] будет отсортирован, что означает, что вы можете получить границы, а хэш-индекс [3] не отсортирован, что означает, что вы можете получить границы без копирования и сортировки.

В вашем случае вы используете индекс дерева. Таким образом, вы можете использовать минимальные, максимальные, связанные выборки и т. д. для индекса «цена».

ОБНОВЛЕНИЕ (после переговоров по электронной почте)

Tarantool возвращает первый кортеж по первичному ключу для min(), если несколько записей имеют одинаковый вторичный индекс, и последний кортеж для max().

Такое поведение является нормальным для Tarantool, и можно рассчитывать, что оно не изменится в ближайшее время.


[1] https://tarantool.org/en/doc/2.0/book/box/box_index.html?highlight=index#module-box.index

[2] https://en.wikipedia.org/wiki/B-tree

[3] https://en.wikipedia.org/wiki/Hash_table

person Vasiliy Soshnikov    schedule 13.03.2018
comment
Тип индекса по умолчанию — дерево в этой документации tarantool.org/ru/doc/2.0/book/box/ И min() играет хорошо. - person farwayer; 13.03.2018
comment
Спасибо, опечатка. Исправлена. это так - person Vasiliy Soshnikov; 13.03.2018
comment
Но я не знаю, как tarantool сортирует кортежи с одинаковыми секундными индексами (цена 1 за несколько записей). По основному индексу? - person farwayer; 13.03.2018
comment
В вашем случае tarantool использует вторичный индекс («цена»), то есть b-tree. Но если вы попытаетесь выбрать ПРОБЕЛ: выберите ({}), то порядок сортировки будет по первичному ключу. - person Vasiliy Soshnikov; 14.03.2018