2
我使用NoSQL數據庫Tarantool並嘗試使用Lua存儲過程在數據庫端執行一些複雜的工作。我認爲這是個好主意,因爲我可以減少數據庫調用,並減少網絡數據傳輸的開銷。
我有一些表:
user_counters:ID,counter_a,counter_b,得分在另一個協程中運行Tarantool Lua函數
而且,例如,我有一些函數來計算場得分:
function recalc_score(id)
local stream = box.space.user_counters:select { id }
local rating = 0
-- some_rating_calculation using counter_a and counter_b here
box.space.user_counters:update(id, { { '=', 4, rating } })
end
,我有另一個功能對於場counter_a和counter_b更新:
function update_user_counters(id, counter_a_diff, counter_b_diff)
local rating_default = 0
local user_counters_tuple = box.space.user_counters:upsert(
{ id, counter_a_diff, counter_b_diff, rating_default },
{ { '+', 2, counter_a_diff }, { '+', 3, counter_b_diff } }
)
-- start another coroutine recalc_score(id) and forget about it
return user_counters_tuple
end
我怎麼能說recalc_score(ID )函數並返回user_counters_tuple而不等待前一個函數執行完成時?
那麼容易!它工作正常! 謝謝! –