为什么Dragonflydb在nodejs中比redis慢,与其基准测试相反

lyr7nygr  于 2023-11-16  发布在  Redis
关注(0)|答案(1)|浏览(223)

我需要示例化一个数据库,其中读取尽可能快,因此我想到了DragonflyDB,根据他们的Benchmarks,它声称比redis快得多。它本质上是一个内存数据库,但设计于2022年,并且与Redis(和Memcached)共享几乎完全相同的API,我需要它来写/读哈希或集。
我为这样一个基准测试编写的代码如下(我将它分成几个块),设置为N_ITER = 10_000

const Redis = require("ioredis")
const redis = new Redis({
  host: "localhost",
  port: 6380,
  password: "",
})

console.time("1")
const myRedisGetKeys = () =>
  Promise.all(new Array(N_ITER).fill(1).map((_, i) => redis.get(i)))

myRedisGetKeys().then(_ => {
  console.timeEnd("1")
})

字符串
输出为1: 142.473ms

const Redis = require("ioredis")
const dragonfly = new Redis({
  host: "localhost",
  port: 6379,
  password: "",
})

console.time("2")
const myDragonflyGetKeys = () =>
  Promise.all(new Array(N_ITER).fill(1).map((_, i) => dragonfly.get(i)))

myDragonflyGetKeys().then(_ => {
  console.timeEnd("2")
})


输出为2: 728.216ms
你可能已经注意到了,Redis的阅读速度是Redis的5倍,我的方法有什么问题吗?
P.S.如果需要,我可以使用Python代码提供相同的结果,其中redis执行速度更快,但只有20%的因素。

kninwzqo

kninwzqo1#

您到底要测试/基准测试什么?
Dragonfly专为高工作负载而设计,特别是在并行处理多个请求(通常来自多个客户端)时。
我相信你的基准测试在Redis / Dragonfly响应之前就发送了一堆数据,这导致了流水线,在这种情况下,Redis和Dragonfly将具有相似的性能,事实上,在我尝试运行这个代码时,我得到了相似的数字。
如果您的生产工作负载类似(单个连接发出许多get操作,然后断开连接),您可能不一定能享受到Dragonfly的好处。
如果您的生产工作负载不同(例如,在所有小时内发送流量,在低流量和高流量之间有一些波动),那么我建议您修改您的基准测试以匹配这一点,或者仅使用现有的基准测试工具(如Redis的memtier

相关问题