Как выбрать несколько ключей из tarantool одновременно, как с помощью SELECT IN в SQL? - PullRequest
1 голос
/ 14 июня 2019

Я хочу выбрать несколько записей из Tarantool за один вызов, но не вижу, как я могу передать несколько ключей space:get или space:select

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Вы можете сделать это, используя как Lua, так и SQL.

1) Используйте хранимую процедуру в Lua, например:

function select_several(space_name, index_name, keys)
    local obj = index_name == nil and box.space[space_name] or box.space[space_name].index[index_name]
    local result = {}
    for _, key in pairs(keys) do
        table.insert(result, obj:get(key))
    end
    return result
end
...
select_several('test', nil, {1, 2})

2) Начиная с Tarantool 2.0, вы можете использовать SQL (при условии, что у вас есть формат пространства):

box.execute('select * from "test" where "id" in (1, 3);')
0 голосов
/ 14 июня 2019

Еще один вариант, эквивалентный SQL-запросу select * from "test" where "id" in (1, 3) с использованием LuaFun :

tarantool> box.space.test:pairs():take_while(function (tuple) return tuple.id == 1 or tuple.id == 3 end):totable()

или, используя индекс с именем "id":

tarantool> box.space.test.id:pairs():take_while(function (tuple) return tuple.id == 1 or tuple.id == 3 end):totable()
...