gpt4 book ai didi

tarantool - 性能 : get+[delete if exists] vs delete

转载 作者:行者123 更新时间:2023-12-04 01:23:23 25 4
gpt4 key购买 nike

我有两个选择:

  1. 检查元组是否存在,如果存在则删除
  2. 无条件删除

大多数操作都试图删除空间中不存在的元组(不删除或无条件删除)。

我想知道什么是首选操作?

最佳答案

TL;DR:选项 1 通常会更快。

一般来说,DELETE 操作比 get 操作慢,因为它是写操作。但是,有几个时刻可能会根据您的特定工作负载改变这一点:

  1. DELETE 对不存在的键的操作仍会生成 wal-entry,这将占用大部分时间。因此,如果您使用 wal_mode='none',无操作 DELETE 会快得多。
  2. GET 操作会导致 msgpack 解码,所以如果你的键比较小,元组比较大,你的GET 操作会比较慢。
  3. (显然)请求中不存在的键的百分比将显着影响两个选项之间的速度比。

您可以调整这个短板凳以查看实数:

clock = require('clock')
box.cfg{}
t = box.schema.space.create('t', {if_not_exists=true})
t:create_index('pk', {if_not_exists=true})
t:truncate()
for i = 1,10000 do
t:replace{i, 'abcdef'}
end

local keys = {}
for i=1,50000 do
table.insert(keys, math.random(1, 50000))
end

tm = clock.time()
for _, key in ipairs(keys) do
--if t:get(key) ~= nil then
t:delete(key)
--end
end
collectgarbage()
print(clock.time()-tm)

在这里,

  • 数字用于按键,
  • 短字符串用作元组负载,
  • 命中率约为 20%。

取消注释 if 子句以衡量选项 1。

在我的笔记本电脑和上面的数字上,这个工作台显示选项 1 大约快 6 倍。

关于tarantool - 性能 : get+[delete if exists] vs delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62266510/

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