概述
对于隔离写入(isolated writes),RedisJSON 比 MongoDB 快 5.4 倍,比 ElasticSearch 快 200 倍以上。
对于隔离读取(isolated reads),RedisJSON 比 MongoDB 快 12.7 倍,比 ElasticSearch 快 500 倍以上。
在混合工作负载场景中,实时更新不会影响 RedisJSON 的搜索和读取性能,而 ElasticSearch 会受到影响。以下是具体的数据:
查询引擎
1.加载优化
接下来的两个图显示了运行纽约市出租车基准测试的运行结果。该基准测试测量了吞吐量和加载耗时等基础数据。搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。
2.全文搜索优化
为了评估搜索性能,我们索引了590万篇维基百科摘要。然后我们运行一个全文搜索查询面板,得到的结果如下图所示
和其他框架的对比
1. 基准测试
此次测试,我们使用了如下的一些软件环境:
测试是在三节点集群上执行的,部署细节如下:
ElasticSearch 7.15:15 个分片设置,启用查询缓存,并为 2 个基于 NVMe 的本地 SSD 提供 RAID 0 阵列,以实现更高级别的文件系统相关弹性操作性能。这 15 个分片为我们为 Elastic 所做的所有分片变体提供了可实现的最佳性能结果。搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。
2. 100% 写入基准
3. 100% 读取基准
4. 混合读/写/搜索基准
在每个测试变体中,我们添加了 10% 的写入,以按相同的比例混合和减少搜索和读取百分比。这些测试变体的目标是了解每个产品如何处理数据的实时更新,我们认为这是事实上的架构目标,即写入立即提交到索引,读取始终是最新的。
正如您在图表中所看到的,在 RedisJSON* 上不断更新数据和增加写入比例不会影响读取或搜索性能并提高整体吞吐量。对数据产生的更新越多,对 ElasticSearch 性能的影响就越大,最终导致读取和搜索速度变慢。
5. 完整延迟分析
查看上一节的吞吐量图表,并关注 10% 更新基准以包含所有三个操作,我们做了两种不同的可持续负载变化: 250 ops/sec:比较 MongoDB、ElasticSearch 和 RedisJSON*,低于 MongoDB 的压力率。
6000 ops/sec:比较 ElasticSearch 和 RedisJSON*,低于 ElasticSearch 压力率。
1 MongoDB 与 ElasticSearch 与 RedisJSON* 的延迟分析
在下面的读取和更新图表中,我们可以看到 RedisJSON* 在所有延迟范围内表现最佳,其次是 MongoDB 和 ElasticSearch。搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。
RedisJSON* 是在所有分析的延迟百分位数上保持亚毫秒级延迟的唯一解决方案。在 p99,RedisJSON* 的延迟为 0.23 毫秒,其次是 MongoDB 的 5.01 毫秒和 ElasticSearch 的 10.49 毫秒。
2. ElasticSearch 与 RedisJSON 的延迟分析
如何开始
RedisJSON* | |
---|---|
Node.js | node-redis |
Java | Jedis |
.NET | NRedisJSON NRediSearch |
Python | redis-py |