将关系型数据库(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分钟。

广告
将在 10 秒后关闭
bannerAds