215 похожих чатов

Какой тогда смысл в ролях роутер и дата нода, если

они в себя пишут? Где тут кластер?

14 ответов

28 просмотров

И тут мы переходим к вопросу о том, как клиент работает с роутером. Надо через vshard.router.callrw - он сходит на нужный шард

https://github.com/Tarantool/examples

Алексей-Ямщиков Автор вопроса

А своими словами? В документации много, что написано, но по факту пока натыкаешься на то, что оно не работает так как ожидается.

насколько я понимаю, роутер продолжает быть полноценным экземпляром тарантула и для обработки запросов технически может обращаться в локальное хранилище, но на архитектурном уровне - это является ошибкой. Все функции вызываемые на роутере должны в итоге так или иначе сохранять / запрашивать данные от стораджей

Там в примерах рассказывается, что такое роутер и как работать с вишардом

Может, вам поможет: 1. На сторадже создаю функцию: local function metadata_get(message_id) checks('number') local metadata = box.space.metadata_store:get(message_id) metadata = { message_id = metadata.message_id; version = metadata.version; bucket_id = metadata.bucket_id; start_processing_timestamp = metadata.start_processing_timestamp; end_processing_timestamp = metadata.end_processing_timestamp; current_stage = metadata.current_stage; metadata = metadata.metadata; } return metadata; 2. На роутере вот так её вызываю, вычислив бакет: local function http_metadata_get(req) local message_id = tonumber(req:stash('message_id')) local bucket_id = vshard.router.bucket_id(message_id) local metadata, error = err_vshard_router:pcall( vshard.router.call, bucket_id, 'read', 'metadata_get', {message_id} ) if error then local resp = req:render({json = { info = "Internal error", error = error }}) resp.status = 500 return resp end if metadata == nil then local resp = req:render({json = { info = "Metadata not found" }}) resp.status = 404 return resp end metadata.bucket_id = nil local resp = req:render({json = metadata}) resp.status = 200 return resp end

vshard.router.call ходит на ноду с нужным бакетом 😃

Алексей-Ямщиков Автор вопроса

Это для разработки описано? Я немного не понимаю. Тарантул это СУБД? Или это "сам себе напиши базу", "сам себе напиши как кластер у тебя будет работать" ?

Алексей-Ямщиков Автор вопроса

Я админ, меня попросили предоставить базу для приложения - мне нужно писать фукнции ней, чтобы заработала штука под названием кластер?

По поводу кластера не могу сказать, но в принципе, чтобы получить какое-то хранилище на Тарантуле нужно писать функции, увы. Я выше писал уже, что это сервер приложений на Lua, даже БД надо собирать.

Посмотрите примеры всё-таки. Для простейшего кейса вам не нужен код на луа, кроме инициализации спейсов

А если функции описаны через коннектор?

Так функции написаны через коннектор. Или надо для картриджа писать функции внутри приложения?

Через коннектор не пробовал, может кто-то ещё прокомментирует. Этот пример, он с вызовом функций через встроенный HTTP сервис. Но, с другой стороны, я, например, не понимаю как через коннектор описывать роли картриджа.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта