они в себя пишут? Где тут кластер?
И тут мы переходим к вопросу о том, как клиент работает с роутером. Надо через 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 сервис. Но, с другой стороны, я, например, не понимаю как через коннектор описывать роли картриджа.
Обсуждают сегодня