我已经在 mongodb 企业中进行了一些运行 ycsb 的测试,使用和不使用静态加密。我使用的是默认工作负载,但在运行工作负载 E 时发现了一些奇怪的结果。
没有加密的运行时间大约是 13 分钟,但是当我将它切换到加密数据库时,运行时间跳到了可疑的 17 小时!!!
一定有什么问题,但我想不出它可能是什么。所有测试均使用 100K 操作计数和 10M 次计数进行,每次运行后我都会重新启动系统。希望能得到一些帮助来解决这个问题
我已经在 mongodb 企业中进行了一些运行 ycsb 的测试,使用和不使用静态加密。我使用的是默认工作负载,但在运行工作负载 E 时发现了一些奇怪的结果。
没有加密的运行时间大约是 13 分钟,但是当我将它切换到加密数据库时,运行时间跳到了可疑的 17 小时!!!
一定有什么问题,但我想不出它可能是什么。所有测试均使用 100K 操作计数和 10M 次计数进行,每次运行后我都会重新启动系统。希望能得到一些帮助来解决这个问题
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)。
因此,对于 100k 次操作,您正在处理以下数据量:
100000*0.5*1kB + 100000*0.5*1kB = 100 MB
100000*0.95*100*1kB + 100000*0.05*1kB = 9505 MB
因为您的扫描代表 100 行!由于 AES 是分布式的,也就是说AES(A + B) = AES(A) + AES(B)
,您使用工作负载 E 加密了 95 倍以上的数据,这解释了时间差异。