使用我自己的查询负载测试 mongodb

Load test mongodb with my own query

我写了一个聚合组和计数查询,我打算模拟一个真实的场景,在这个场景中,每秒有成千上万的用户调用我的系统(每次调用都会产生一个聚合查询)以统计他们的活动。

所以我向数据库中插入了 1000 万条记录(代表用户活动),并使用 JMeter 模拟聚合调用,但我遇到了以下问题:

由于上述原因我无法使用 JMeter 进行负载测试,我该如何回答以下问题:

How much load my server could handle? in my use case how much 1 server can process aggregation queries (resulted from user activity requests) in 1 second?

保持其他因素不变(如应用程序代码、网络、分片等)

我会首先关注记录生成。如果您需要模拟会话并将特定请求关联到特定用户 ID,那么最简单的方法是使用字符串操作(例如,将 {USERID} 标记放入字符串中,加载 python/java/bash/etc 中的每一行并将 USERID 替换为您的为特定会话长度生成的 ID)。基本上,我会考虑将数据集处理为离线任务,我可以对其进行流式传输和操作以模拟 USERID 或任何其他会话。流式传输结果并对其进行操作可能需要数小时,或者您可以快速使用一组 cut/sed/awk 脚本,或者您可以将所有记录加载到一个单独的集合中,然后 运行 对它们进行 map reduce(例如,根据jsessionid聚合)。

此时,您将拥有一个包含 JSON 的文本文件,代表您的数据集。新建一个集合,导入数据集,慢慢等待。

现在编写一个脚本(mongo 采用普通旧 javascript)以特定速率执行一系列查询(在 nodejs 中使用异步或普通旧 javascript、settimeout 和v8).编写一个脚本来增加并发用户数或减少请求之间的时间。 运行 编写脚本并监控您的延迟和服务器,当延迟变得不可接受时,您就有能力了。

另一种排列是 运行 针对 1M、2M、5M、10M 行的类似加速负载测试,绘图(数据集大小、每秒请求数、延迟百分比)。这为您的工作提供了一个漂亮的 3D 图表。

使用JSR223 Sampler and groovy 语言执行您的查询。

查看: