我想通过mongos执行java脚本文件,以便将数据插入到我的分片集中。除此之外,我想添加一个动态变量和NULL值 -
我会通过
(手动)登录shellmongo hostip:port / admin my_script.js
我的js看起来像:
var amount = 1000000; var x = 1; var doc ='';
for (i=0; i<amount; i++)
{
doc = { a: '1', b: '2', c: 'text' , d: 'x', e: 'NULL'}
db.mycol.insert(doc);
x=x + 1
}
(而不是“x”我可以使用“i”) “d”写“x”的值还是只写字母“x”? “e”写文本“Null”还是..让我们说“数据库NULL” 我正确地执行该程序的方式是什么? (关于我如何连接到mongos /分片集)
最好的问候
编辑: 而且非常重要 - 如何计算时间,mongodb /分片集需要存储所有数据?平衡了吗?
编辑第二名:
嗨罗斯,
我有一个由两个分片(两个副本)组成的分片集。目前我正在测试,因此我使用循环计数器作为分片键。 有没有办法检查javascript中的时间?
更新
因此,测量存储数据所需的时间相当于执行javascript的时间? (或者由于执行而无法访问mongo shell的时间)
这个假设是否可以用来衡量查询响应时间? (我在哪里存储java脚本文件?)
答案 0 :(得分:1)
您不需要保留多个计数器 - 因为您在for循环的每次迭代中递增i
。如果您想要值而不是字符串,请使用i
代替d
和null
而不是字符串"NULL"
- 继承清理循环:
var amount = 1000000;
for (i=1; i<amount+1; i++) {
doc = { a: '1', b: '2', c: 'text' , d: i, e: null }
db.mycol.insert(doc);
}
关于存储/平衡数据所需的时间 - 这取决于几个因素。
首先,你的分片键是什么?它是随机值还是增加值(如时间戳)。分片键的随机模式有助于确保均匀分布写入,如果您知道分片键的范围,则可以pre-split the shard尝试确保在加载数据时保持平衡。如果分片密钥像时间戳一样增加,则很可能一个分片将变为 hot ,并且它将始终位于范围的顶端,并且必须分割块并将数据迁移到其他分片。
在MongoDB UK,有几个关于分片的好演示文稿:Overview of sharding和Sharding best practices。
<强>更新强>
关于碎片平衡需要多长时间 - 这取决于机器的负载。平衡是一个轻量级的过程,因此应该被视为后台操作。重要的是要注意,即使数据被写入mongos
,也可以使用分片系统进行查询。因此,如果分片在数据加载期间变得不平衡,则数据仍然可访问 - 重新平衡分片可能需要一些时间 - 取决于分片的负载和新数据的添加,这意味着需要在迁移之前分割块。
<强> UPDATE2 强>
mongos
的插入是同步的,因此运行脚本所花费的时间是应用插入所花费的时间。使用getLastError写入的持久性还有其他选项,基本上是在写入写入时阻塞多长时间。 shell透明地调用getLastError()
,但language of choice的默认值是异步的,而不是等待服务器响应。
在哪里存储javascript文件? - 这取决于你 - 它是你的应用程序代码。大多数用户将使用他们的首选语言编写应用程序,并使用驱动程序调用mongodb。