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

Всем привет! Используем тарантул для периодического сохранения состояния(state) некоторой сущности. Состояния

хранятся в виде массива, условно:
box.space.example:format({
{ name = 'id', type = 'integer' },
{ name = 'name', type = 'string'},
{ name = 'last_updated', type = 'integer' },
{ name = 'states', type = 'array' },
})
Есть функция, которая, собственно, добавляет текущее состояние в массив states.
function add_state(space_name,id,name,state)
local tuple = box.space[space_name]:select(id)
if #tuple == 0 then
box.space[space_name]:insert({id,name,os.time(),{state}})
else
local states = tuple[1][4]
states[#states+1]=state
if #states == limits[space_name]+1 then
table.remove(states,1)
end
box.space[space_name]:update( id,{{'=', 2, name},{'=', 3, os.time()}, {'=', 4, states}})
end
end
Делалось все так, чтобы формировать быстрый ответ, который строится на основании анализа массива states в момент запроса.
На данный момент на одном инстансе получается примерно ~2-3к/сек вызовов данной add_state

Посоветуйте пжлст, в какую сторону можно оптимизировать?
Может быть изменить подход в целом?

1 ответов

8 просмотров

Или у них state очень большой. Если так, то сериализация/десериализация state и запись в xlog становятся проблемой. Может быть лучше будет вставлять state по одному, или группировать в небольшие пачки (8-16). В общем, сделать отдельный тапл поменьше

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А чем вам питонисты не угодили?😂
.
79
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Карта сайта