作家
登录

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

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

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!


若何大年夜MongoDB迁徙到MySQL?这有现成经验!

比来的一个多月时光都在做数据库的迁徙工作,我今朝在开辟的项目在上古时代是应用 MySQL 作为重要数据库的,后来竽暌股于一些营业上的原因大年夜 MySQL 迁徙到了 MongoDB,应用了几个月的时光后,因为数据库办事异常不稳定,再加上无人把守,同时 MongoDB 本身就是无 Schema 的数据库,最后导致数据库的脏数据问题异常严重。今朝团队的成员没有较为丰富的 Rails 开辟经验,所以照样欲望应用 ActiveRecord 加上 Migration 的方法对数据进行一些强限制,包管数据库中数据的┞俘当。

本文会介绍作者在迁徙数据库的过程中碰到的一些问题,并为各位读者供给须要停机迁徙数据库的可行筹划,如不雅须要一向机迁徙数据库照样须要其余筹划来解决,在这里供给的筹划用于百万数据量的 MongoDB,估计的停机时光在两小时阁下,如不雅数据量在切切级别以上,过长的停机时光可能是无法接收的,应当设计一向机的迁徙筹划;无论若何,作者欲望这篇文┞仿可以或许给想要做数据库迁徙的开辟者带来一些思路,少走一些坑。

经由过程这数据迁徙和关系重建两个步调就已经可以解决绝大年夜部分的数据迁徙问题了,然则因为 MongoDB 和 ActiveRecord 中对于多对多关系的处理比较特别,所以我们须要零丁进行解决,如不雅所有的迁徙问题到这里都已经解决了,那么我们就可以应用下面的迁徙文件将数据库中与 uuid 有关的全部列都删除了:

  1. module RelationBuilder 
  2.  
  3. def build_relations(class_name, polymorphic_associations = [], rename_associations = {}) 
  4.  
  5. uuids = class_name.attribute_names.select { |namename.end_with? ‘_uuid’ } 
  6.  
  7. unless uuids.present? 
  8.  
  9. STDOUT.puts “#{class_name.to_s.yellow}: skipped” 
  10.  
  11. STDOUT.puts 
  12.  
  13. return 
  14.  
  15. end 
  16.  
  17. reset_callbacks class_name 
  18.  
  19. RelationBuilder.profiling do 
  20.  
  21. models_count = class_name.count 
  22.  
  23. class_name.unscoped.all.each_with_index do |model, index
  24.  
  25. update_params = uuids.map do |uuid| 
  26.  
  27. original_association_name = uuid[0…-5] 
  28.  
  29. association_model = association_model( 
  30.  
  31. original_association_name, 
  32.  
  33. model[uuid], 
  34.  
  35. polymorphic_associations, 
  36.  
  37. rename_associations 
  38.  
  39.  
  40. [original_association_name.to_s, association_model] 
  41.  
  42. end.compact 
  43.  
  44. begin 
  45.  
  46. Hash[update_params].each do |key, value| 
  47.  
  48. model.send “#{key}=”, value 
  49.  
  50.  1/9    1 2 3 4 5 6 下一页 尾页

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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