1

我想通过 mongos 执行一个 java 脚本文件,以便将数据插入我的分片集。除此之外,我想添加一个动态变量和 NULL 值 -

我会(手动)登录到外壳

mongo hostip:port/admin my_script.js

我的 js 看起来像:

变量数量 = 1000000; 变量 x=1; 变量文档='';

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/sharding 集需要存储所有数据?并平衡它?

编辑二:

嗨罗斯,

我有一个由两个分片(两个副本集)组成的分片集。目前我正在测试,因此我使用循环计数器作为分片键。有没有办法检查javascript中的时间?

更新:

那么测量存储数据所需的时间相当于执行 javascript 的时间吗?(或者由于执行而无法访问 mongo shell 的时间)

对于测量查询响应时间,该假设是否可以接受?(我必须在哪里存储 java 脚本文件?)

4

1 回答 1

1

您不需要保留多个计数器 - 因为您i在 for 循环的每次迭代中递增。当你想要值而不是字符串时,使用idnull不是字符串"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 UK 上有几个关于分片的很好的演讲:分片概述和分片最佳实践

更新:

关于分片平衡需要多长时间 - 这取决于您机器上的负载。平衡是一个轻量级的过程,所以应该被认为是一个后台操作。重要的是要注意,即使使用分片系统,只要将数据写入mongos其可访问的查询即可。因此,如果分片在数据加载期间变得不平衡,则数据仍然可以访问 - 重新平衡分片可能需要时间 - 取决于分片的负载和新数据的添加,这意味着在迁移之前需要拆分块。

更新2

插入mongos是同步的,因此运行脚本所花费的时间就是应用插入所花费的时间。关于使用getLastError的写入持久性还有其他选项,基本上是在写入写入时阻塞多长时间。shell 调用getLastError()是透明的,但您选择的语言的默认设置是异步的,不等待服务器响应。

javascript文件存储在哪里?- 这取决于你 - 它是你的应用程序代码。大多数用户会用他们喜欢的语言编写应用程序并使用驱动程序调用 mongodb。

于 2012-09-06T13:08:41.847 回答