新手问题 数据库已经有了,如何重写成 Rails 应用

RubyRay · 2018年03月18日 · 最后由 RubyRay 回复于 2018年03月22日 · 3060 次阅读

2018 年 3 月 22 日,结贴

感谢各位的指点,受教良多:

  1. 如果只是想锻炼技术,有很多方式;
  2. 现有系统运行稳定,若想替换,再三考虑,特别是生产事故;
  3. 数据量如果较大,建议用更直接的方式进行迁移,免去不必要的开支;

huacnlee:要大量迁移,得写成并发执行(Ruby 也写成可以并发执行的),最好是批量原生 SQL 插入,避免无谓的动作降低速度

2018 年 3 月 18 日

我现在有这么一个 场景: 原先的系统已经运行了一段时间,期间已经产生了许多的数据。现在我准备把以前的系统,改成 Rails 的。那要怎么利用上原来的数据呢?

我感觉,主要的 思路 就是:

  1. Rails 中新建迁移,把表结构和模型处理好。
  2. Rails 中把原始数据通过迁移的方式导入进去,(或者使用数据库还原工具)
  3. 正常使用原始数据...

如果数据库体量比较大(60G),表的数目比较多(300 张),那要一个个添加上这些还是挺困难的。

我翻看 Rails Guide Active Record 迁移章节,提到了 数据库模式转储.。

不知道数据库模式文件,到底怎么用?

重新创建了数据库结构,就继续在 Rails 中创建模型吗……

没太明白你的场景,其实是重写吧? 假设目前的系统是 PHP,其实你想做的是拿 Rails 搭建出一个功能一样的系统,然后换掉 PHP?

1c7 回复

是的,正是这个意思。

如果是纯粹为了使用新语言和框架我建议你不要做任何改变,如果是重新设计架构则另说。

那就用原来的数据库,自己对应 model 就行了。。。

同意 5 楼的 如果是重写的话没有必要迁移数据库,使用旧的数据库,创建对应的 model,ActiveRecord 会自动对应表里的字段。可以参考 https://stackoverflow.com/a/29571368/8493113

1 楼提供的那么好用的 gem 为什么不去看下呢

这么大的数据量还有 rails?

pynix 回复

才 60G 啊?

gaotongfei 回复

嗯嗯,感谢,这个 gem 确实不错,我多多研究一下。

Rei 回复

嗯嗯,感谢您的回复。目前我也还只停留在“想法”阶段,距离“行动”还得再精打细算一番。我之所以有这样的打算,一方面想锻炼一下自己的技术,一方面也是想以后的维护不那么痛苦。哈哈,在探索的过程中,就会有很多想法啊。

BigNerdCoding 回复

原有的旧系统,维护过程就像是在不断地堆垃圾,实在难以忍受,才会有此想法。不过,也确实是想尝试新语言新框架,毕竟 web 要涉及的东西对我来说还是太多,换种语言换种思路,或许会带来新的拓展。

14 楼 已删除
qqerqqer 回复

嗯,这不失为一个好的办法。我想,如果以后的新系统,会用到旧的数据,也可以这么做。我多尝试下,感谢。

在维护老代码的时候想整个推翻重来,这是程序员的常见病,得治 😀

老代码久经考验,很多人补过无数坑,不是一个脑袋短期内能考虑周全的。

如果想锻炼一下技术,可以试着用 Rails 套上 discuz 的表重写一下,这对推广 Rails 应该很有帮助,还避免了老系统崩溃的问题。

msg7086 回复

60G 数据感觉 rails 已经拖不起来了。。。

pynix 回复

GitHub:喵喵喵?

GitLab:喵喵喵?

如果准备重写的话,可以考虑在 Rails 这端设计新的数据库结构,然后实现 sync 机制把新数据同步到老系统的数据库里,直到新系统完全取代旧的

20 楼 已删除

repo 数据不算吧。。。。。。。

我也是新手..我提供一个方案。

我最近自己在做一个爬虫和 rails 结合的项目,爬虫数据存储到数据库,然后 rails 连接同一个数据库。 由于我这个项目的数据部分只需要从数据库读取。第一步是建立对应的 model,新建 model 的时候没有新建 migration 文件,然后在 model 中使用 self.table_name = "" 的方式,迁移一下,scheme 文件中就可以看到对应的字段了。(爬虫的数据库是 pg rails 数据库也是 pg)

数据部分就搞定了,剩下的如果新建 model 就和平时写 rails 没什么区别了。

顺便再提供几个我考虑过的方案。一是导出 csv 再导入,二是直接数据库导出 sql 然后导入。第二个方案如果数据库不同的话需要做一部分修改。

因为我也是才开始写 rails 没多久,这有几个我参考的 ruby china 中的帖子,希望对你有帮助!

  1. Rails 如何对已有的数据表建立相应的 Model?
  2. 在现有数据库上进行一个 rails 新项目
  3. 用 PostgreSQL 的 COPY 导入导出 CSV
  4. 使用 Ruby 处理大型 CSV 文件
  5. Rails CSV 文件数据 导入 导出 小记

黑魔法,Class.new ,配合ActiveRecord::Base.connection.tables,搞定所有表。

pynix 回复

数据量和应用性能有什么关系?换个语言就能解决吗?

pynix 回复

不懂别乱说,数据量和框架有毛关系!

与其重写成 Rails,不如花时间把现在的表结构弄清楚,接下来看能否分拆。

Peter 回复

是的,不能总想着推翻旧系统,哈哈。Rails 有许多应用的方式,我换个途径锻炼之。但仍然保留以后重写系统的想法,感谢指点。😀

judi0713 回复

嗯,对我来说很有参考和学习价值,感谢!

huacnlee 回复

最大的表也就在百万级别…

  1. 有老的 API 要向下兼容;
  2. 人力总是紧张的;
  3. 测试 case 要重新写,没有专门的团队;
  4. 信心是有,就怕太过理想,总体衡量下还是有点悬;
  5. 并非 24 小时不间断的系统。

再三思索了下,主要的业务系统不太好重写。倒是可以给原有系统增加一些功能分支,逐步引入 rails。也感谢您的指点 💪 👍 👍

jasl 回复

嗯,小步前进,逐步取代,受教了,感谢😀

RubyRay 关闭了讨论。 03月22日 16:32
RubyRay 重新开启了讨论。 03月22日 16:32
RubyRay 关闭了讨论。 03月23日 15:27
需要 登录 后方可回复, 如果你还没有账号请 注册新账号