1

我正处于项目的一个阶段,出于性能原因,我正在考虑迁移到 NoSQL。我肯定会有数百万行的表,所以 NoSQL 可能很有用。但我的问题是我也在用这些数据做很多计算,我不知道如果 rails 仍然需要做所有的计算,这是否会给我带来更多的性能。

这是我的另一个问题,我在其中描述了我需要什么数据以及如何处理它。

在我意识到我的大部分代码都是用 SQL 编写并将一个用户与 1000 个其他用户匹配之后,它仍然需要

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

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

我还考虑过将计算出的匹配百分比存储在数据库中,但这将导致仅 50k 用户就有 25 亿行。

4

3 回答 3

3

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

于 2012-10-19T10:08:20.447 回答
3

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

我想说的另一点是,从 SQLite 迁移到 NoSQL 可能是一大步。一个较小的步骤可能是切换到已经可以提高性能的 MySQL。更好的是 PostgreSQL,在我看来,它是目前最好的 SQL DB。

于 2012-10-19T10:15:56.293 回答
0

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

NoSql 并不总是比非规范化、一张表查询快...

在决定切换数据库之前,测试两种替代方案的确切情况......

于 2012-10-20T17:54:19.663 回答