迁移到MongoDb?

时间:2013-12-11 01:03:37

标签: mysql mongodb data-migration

我目前有一个mySQL数据库,我将迁移到MongoDB。我已经开始编写一个迁移工具,我很好奇是否有更有效的方法来达到我的最终目标。

数据的实际结构相当复杂,但我会尝试使用简化版本来提问我的问题。假设我有以下MySQL表:

Surveys
   Survey_id
   Title
   CreateUser (fk)

Users
   User_id
   Fname
   Lname

我的计划是将这些迁移到基本匹配此结构的MongoDB集合。外键将成为User集合的引用。我目前正计划采取以下步骤来执行此操作:

  1. SELECT Survey_id, Title FROM Surveys
  2. 将此数据插入MongoDb的Surveys集合
  3. Select User_id, fname, lname FROM Users
  4. 插入MongoDB中的users集合
  5. SELECT CreateUser, SurveyId FROM Surveys
  6. 根据CreateUser ID查找Users集合中的每个相应记录,并将对Users集合的引用插入到现有Surveys文档中。
  7. 从每个Survey_id文档中删除Surveys字段
  8. 从每个User_id文档
  9. 中删除Users字段表单

    这是一种合理的方法,还是我让事情变得比他们需要的更复杂?

1 个答案:

答案 0 :(得分:0)

如果数据不是很大,那么更改操作顺序并在RAM中进行映射是有意义的,即

  1. SELECT * FROM Users
  2. 在MongoDB中插入用户
  3. 将对(SQL id, MongoDB id)添加到哈希表
  4. SELECT * FROM Surveys
  5. 对于每次调查,请将CreateUser替换为Hashtable[CreateUser]
  6. 将调查插入MongoDB
  7. 通常情况下,这会快得多,因为您不需要更新mongodb中的对象,而且您不必再次查询数据。

    您应该尝试使用MongoDB的批量插入,而不是逐个插入文档。而不是获取新创建的文件'来自数据库的id,您可以自己分配MongoDB主键。否则,驱动程序无论如何都会这样做,而不是数据库本身,所以没有这样做没有真正的优势。

    如果数据量巨大(这样您无法将查找表保留在RAM中),我会尝试坚持查找并逐个子集地处理它们。如果你有很多外键,这将是棘手的。