2011-07-14 37 views
2

我建立一个非常大的网站目前它使用大约13表和它的完成时间应该是约20MySQL的许多表或几张表

,我想出了一个主意,更改首台使用ID,Key,Value而不是许多列,但是我最近以为我也可以在表格中存储其他数据。

将几乎所有东西都存储在一张表中是否高效/智能?

编辑:这是一些更多的信息。我正在建立一个社交网络,最终可能会有成千上万的用户。当网站启动时,MySQL集群将被使用,现在我正在使用开发VPS进行测试,但是在启动之前,所有内容都将被移至专用服务器。我几乎不知道任何关于NDB的东西,所以这应该是有趣的:)

+0

,因为你需要使用尽可能多的表,但没有更多的/使用尽可能少的表,你可以,但毫不逊色。 – Johan

+0

简短的回答 - 不,它将几乎所有的东西都存放在一张桌子里是非常糟糕的。 –

+0

认真,把一切在一个表中的KitchenSink是一个坏主意,阅读了关于标准化:http://en.wikipedia.org/wiki/Database_normalization – Johan

回答

0

授予我不知道太多关于大型数据库设计,但从我所看到的,即使是非常大的应用程序存储他们的东西是一个非常小的数额的表格(每桌20GB)。

对我来说,我宁愿在1个表中填写更多信息,因为这意味着数据并不是乱丢垃圾,而且我也不必在多个表上执行操作。虽然1台也意味着杂乱的(通常是对我来说,每个对象有它的上表,对象是你在你的应用程序逻辑有一些,如用户类,或博文类)我猜”

米试图说的是,做任何有意义的事情。不要在2个不同的表中把信息放在同一个东西上,也不要把2个东西的信息放在1个表中。用1张表只描述某个对象(这是很难解释的,但如果你做的是面向对象的,你应该明白。)

0

nope。喜好应该原样保存它们,是(在用户表) 例如私人信息不能被存储在用户表...

你不必去想加入不同的表...

+0

我应该存储在另一个配置文件/在一个表中的喜好,然后朋友。消息已存储在不同的表中。确切地说, – user683812

+0

! :) ..... – genesis

+0

这就是我想到的,除了朋友。另外还有一个friend_requests表。至于消息,有两个表格用于发布帖子,另一个用于参与者(因为可以有多个)。 – user683812

1

这个模型称为EAV(实体属性值)

它是某些情况下可使用的,但是,它的效率较低,由于较大的记录,或较大数目的联接和不可能上创建多个属性复合索引。

基本上,当实体有很多属性,这是极其稀少(很少填写)它的使用和/或不能在设计时预测,如用户标签,自定义字段等

+0

EAV的主要缺点是无法轻松实施数据域(例如,确保'autorized_ip_address'是一个有效的IP地址,'percentage'介于0和100之间或'birthday'是日期)。然而,MySQL并没有检查限制...... –

+0

EAV的主要缺点是它有大约3251的缺点。 – Quassnoi

0

我想先说20表格不是很多。

一般来说(很难从你提供的有限信息来看),键值模型并不像速度方面那样有效,尽管它可以更有效的空间智能。

+0

我的应用程序目前有... <运行快速检查> 169表,并且肯定会有更多。当然,这不是一个网站,而是一个CRM,但仍然有20个表并不是那么多。 – Mchl

+0

该网站是一个社交网络。我不确定它会走多远,但我们可能会拥有数千个帐户。尽管我们将拥有MySQL集群,但我不知道如何处理性能。我从来没有解决过这么大的问题。 – user683812

+0

@ user683812也许MySQL(或一般的关系数据库)并不完全是你所需要的?看看像MongoDB这样的文档数据库。 – Mchl

0

我绝对不会这样做。基本上,如果你在单个表中存储了大量数据,那么当不断查询同一个表时,你会看到性能问题非常快。然后考虑一下你需要的查询的连接和复杂性(取决于你的网站)......不是我个人喜欢的任务。

通过使用多个表将数据拆分成更小的数据集,查询所需的资源更少,作为额外的奖励,它更易于编程!

有这样做的一些应用程序,但他们是罕见的,或多或少,如果你有一吨列的大表,最是不会有一个值。

我希望这可以帮助:-)

+0

这么多表吗?有一个大型的喜好,另一个大的朋友,另一个大概的信息。所有应该保持分离的权利?数据使用PHP链接。 – user683812

+0

使用所需的表,而数据库通常来说最好的做法是“群”类似组数据,你的表可能是USER_INFO,消息,user_config,site_config,activity_log所有这些数据都与在其他类似的数据分组性质。例如,您可以在mySQL中使用JOIN,以便通过消息数据获取正确的user_info,然后可以使用PHP或JS等操作数据。你会注意到一个名为activity_log的表,这是一个很好的使用id,key和value的例子,因为你可以记录1000种类型的动作并且不需要1,001个字段 – Ryan

+0

对不起,直接回答你的问题 - 是的,保留这些分开:-) – Ryan

0

我认为项目中的20个表不是很多。我确实看到你对使用EAV的观点和兴趣,但我认为这不是必需的。我会坚持到表中3NF适当的FK关系等,你应该确定:)

0

简单的答案是,20桌不会让它大数据库和MySQL不会需要任何优化。所以请重点关注干净的数据库结构和规范化。