首页 > 解决方案 > 在 Java 中的 Set 集合中创建 100K 元素的最佳实践

问题描述

为 Elasticsearch 创建一个 Injector 应用程序,以便对我正在处理的项目进行性能测试。我有用户,每个用户每天都有活动,活动可以是拨打/接听电话、开会、发送/接收电子邮件等。我将 Injector 作为 Java 应用程序运行,参数为 number-of-usersnumber -of-activities-per-day-per-usernumber-of-days。用户名(名字和姓氏)必须是唯一的。为此,我有一个包含 5000 个名字的列表和一个包含 5000 个姓氏的列表,为了使用户名唯一,我从列表中随机选择名字和姓氏,我存储在 aSet和当我有完整列表时,我将其发送到注入器,该注入器使用随机为每个用户创建活动流 API .parallelStream()

我的第一次性能测试针对 500 个用户,每个用户每天 30 个事件,5 个工作日 = 75K 文档。为这个测试创建数据很顺利,我在一个Set集合中创建Thread了 500 个唯一的用户名,并检查了为每个用户创建活动的集合。

我的挑战是在第二个测试中(我想将继续下一个测试),我需要 50K 用户的数据:当创建带有用户名的集合时,我得到OutOfMemoryException了大约 10K 用户。

有没有一种方法可以创建用户名的集合,以保持名称的唯一性并且不会导致OutOfMemoryException?

我将不胜感激任何帮助、提示和评论。

标签: multithreadingelasticsearchcollectionsjava-8set

解决方案


推荐阅读