Получить 1 случайную запись из пространства Tarantool.

У меня есть запрос с 2 условиями, которые возвращают 1 запись каждый запрос 1by1 как вставленный в пробел

box.space.extensions.index.secondary:select(
        {city, 0},
        {limit=1}
    )

Образец:

{1}
{2}
{3}

Мне нужно получать случайную запись по каждому запросу. Образец:

{3}
{1}
{2}

person Sergey Kochugov    schedule 06.11.2020    source источник


Ответы (1)


Согласно tarantool API, select возвращает массив кортежей, так что это обычная таблица Lua, которой вы можете управлять самостоятельно. Если вы хотите рандомизировать содержимое запроса, вам понадобится table.Shuffle. Если вы хотите получить один случайный элемент из запроса, вы можете использовать tbl[math.random(#tbl)].

Вот пример table.Shuffle кода:

function table.Shuffle(tbl)
    for i = #tbl, 2, -1 do
        local j = math.random(i)
        tbl[i], tbl[j] = tbl[j], tbl[i]
    end
end
person Spar    schedule 06.11.2020