1

在我的 Rails 应用程序中,我有几个处理资产(附件、图片、徽标等)的模型。我正在使用 attachment_fu ,到目前为止,我有 3 个不同的表用于将信息存储在我的 MySQL 数据库中。

我想知道如果我使用 STI 并将所有信息仅放在一个表中,使用类型列并具有不同的继承类,它是否会对性能产生影响。它会更 DRY 并且更容易维护,因为它们都共享许多属性和特征。

但更快的是什么?很多表,每张表的行数少,还是只有一张表多行?还是根本没有区别?我必须每秒处理大量信息和许多查询。

感谢您的意见!

4

3 回答 3

6

许多表和更少的行可能更快。

不过,这不是您应该这样做的原因:您的数据库应该为您的问题域建模。一张表是许多实体类型的糟糕模型。因此,您最终将编写大量代码来查找该表的子集,该子集代表您当前关注的实体类型。

常规的、可接受的、干净的数据库和前端客户端代码将无法正常工作,因为您的一张表就是所有东西,而根本没有东西。

它更慢,更脆弱,会在你的应用程序中增加你的代码,并制作一个糟糕的模型。

当所有事物在您的问题域中具有完全相同的属性相同(或可能是 Liskov 可替代的)语义时,才这样做。

否则,甚至不要尝试这样做。

或者,如果您这样做,请问为什么这比使用一个大的 Map/哈希表/关联数组来保存您的应用程序中的所有实体(以及许多功能,其中大多数是重复的、剪切和粘贴的、过时的)更好switch案例或 RTTI 来确定每个实体的真实类型)。

于 2009-04-28T09:38:44.147 回答
2

唯一确定的方法是尝试这两种方法并衡量性能。

一般而言,这取决于您是否在这些表之间进行连接,如果是,那么这些表的索引方式。一般来说,数据库连接很昂贵,这就是为什么有时会非规范化数据库模式以提高性能的原因。在您处理大量数据(即数百万条记录)之前,通常不会发生这种情况。你可能还没有这个问题,也许永远不会。

于 2009-04-28T09:37:33.260 回答
0

如果行具有相同的属性,那么,是的,一个表非常好,只有一行来指定数据类型,否则,使用不同的表来处理,这样在性能、代码量甚至代码的易读性上都会更好。

于 2011-03-16T15:25:21.433 回答