Rails3:我应该切换到NoSQL吗?很多计算,很多数据用于用户匹配

时间:2012-10-19 09:27:07

标签: ruby-on-rails database performance nosql

我正处于我项目的一个阶段,我正在考虑因为性能原因而转向NoSQL。我肯定会有数百万行的表,所以NoSQL可能会有用。但我的问题是我也在使用这些数据进行大量计算,如果rails仍需要进行所有计算,我不知道是否会给我更多的性能。

我的Here's another question我描述了我需要的数据以及我如何处理它。

在我用SQL实现了大部分代码并将一个用户与其他1000个用户匹配之后,它仍然需要

Completed 200 OK in 104871ms (Views: 2146.0ms | ActiveRecord: 93780.5ms)
(on my local machine with sqlite)

这对我来说是不可接受的。 我肯定能够将我的表格非规范化为一个这样的工作。但这会给我带来性能提升吗?

我还考虑过将计算出的匹配百分比存储在数据库中,但这样只会为5万用户带来25亿行。

3 个答案:

答案 0 :(得分:3)

非规范化肯定会提升性能。为查询中选择的列添加索引。查询id而不是字符串,并在内存中有映射(字符串到id)。非规范化提升了性能,因为您不会与其他表连接。

答案 1 :(得分:3)

正如Saravanakumar所提到的,对计算数据进行非规范化可以肯定会提高性能,我建议将其用于繁重的计算。在连接表时,添加索引绝对是必须的。 另一种选择是使用SQL视图,这可以提高依赖于连接的查询的性能。 (看看:https://github.com/ryanlitalien/rails_sql_views

我要说的另一点是,从SQLite迁移到NoSQL可能是一个巨大的进步。一个较小的步骤可能是切换到MySQL,这将提高性能。更好的是PostgreSQL,在我看来,这是目前最好的SQL数据库。

答案 2 :(得分:0)

如果我是你,我会使用mysql和postgresql并尝试更好地反规范表...

NoSql并不总是比非规范化更快,一个表查询......

在决定使用两种替代方案切换db测试的确切情况之前......