1

我正在重新设计一个在特定表中有 100,000 条记录的应用程序(目前为 250,000 并且还在增长)。

该表包含网站和域的信息。

为了速度和资源,我应该在原始表中包含有关任一实体所需的所有数据,还是应该使用两个查找表来存储未共享的信息 - 例如一个存储所有域特定信息的查找表和一个哪个存储所有站点特定信息?

谢谢

4

2 回答 2

1

理想情况下,您应该将它们拆分为 2 个不同的表,因为单个域将对应于多个站点,如果我们采用将域和站点的元数据存储在单个表中的设计,在这种情况下需要在站点元数据的每条记录中为域存储的冗余信息。相反,如果我们有 2 个单独的表,其中域表每个域有一条记录,并且站点列表作为记录中的字段之一,并且站点表中的域名列来确定给定站点的域,它将确保有组织的存储和没有数据冗余。这是传统 RDBMS 系统的主要原则,这就是为什么我们有多个表的概念。

此外,如果您想真正扩展您的数据库,您可以考虑使用 NOSQL 数据存储,正如您所说的数据在不断增加。Apache HBase可能是一个很好的解决方案,它具有将相关信息分组在一起的概念。

编辑:

澄清问题:

Just to be clear, domain and sites are not linked. They're just different entities like a domain with no traffic or revenue would be classed as a domain and have domain related data stored for it like number of hyphens or registrar while a domain with a Wordpress install for example and exisitng traffic would be classed as a site - not a domain - and have site specific information stored. Would this change your answer?

在它们不相互关联的情况下,我认为将数据拆分为多个表不会有任何帮助,除非您要使用分布式 RDBMS 系统。在单节点托管数据库的情况下,行无论如何都由站点/域 id 索引,并且单个表中的大量行不会降低性能,但是如果您正在查看庞大的数据大小并希望将其划分到集群中的多个节点上,然后为它们提供独立的表将有助于使每个表都托管在各个节点上,并且数据库能够水平扩展。这是我在这种情况下看到的唯一好处。

于 2012-10-28T13:27:27.853 回答
0

应用程序的性能很大程度上取决于应用程序使用的查询类型。将所有数据存储在一个表中不一定会降低性能,但很可能会提高性能。如果您的表保存了 XY 先生拥有 example.com 数千次的信息,那么您当然会浪费磁盘空间。

规范化您的数据库(拆分您的数据)可能会有所帮助,但您必须知道您想对数据做什么才能回答这个问题。

于 2012-10-28T13:27:08.663 回答