хранятся в виде массива, условно:
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
Посоветуйте пжлст, в какую сторону можно оптимизировать?
Может быть изменить подход в целом?
Или у них state очень большой. Если так, то сериализация/десериализация state и запись в xlog становятся проблемой. Может быть лучше будет вставлять state по одному, или группировать в небольшие пачки (8-16). В общем, сделать отдельный тапл поменьше
Обсуждают сегодня