通过mongos和javascript插入数据

时间:2012-09-06 12:24:04

标签: javascript mongodb

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

我会通过

(手动)登录shell
  

mongo 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脚本文件?)

1 个答案:

答案 0 :(得分:1)

您不需要保留多个计数器 - 因为您在for循环的每次迭代中递增i。如果您想要值而不是字符串,请使用i代替dnull而不是字符串"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 shardingSharding best practices

<强>更新

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

<强> UPDATE2

mongos的插入是同步的,因此运行脚本所花费的时间是应用插入所花费的时间。使用getLastError写入的持久性还有其他选项,基本上是在写入写入时阻塞多长时间。 shell透明地调用getLastError(),但language of choice的默认值是异步的,而不是等待服务器响应。

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