gpt4 book ai didi

tarantool - 所有 Tarantool 节点 (vshard) 上的可用空间

转载 作者:行者123 更新时间:2023-12-04 12:57:35 34 4
gpt4 key购买 nike

我将 Tarantool 与 vshard 模块一起使用。当设置bucket_id时,数据分布在整个集群中。每个节点都有自己的一组bucket_id。如何创建一个空间,以便在每个节点(字典)上都可以完全访问它?

最佳答案

我使用以下代码段在所有存储上运行一个函数(可能有更好的方法)。
假设我们有一个关于存储的函数:

local function putMyData(rows)
box.atomic(function()
for _, row in ipairs(rows)
box.mySpace:put(row)
end
end)
end

box.schema.func.create("putMyData", { if_not_exists = true })
box.schema.role.grant("public", "execute", "function", "putMyData", { if_not_exists = true })
rawset(_G, "putMyData", putMyData)

然后可以使用以下助手来调用该函数:
local function callAll(mode, fnName, args, resHandler, timeoutSec)
local replicaSets, err = vshard.router.routeall()
if err ~= nil then
error(err)
end

local count = 0
for _, _ in pairs(replicaSets) do
count = count + 1
end

local channel = fiber.channel(count)

local method
if mode == "read" then
method = "callbro"
else
method = "callrw"
end

for _, replicaSet in pairs(replicaSets) do
fiber.create(
function()
local res, fErr = replicaSet[method](replicaSet,
fnName, args, { timeout = timeoutSec or opts.timeout })
channel:put({ res = res, err = fErr })
end)
end

local results = { }

for i = 1, count do
local val = channel:get()
if val.err ~= nil then
error(val.err)
end

if resHandler == nil then
results[i] = val.res
else
resHandler(val.res, results)
end
end

return results
end

关于tarantool - 所有 Tarantool 节点 (vshard) 上的可用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64715029/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com