Node.js tarantool lua

162 views
Skip to first unread message

Евгений Панков

unread,
Aug 6, 2013, 6:42:39 AM8/6/13
to tarant...@googlegroups.com
День добрый.

Не нашел доку и примеры реализации, как вызывать  lua функции в tarantool из node.js

реализована вообще такая возможность?

спасибо.

Евгений Панков

unread,
Aug 6, 2013, 6:45:32 AM8/6/13
to tarant...@googlegroups.com
хотел еще узнать, возможно ли обращение из tarantool в redis и наоборот, думаю очень удобная вещь была бы.

Alexandre Kalendarev

unread,
Aug 6, 2013, 6:50:43 AM8/6/13
to tarant...@googlegroups.com



6 августа 2013 г., 14:45 пользователь Евгений Панков <panko...@gmail.com> написал:

хотел еще узнать, возможно ли обращение из tarantool в redis и наоборот, думаю очень удобная вещь была бы.


Принипиально возможно, через box.socket.tcp(),  только разбор данных надо будет делать самому. протокол редиса довольно простой, так что это делать будет не трудно, вопрос только зачем - функциональность тарантула полностью покрывает редис.

Eugine Blikh

unread,
Aug 6, 2013, 9:56:36 AM8/6/13
to tarant...@googlegroups.com
В классе Tarantool есть метод call. Работая с ним и передавая в него имя процедуры и аргументы можно добиться call.
А зачем вам ходить из Тарантула в Редис?

Dmitry E. Oboukhov

unread,
Aug 6, 2013, 9:59:02 AM8/6/13
to tarant...@googlegroups.com
> В классе Tarantool есть метод call. Работая с ним и передавая в него имя
> процедуры и аргументы можно добиться call.
> А зачем вам ходить из Тарантула в Редис?

Ходить из тарантула в редис очень полезно на этапе миграции с редиса
на тарантул :)

то есть допустим у нас есть БД юзеров на редисе.
а мы приделываем что-то новое на тарантуле и планируем когда-то
переделать все на него.
то можем часть функционала положить в тарантул и вторую часть
запрашивать из редиса.

PS: надо посмотреть есть ли для редиса C-шные драйвера и написать
плагин
--
_______________
< tarantool.org > Mail.RU
---------------
\ ^__^
\ (oo)\_______
(__)\ )\/\ Dmitry E. Oboukhov <un...@debian.org>
U ||----w | GPGKey: 1024D / F8E26537 2006-11-21
|| || 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537

signature.asc

Евгений Панков

unread,
Aug 6, 2013, 10:40:48 AM8/6/13
to tarant...@googlegroups.com
 Идея возможно и не очень хорошая, но вкратце по проекту что у нас.
- Сроки сжатые.
- Железо в ближайшие пол года точно нового не выделят
1) Основное хранилище mongodb (выбор пал из-за архитектуры хранения данных, смысла в реляционных таблицах не было, в дальнейшем смотрим в сторону касандра для некоторого функционала и графовых бд)
2) Redis используем как кеш, в основном это сессии и списковые типы, множества и множества с приоритетом, на node.js проблем вообще ни разу еще не возникло (проект до этого ставил, тоже проблем за весь проект не возникло),но в основном тут
хранятся записи, которые если потеряются ничего страшного, ну кроме сессий(это подумываем в тарантул перетащить, но пока не в приоритете). вообщем  на проекте уже много мест где используется и хорошо подходит.
3) предполагается много мелких операций, результат которых лучше хранить в памяти и запросы большую часть по составному ключу. поэтому выбор был между voltdb и tarantool . с первым не понятно было, драйвер под старую версию node.js работает не ахти, + на C# валился драйвер, хотя быстро поднялся легко написать функции и sql, второй хорошая производительность ну и большой плюс что отечественный ;)))) но тут не без касяков, на каждой итерации как таск node.js с тарантулом, все сроки таска просто расползаются))) с удовольствием время потратил бы на допиливание драйвера, но времени пока что нет, только через месяц в надежде посвободней будет. Поэтому вопросов много, народ тут и тереблю. чтоб сроки не срывать стараемся делать все через "интерфейсы", к разным хранилищам, потом хотел бы перелезть на тарантул.
в Tarantool храним профили пользователей(онлайн и т.д.), и инфу по 3м сервисам некоторые.
Сервис еще не в продакшен, хотя надеюсь что доживет до этих дней))))

- так и не разобрался как вызывать функции lua из node.js
- будет ли возможность "выгружать" данные помимо mysql/postgresql, в mongodb
- вроде не реконектится к tarantool после падения tarantool


Alexandre Kalendarev

unread,
Aug 6, 2013, 11:20:51 AM8/6/13
to tarant...@googlegroups.com

PS: надо посмотреть есть ли для редиса C-шные драйвера и написать
плагин

есть
https://github.com/redis/hiredis
http://code.google.com/p/credis/source/browse
https://github.com/toymachine/libredis
но возможно проще реализовать протокол самому. Там довольно все просто - текстовый протокол, не сложнее мемкешед.

Alexandre Kalendarev

unread,
Aug 6, 2013, 11:29:56 AM8/6/13
to tarant...@googlegroups.com
- так и не разобрался как вызывать функции lua из node.js
 
- будет ли возможность "выгружать" данные помимо mysql/postgresql, в mongodb

да, я использую для этого курсоры

http://tarantool.org/tarantool_user_guide.html#sp-box-index
пишу хранимку, типа как ниже, которая выгружает все данные, но желательно чтоб данных было не так много. 
> lua for v in box.space[0].index[1]:iterator(box.index.ALL) do print(v) end
--
Alexandre

Евгений Панков

unread,
Aug 6, 2013, 12:51:25 PM8/6/13
to tarant...@googlegroups.com
Вопрос так и не раскрыт как вызвать из node.js процедуру, можно примерчик?

Евгений Панков

unread,
Aug 7, 2013, 1:08:03 AM8/7/13
to tarant...@googlegroups.com
вопрос решен, не внимательно просмотрел.

Dmitriy Tikhvinskiy

unread,
Aug 18, 2013, 6:39:48 PM8/18/13
to tarant...@googlegroups.com
вторник, 6 августа 2013 г., 18:40:48 UTC+4 пользователь Евгений Панков написал:

- вроде не реконектится к tarantool после падения tarantool

Евгений, реконнект действительно не реализован — мне кажется, его алгоритм не очевиден и зависит от приложения. Возможно, я в этом ошибаюсь.

Если хотите попробовать — достаньте из транспорта socket (tc.composer.transport.socket, это стандартный socket http://nodejs.org/api/net.html ), и начните слушать его события end/close и реагировать на них, манипулируя сокетом или целиком заменяя transport в tc.composer


Dmitry E. Oboukhov

unread,
Aug 18, 2013, 7:35:33 PM8/18/13
to tarant...@googlegroups.com

> - вроде не реконектится к tarantool после падения tarantool

> Евгений, реконнект действительно не реализован — мне кажется, его алгоритм не
> очевиден и зависит от приложения. Возможно, я в этом ошибаюсь.


повторы запросов действительно зависят.

а обобщенный реконнект такой алгоритм:

1. потеря связи - те запросы что выполняются - должны получить ошибку
что связь потерялась
2. те запросы что придут позже - должны дождаться нового коннекта и
отправиться в него

то есть считать нормальным что приложение в моменты когда вырубают
тарантул будет ошибки получать.

как-то так
signature.asc
Reply all
Reply to author
Forward
0 new messages