作家
登录

如何从MongoDB迁移到MySQL?这有现成经验!

作者: 来源: 2017-10-20 11:05:20 阅读 我要评论

  1. module DatabaseTransformer 
  2.  
  3. def import(collection_name, *obsolete_columns, **rename_columns) 
  4.  
  5. collection = Mongoid::Clients.default.collections.select do |c| 
  6.  
  7. c.namespace == “#{database}.#{collection_name.to_s.pluralize}” 
  8.  
  9. end.first 
  10.  
  11. unless collection.present? 
  12.  
  13. STDOUT.puts “#{collection_name.to_s.yellow}: skipped” 
  14.  
  15. STDOUT.puts 
  16.  
  17. return 
  18.  
  19. end 
  20.  
  21. constant = collection_name.to_s.singularize.camelcase.constantize 
  22.  
  23. reset_callbacks constant 
  24.  
  25. DatabaseTransformer.profiling do 
  26.  
  27. collection_count = collection.find.count 
  28.  
  29. collection.find.each_with_index do |document, index
  30.  
  31. document = yield document if block_given? 
  32.  
  33. delete_obsolete_columns document, obsolete_columns 
  34.  
  35. update_rename_columns document, rename_columns 
  36.  
  37. update_id_columns document 
  38.  
  39. insert_record constant, document 
  40.  
  41. STDOUT.puts “#{index}/#{collection_count} ” if (index % 1000).zero? 
  42.  
  43. end 
  44.  
  45. end 
  46.  
  47. end 
  48.  
  49. end  

当完成了对文档的各类操作之后,该办法会直接调用 DatabaseTransformer#insert_record 将数据插入 MySQL 对应的表中;我们可以直接应用如下的代码将某个 Collection 中的全部文档迁徙到 MySQL 中:

  1. transformer = DatabaseTransformer.new ‘draven_production’ 
  2.  
  3. transformer.import :post, :_slugs, name: :title, _status: :status  

上述代码会在迁徙时将集号绫强一个文档的 _slugs 字段全部忽视,同时将 name 重定名成 title、_status 重定名成 status,固然作为列举类型的字段 mongoid-enum 和 ActiveRecord 的列举类型完全不合,然则在这里可以直接插入也没有什愦问题,ActiveRecord 的模型在创建时会本身处理字符串和整数之间的转换:

  1. def insert_record(constant, params) 
  2.  
  3. model = constant.new params 
  4.  
  5. model.save! validate: false 
  6.  
  7. rescue Exception => exception 
  8.  
  9. STDERR.puts “Import Error: #{exception}” 

  10.   推荐阅读

      如何选择硬盘:SSD硬盘vsHDD硬盘

    总之,HDD硬盘和SSD硬盘各有本身的市场。而兼具SSD硬盘和HDD硬盘的机能和特点的mSATASSD设备和混淆驱动器是花费者寻求分砂茨?的更浩揭捉?择。 沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的>>>详细阅读


    本文标题:如何从MongoDB迁移到MySQL?这有现成经验!

    地址:http://www.17bianji.com/lsqh/38066.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)