errorbucket / error-bucket

One Bucket to rule them all
6 stars 0 forks source link

Migration to RethinkDB #49

Closed codinfox closed 9 years ago

codinfox commented 9 years ago

Work in progress

!!! DO NOT MERGE !!!

将数据库迁移到RethinkDB

closes #38

codinfox commented 9 years ago

研究这个数据库快一个周了,逐渐发现了一些问题:

  1. 这个数据库的性能很难说究竟是不是好。这个数据库的一个特点是分布式数据库,基本上所有的操作都是map-reduce,我们如果在单一服务器上面使用我在想是不是发挥不出它的性能优势。在测试的数据集(15K documents)上面进行了一个我们项目当中需要多次进行的一个聚合查询,用时4.5s,感觉并不十分惊艳。至于原有的nedb的话,通过网络传输数据的时间推算大概需要16s,我不能肯定是什么原因,因为我们的服务器现在内存占用率有点太高了,可能会影响性能。
  2. 这个数据库主推的changefeed的功能目前我也没有发现特殊的优势。起初我以为它可以对所有的查询语句结果的变化发送通知,但事实上并不是。我们真正需要的是当聚合结果发生变化的时候发送通知(用来辅助实现在分页的情况下页面内容的实时更新),但是这个功能并不被支持,之前对rethinkdb的这个feature的理解有点偏差。而且到目前为止我依然没能够很好的理解它的changefeed,因为在我们的使用情景和rethinkdb描述的很多额其他的使用情景当中,这个变化我们可以手动捕获到,比如在当前项目当中就是采用的当数据库插入操作时通过websocket发送事件,这就相当于在rethinkdb当中对表的修改进行监听。
  3. rethinkdb不支持TTL

我现在搞不清楚是不是因为我对这个数据库理解还有问题。我现在在考虑如果我们的项目没法利用到rethinkdb的长项,是不是还有继续迁移的必要。

MongoDB按照上面的说法来看的话,起码比RethinkDB的优势在于TTL,其他的面临和Rethink差不多的问题。RethinkDB提供的查询功能基本上和Mongo没什么太大差别。

纠结啊 @amio

codinfox commented 9 years ago

不过我们需要的这些feature都已经在rethink的开发计划之内了:

https://github.com/rethinkdb/rethinkdb/issues/1118 https://github.com/rethinkdb/rethinkdb/issues/746

我在想我们是继续迁移到RethinkDB期待它日后支持这些功能之后再重构呢,还是先迁移到Mongo之类的比较成熟的数据库,等到Rethink成熟之后再迁移?

amio commented 9 years ago

OK,你的感受可以跟贱贱沟通下,看看有没有帮助,公司内有使用经验这是最好的资源了。 如果你已经比较明确倾向用 Mongo 的话,就改方向吧 RethinkDB我也没有深入了解,所以只能提供一些建议,一线实施的人最有发言权。

codinfox commented 9 years ago

OK 我先去跟他沟通下吧。根据现在的情况看这个数据库没给我有特别有优势的感觉

codinfox commented 9 years ago

没什么特别的优势,还是选择使用mongo,因为mongodb支持ttl,而rethinkdb我们需要的其他的包括changefeed在内的feature都可以使用在添加文档时用websocket广播来实现。