运行 YCSB 使用 Workload E 进行加密和不进行加密之间存在巨大的运行时差异

Huge runtime difference between running YCSB with and without encryption with Workload E

我已经在 mongodb 企业中对 运行ning ycsb 进行了一些测试,有和没有静态加密。我使用的是默认工作负载,当 运行 连接工作负载 E.

时,我发现了一些奇怪的结果

在没有加密的情况下,运行时间大约是 13 分钟,但是当我将其切换到加密数据库时,运行时间跳到了可疑的 17 小时!!!

一定有问题,但我想不出是什么问题。所有测试都是在 100K 操作计数和 10M itens 计数下进行的,并且我在每次 运行 后重新启动系统。希望能帮我解决这个问题

YCSB 本身不进行加密 ,但依赖于 MongoDB 的 java 驱动程序。您是否尝试过 MongoDB 的文档?

您使用哪种加密方式?

我觉得你的结果并不令人惊讶。根据您的问题,您的工作负载文件如下所示:

recordcount=10000000
operationcount=100000
readproportion=0
updateproportion=0
scanproportion=0.95
insertproportion=0.05
requestdistribution=zipfian
maxscanlength=100
scanlengthdistribution=uniform

这是一个非常密集的扫描工作量。首先,扫描是列存储中最慢的操作。其次,假设加密需要 250 毫秒,解密需要 400 毫秒,客户端和 REST 服务器都必须为每个操作执行此操作,因此需要:(0.25 + 0.4)*100000 秒,即大约 18 小时。

编辑

根据您的评论,您正在使用 AES256 并比较工作负载 A 和 E。 工作负载 A 大约有 50% 的读取和 50% 的写入。如果您使用 YCSB 的标准行大小,则每行代表 1 kB(10 个字段,每个字段 100 B)。

因此,对于 10 万次操作,您正在处理以下数据量:

  • 工作负载 A:100000*0.5*1kB + 100000*0.5*1kB = 100 MB
  • 工作负载 E:100000*0.95*100*1kB + 100000*0.05*1kB = 9505 MB 因为您的扫描代表 100 行!

由于 AES 是分布式的,即 AES(A + B) = AES(A) + AES(B),您使用工作负载 E 加密了 95 倍以上的数据,这解释了时间差异。