我想通过mongos执行一个java脚本文件,将数据插入到我的切分集。此外,我还想添加一个动态变量和空值-
我将(手动)登录到shell
mongo :端口/管理my_script.js
我的js看起来:
变量= 1000000;变量x=1;变量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”是我正确执行该过程的方式?(关于如何连接mongos /切分集)
诚挚的问候
编辑:非常重要的是--我如何计算出时间,mongodb/切分集需要存储所有的数据?平衡一下吗?
编辑第二版:
嗨罗斯
我有一个切分集,它由两个碎片(两个副本集)组成。目前我正在测试,因此我使用循环计数器作为切分键。有没有办法检查javascript内的时间?
更新:
因此,度量存储数据所需的时间等于执行javascript的时间吗?(或者由于执行而无法访问mongo的时间)
对于测量查询响应时间,这一假设是否可以接受?(我必须在哪里存储java脚本文件?)
发布于 2012-09-06 13:08:41
您不需要保留多个计数器,因为在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);
}关于存储/平衡数据所需的时间--这取决于几个因素。
首先,你的碎片钥匙是什么?它是随机值还是递增值(如时间戳)。碎片键的随机模式有助于确保写操作的均匀分布,如果您知道碎片键的范围,您可以使用预劈开碎片来确保加载数据时保持平衡。如果切分键像时间戳一样增加,那么最有可能的是其中一个碎片会变热,它将始终位于范围的顶部,并且必须拆分块并将数据迁移到其他碎片。
在MongoDB英国,有几个关于切分的很好的演示:切分概述和分享最佳做法。
更新:
至于碎片需要多长时间才能达到平衡,这取决于机器上的负载。平衡是一个轻量级的过程,因此应该将其视为后台操作。需要注意的是,即使在将数据写入mongos之后,也可以访问该系统进行查询。因此,如果碎片在数据加载期间变得不平衡,那么数据仍然是可访问的--重新平衡碎片可能需要时间--取决于碎片的负载和新数据的添加,这意味着在迁移之前需要分割块。
Update2
插入到mongos是同步的,所以运行脚本所需的时间就是应用插入所需的时间。关于使用getLastError的写入的持久性,还有其他选项,本质上是在写写时阻塞多长时间。shell透明地调用getLastError(),但是选择的语言的默认设置是异步的,而不是等待服务器响应。
在哪里存储javascript文件?-好吧,这取决于您-这是您的应用程序代码。大多数用户将用他们喜欢的语言编写应用程序,并使用驱动程序调用mongodb。
https://stackoverflow.com/questions/12300073
复制相似问题