将关系型数据库(RDBMS)中的数据导入MongoDB的想法
这个表不一定要使用RDBMS,对吧?比方说,假如我们有一个这样的表,
那我们可以试着将数据放到NoSQL中,快速验证一下性能和方便程度,这就是数据迁移的想法备忘录。
-
- RDBMS=MySQL
- NoSQL=MongoDB
| id | name1 | name2 | name3 |
| 10 | あああああ | いいいいい | ううううう |
我想把这张桌子搬到这样的位置。
> db.table_name.findOne();
{
"_id" : ObjectId("56e0f29de1382344d936be92"),
"id" : "10",
"name1" : "あああああ",
"name2" : "いいいいい",
"name3" : "ううううう"
}
PHP7是用于迁移的简易PG工具。
<?php
// MongoDB接続
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
// MySQL接続
$mysqli = new mysqli('localhost', 'user_name', 'password', 'db_name');
// カウンタ
$start = 0;
$limit = 1000; //{$limit}件ずつでcommit的な
while ($cnt > 0) {
$query = "SELECT * FROM table_name LIMIT " . $start . ", " . $limit;
if ($result = $mysqli->query($query)) {
$bulk = new MongoDB\Driver\BulkWrite;
while ($obj = $result->fetch_assoc()) {
$bulk->insert($obj);
}
$manager->executeBulkWrite('db_name.table_name', $bulk);
}
$result->free();
$cnt = $cnt - $limit;
$start = $start + $limit;
}
$mysqli->close();
?>
(注意)
* PHP7中MongoDB的扩展函数名称和用法与旧版本有所改变。
* 我对MongoDB接触不多,关闭处理和大量数据的批量处理都是随意的。
* 我会后续学习正确的写法。
* 上述步骤目前已经达到了目的。在我在mbp上创建的虚拟机环境中,迁移100万条数据只需要大约10分钟。