Справочный поиск в Tarantool

У меня есть две таблицы: user, user_matching. И я хочу получить элементы из обеих таблиц в 1 запрос. Например, SQL-подобный запрос:

select * from user where user.id = (select id from user_matching where id = user_matching_id)

Обычно я использую 2 запроса в БД NoSQL. Сейчас делаю так:

  1. Получить от user_matching user_id
  2. С user_id Получить от пользователя

Могу ли я заменить его всего одним запросом с помощью Tarantool. И как?


person Дмитрий Чеклов    schedule 04.04.2016    source источник


Ответы (1)


Вам нужно создать хранимую процедуру, в которой вы объединяете результат двух выборок, например:

function select_user_by_matching_id(matching_id)
    local id = box.space.user_matching:get{matching_id} # or :select
    local user_data = box.space.user:get{id} # or :select
    # work with user_data
    return user_data
end

После того, как вы создадите эту процедуру, вы можете вызвать эту процедуру через драйвер Tarantool с получением комбинированного результата.

Подробнее здесь: http://tarantool.org/doc/book/app/c-lua_tutorial.html?highlight=call

person Vasiliy Soshnikov    schedule 05.04.2016
comment
Но как объединить кортежи из id и user_data в один кортеж? - person PSIAlt; 05.04.2016
comment
stackoverflow.com/questions/36177960/, здесь вы найдете ответ - person Vasiliy Soshnikov; 05.04.2016