Ruby 请教一下至少千万级别数据库的选择方案

xiaoxiao · 2017年08月02日 · 最后由 xiaoronglv 回复于 2017年08月08日 · 8797 次阅读

由于预估项目未来需要存储的容量可能达到千万级别,数据库初步选择为 mongodb,在数据库表设计方面,内部形成了两种意见,一种就是使用单表存储的方式,把所有的用户的行为记录存储到一张 collection 表里,这样以后这张表可能会很大,但是开发难度低,另一种是根据用户 id 将用户记录存储到各自的 collection 中,这样的好处很明显,在插入数据的时候人为的降低了每个 collection 表的数量,例如一千万条记录分别是属于 10 个用户的,分给 10 个 collection,每个 collection 平均分配到一百万条记录,但是缺点显而易见,开发难度大,我看了下 mongoid 这个 gem,没有对 collection 动态创建的操作,每个 model 固定对应一个 collection,按照第二种设计方案,每创建一个用户就需要动态创建一个 collection,这个感觉在 rails 比较难吧。

tips
现在rubychina的数据库由mongodb转为postgresql请问下各位postgresql是否适合这个级别量的数据存储与mongodb的优缺点是什么未来的业务就是插入和检索请教一下有大数据方面经验的专家不吝赐教

单表就行了呗,PG 单核亿级别数据无压力。

  1. Ruby China 到不了那个量,顶多到几百万(例如通知表目前 100 多万条),所以不会考虑这种设计
  2. 按 user_id 来分表太细,常见的是 user_id % N (N 是看业务情况),你分太多问题很大的,调整结构,增加索引,都会有问题
  3. 不是什么都能拆的,拆会带来很多副作用,例如无法跨表查询(得配合其他工具辅助,比较复杂)
  4. 分表以后,自增 id 不能依靠表提供的功能,需要自己实现

我们之前做个一次类似的事情,但背后分表是有公司的辅助工具来处理分表的事情,我们只是设计规则,查询方式不表,但其实也非常的麻烦,有很多的限制。

千万级别的数据库只要用好索引,什么关系数据库都行

mysql 和 pg 对千万级记录 都没什么问题

用 mongodb 就是给自己找不自在

这几天项目突破 1 千万用户了。PG 处理起来非常得轻松,5k 的 RPM。平均数据库相应时间 10ms 左右。

千万级别约等于 50M,一条数据 1KB 也就 50GB。

谢谢各位的集思广益

个人感觉选择一个关系型数据库 MySQL 等,索引建的 ok,代码写的 ok,千万级别还是不成问题的。我原来的项目 event 表亿级别的索引合适,代码写的效率 ok,运行的很好的。

我原来项目的 customer 表几千万,效率真的不是问题。当然如果进行复杂的分析,还是后面接一个 olap,我们当时用的 redshift。

单表就行了,现在千万不算大表,做好索引就问题不大

mongo 不如 pg,pg 性能已经超过 mongo 了,可自行做评测,千万并不大 ruby 的话,用 vert.x 提升性能,狂飙,足够你用了

儲存量不是問題 關鍵是寫入的速度

mongodb 要非常小心,速度太快時表有毁掉的危險,至今無解。 pg 寫入速度不如 mongo,但善用 sharding 或者 clustering 還是能滿足大多數場景。

千万级别你慌什么。。

ruby 社区总是能给人惊喜😀

我们是 10 Billion 级别了,MySQL 暂时没什么不好的地方。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号