我想使用 YCSB 基准测试 来衡量 MongoDb Atlas 的性能。 为了进行测试,我首先在本地主机 mongo 数据库实例上的 ubuntu 上执行了基准测试,效果很好,因此基准测试似乎设置正确。现在我想在云中对 MongoDb (MongoDb Atlas) 进行基准测试,但我在连接到服务器时遇到问题。由于YCSB基准测试是基于java的,所以我想使用我的集群的java连接字符串进行基准测试,即
mongodb+srv://<user>:<password>@cluster0.swk7mjl.mongodb.net/?retryWrites=true&w=majority
(我已经设置了我的用户凭据)
我尝试使用以下命令加载基准数据:
./bin/ycsb load mongodb -s -P workloads/workloada -p mongodb.url=mongodb+srv://user:[email protected]/?retryWrites=true&w=majority -p mongodb.auth="true" -p recordcount=1000 > outputLoad.txt
这会生成以下错误消息:
ERROR: Invalid URL: 'mongodb+srv://cluster0.swk7mjl.mongodb.net/?retryWrites=true'. Must be of the form 'mongodb://<host1>:<port1>,<host2>:<port2>/database?options'. http://docs.mongodb.org/manual/reference/connection-string/
所以我省略了
srv
部分并再次尝试了该命令:
./bin/ycsb load mongodb -s -P workloads/workloada -p mongodb.url=mongodb://user:[email protected]/?retryWrites=true&w=majority -p mongodb.auth="true" -p recordcount=1000 > outputLoad.txt
但这会导致以下错误:
Exception while trying bulk insert with 0
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches PrimaryServerSelector. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0.swk7mjl.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0.swk7mjl.mongodb.net}, caused by {java.net.UnknownHostException: cluster0.swk7mjl.mongodb.net}}]
我还尝试了一种变体,即省略 URL 中的凭据并将它们设置为参数
mongodb.username
和 mongodb.password
:
./bin/ycsb load mongodb -s -P workloads/workloada -p mongodb.url=mongodb://cluster0.swk7mjl.mongodb.net/?retryWrites=true&w=majority -p mongodb.username=user -p mongodb.password=password -p mongodb.auth="true" -p recordcount=1000 > outputLoad.txt
但这会导致同样的错误。
MongoDb Atlas集群的网络访问中,IP地址0.0.0.0/0被列入白名单,所以任何地方都应该可以访问。我还可以通过 Mongo shell 连接到集群。
有谁有 YCSB 基准测试经验,并且知道
mongodb.url
参数的正确连接字符串是什么,或者我是否遗漏了其他内容?
您是否能够通过 ycsb 连接到 mongodb 服务器?我也面临着同样的问题。