使用 Elastic Search Nest 插入数据的性能问题
Performance Issue on Inserting Data using Elastic Search Nest
我们正在为我们的应用程序使用 Elastic Search Nest 客户端,我们对将文档插入 Elastic Search DB 进行了负载测试,我们发现存在性能问题。
索引大小 2Kb,分片数 5,副本 1,单实例数据库(无集群)
最终结果统计我们每秒只能插入 3 条记录..这是预期结果吗?
当我们增加客户端线程时,结果变为每秒 2 条记录,请建议
测试用例
5个并行线程,每个线程同步推送记录(10000条)。耗时约50分钟(每个线程),每秒插入3条记录。
我在应用程序启动时创建了 N(对于此测试用例为 5)个客户端,并将其重新用于所有请求。
服务器详细信息:
16GB RAM,64 位 OS,Intel Core i7,Windows Server 2008 R2,500 GB 硬盘
客户端机器:
16GB 内存,64 位 OS,Intel Core i7,Windows 7 professional
如果您不使用批量 API,您将无法获得良好的性能。
从 5.0 开始,我们 fsync
磁盘上的每个请求。
可以包含例如 10 000 个索引请求的批量请求将是 fsync
一次。
10 000 个索引请求将生成 10 000 个 fsync 操作。
例如,在我的数据集上,从 2.x 切换到 5.x 我观察到以下结果:
单索引操作:
- 2.x: 200 docs/s
- 5.0: 20 docs/s
批量操作:
- 2.x: 12000-15000 docs/s
- 5.0: 12000-16000 docs/s
如果您愿意,可以将 index.translog.durability
索引设置更改为 async
,但如果出现问题,您将面临数据丢失的风险。
阅读更多关于 Translog
我们正在为我们的应用程序使用 Elastic Search Nest 客户端,我们对将文档插入 Elastic Search DB 进行了负载测试,我们发现存在性能问题。
索引大小 2Kb,分片数 5,副本 1,单实例数据库(无集群)
最终结果统计我们每秒只能插入 3 条记录..这是预期结果吗?
当我们增加客户端线程时,结果变为每秒 2 条记录,请建议
测试用例
5个并行线程,每个线程同步推送记录(10000条)。耗时约50分钟(每个线程),每秒插入3条记录。
我在应用程序启动时创建了 N(对于此测试用例为 5)个客户端,并将其重新用于所有请求。
服务器详细信息: 16GB RAM,64 位 OS,Intel Core i7,Windows Server 2008 R2,500 GB 硬盘
客户端机器: 16GB 内存,64 位 OS,Intel Core i7,Windows 7 professional
如果您不使用批量 API,您将无法获得良好的性能。
从 5.0 开始,我们 fsync
磁盘上的每个请求。
可以包含例如 10 000 个索引请求的批量请求将是 fsync
一次。
10 000 个索引请求将生成 10 000 个 fsync 操作。
例如,在我的数据集上,从 2.x 切换到 5.x 我观察到以下结果:
单索引操作:
- 2.x: 200 docs/s
- 5.0: 20 docs/s
批量操作:
- 2.x: 12000-15000 docs/s
- 5.0: 12000-16000 docs/s
如果您愿意,可以将 index.translog.durability
索引设置更改为 async
,但如果出现问题,您将面临数据丢失的风险。
阅读更多关于 Translog