【发布时间】:2011-10-13 13:22:42
【问题描述】:
我们正在尝试从 mysql 迁移到 mongodb。 mysql结构是 id_src 整数 id_dest int 唯一键:id_src,id_dest
它们在 mysql 中大约有 2 亿行
数据示例: {id_src,id_dest} {1,2} {1,3} {1,10} {2,3} {2,10} {4,3}
我们需要检索数据: {id_dest,count} {3,3} {10,2} {2,1}
我开始在mongodb中重现mysql的结构。 插入性能非常好(非常好):插入 2 亿行大约需要 1 小时。
但我需要使用 map reduce 来获取分组。 Map reduce 大约需要 1 小时。
所以我尝试创建另一个 mongodb 结构: {id_dest,{id_src1,id_src2}}
每个文档可以有十万个id_src。
这是我的 insert.php 代码
$res=mysql_unbuffered_query("select * from ids limit 10000100");
while ($tab=mysql_fetch_array($res)) {
$collection->update(array('_id'=>(int)$tab['id_dest']),array('$push' => array('src'=>(int)$tab['id_src'])),array("upsert" => true));
}
但在那种情况下性能很差,每秒只有很少的更新。
我做错了吗?
【问题讨论】:
-
如果 1h 对于 200m 行来说是“巨大的”,那么让我问你这个问题:在 MySQL 中插入 200m 行需要多长时间?
-
当我说“巨大”时,我是在说“非常非常好”。但是我的问题是地图减少了获得“分组依据”的时间,这对我们来说是可以接受但并不完美的。我想知道使用 mongodb 特性(多值字段)的新文档模型是否比仅仅重现 mysql 数据结构不聪明。
-
我明白了。让我们等待一个好的答案,然后:-)
-
感谢 @lukas 帮助我理解我的观点
-
Mongo 中的 MapReduce 目前有一个主要的“缺点”:它目前只使用一个 cpu...