2012-10-28 46 views
1

我正在重新设计一个具有特定表(当前为250K并且正在增长)中具有100,000个记录的应用程序。MySQL数据库 - 将数据存储在一个表中或使用查找

该表格包含网站和域的信息。为了提高速度和资源,我应该在原始表中包含任何实体所需的所有数据,还是应该使用两个查找表来存储未共享的信息 - 例如,一个查找表可存储所有域具体的信息和一个存储所有网站的具体信息?

谢谢

+0

要明确,一个域名和网站没有链接 - 它们是两个独立的实体。虽然一个网站在技术上具有“域名”,但为了我在这里所做的目的,如果它拥有流量和收入以及除持有页面之外的某种视觉存在,则该网站归类为网站。一个域只是域而不是别的。使用存储汽车和货车信息的例子可能更容易,它们都是车辆,但属性略有不同,我需要存储信息。 – thatguy

回答

1

理想情况下,您应该将它们拆分为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进行索引,并且单个表中的大量行不会降低性能,但是如果您正在查看大量的数据并希望将其划分到群集中的多个节点上,然后为它们提供独立的表格将有所帮助,这样每个表就可以托管在单独的节点上,并且数据库可以水平扩展。这是我在这种情况下看到的唯一好处。

+0

感谢您的建议。只是要清楚,域和网站没有关联。他们只是不同的实体,如没有流量或收入的域名将被归类为域名,并为其存储与域名相关的数据,如连字符或注册商的数量,而具有Wordpress安装域名和存在流量的域名将被归类为一个网站 - 而不是一个域 - 并且存储了特定于网站的信息。这会改变你的答案吗? – thatguy

+0

@thatguy - 哦!那样的话,我误解了你的问题。我按照您的说明编辑答案,它位于编辑标题下。 –

+0

只是我以后的建议 - 再次感谢。 – thatguy

0

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

正常化你的数据库(分割你的数据)可能会有所帮助,但你需要知道你想用数据来做什么来回答这个问题。

相关问题