需要的设计意见:用户的模板数据库/表

时间:2012-01-11 20:22:23

标签: mysql database-design multiple-databases

我需要专业的程序员/ DBA来反省我的想法,并知道它是否会/甚至可以工作。请阅读下面的内容并告诉我任何可能破坏这一理论的信息。感谢。


网站创意概述:
该网站将由体育卡收藏家用于聊天,在论坛上回答问题,展示他们的卡片/盒子休息,与其他用户进行交易/销售,以及保存他们的卡片。

设计问题:
用户可以拥有无​​限数量的卡。这可能会产生一些非常大的表格。

设计问题:
我不想限制用户在他们的网站集合中可以拥有多少张卡。如果他们有一张卡的5份副本,而宁愿有5张记录,每张卡一张,那么这就是他们的特权。这也可能是必要的,因为每张卡可能处于不同的状态。但是,通过允许这种情况发生,这意味着只有一个表来存储所有用户的所有记录甚至不是一个选项。我知道有超过1,000,000张牌的运动卡收藏家。

我在想通过为每个用户创建一个表或一个数据库,它可以实现更快的查询。所有数据库都在同一台服务器上(我不知道我的主机是谁,目前只在设计阶段)。将有一个主数据库,其中包含每个人都需要的数据(基本项目,而用户表/数据库将具有对基本项目的引用)。我确实看到一个字段可能是来自另一个数据库的外键,所以我知道我在这方面的想法是可能的,但总的来说我不确定最好的想法是什么。

我看到大多数主持人都说“无限数量的数据库”,这让我想到了每个用户的数据库。我可以使用这个用户帖子在线程,他们的收藏项目,他们的偏好和其他信息。此外,通过让每个用户拥有不同的表/数据库,如果某人的表因任何原因需要重新编制索引,则不会影响其他用户。

然而,我对这两种方式的最大关注是对表/数据库结构的添加/删除。我很确定可以编写脚本来进行必要的更改,但这似乎是一个非常高的风险。例如,我很确定我可以编写一个脚本来将字段添加到每个数据库中的特定表或所有类似的表中,但是为了验证它们可能会很困难。


您可以为我提出的任何想法将不胜感激。我一直在尝试在这个网站上工作超过一年,并且因为我担心桌面太大,响应时间慢,以及如果用户数量增加,打破了一些约束,我一直在数据库设计上工作。 phpMyAdmin的/ MySQL的。我也不想在数据库构建中途走一半,然后认为有更好的方法。我知道可能有多种方法可以做到这一点,但最常见的做法是什么?非常感谢你们。

3 个答案:

答案 0 :(得分:2)

我在想通过为每个用户创建一个表或一个数据库,它可以实现更快的查询。

那是假的。单个数据库会更快。

除非你有1,000,000名用户,否则每个用户1,000,000张卡的数量并不是很大。

多个数据库是一个管理噩梦。始终首选单个数据库。


  

我担心表太大,响应时间慢,如果用户数增加,打破phpmyadmin / MySQL设置的一些约束

你很难超越MySQL限制。

响应速度慢是应用程序的一部分,SQL查询的详细信息比其他任何内容都要多。

最后。最重要的。

所有技术都已过时。最终,您必须替换某些内容。为了达到你被迫升级的程度,你必须先运行一些东西。

在您拥有数十亿行数之前,不要担心“大型数据库”。

不要担心“长期”解决方案,因为所有软件技术都会过期。很快。


关于用户数量。

大部分网络互动都是通过JavaScript与浏览器互动的时间。或者阅读页面。点击实际上很少见。在一个相当大的服务器上的MySQL应该使用亚秒级响应处理30个或更多几乎并发的查询。您的应用程序可能只需要很少的时间来格式化并开始发送HTML页面。事情可以在典型的服务器上以非常非常好的剪辑撕裂。

如果您的数据库设计避免了可怕的全表扫描。

您必须拥有适用于最常见查询的正确索引。

现在。 30个几乎并发请求的几率是多少?如果用户每10秒点击一次(他们必须阅读页面,填写表格,重新阅读页面,思考,喝他们的啤酒)那么一秒钟内30次点击的几率意味着您必须拥有300 并发用户。考虑到人们在生活中还有其他事情可做,这意味着你必须有大约50,000名用户(认为他们每周在你的网站上花费1小时。)

答案 1 :(得分:1)

我不会为每个用户创建一个数据库......这会给你带来无数的麻烦:数据完整性问题,参照完整性问题,管理问题......

只要您的表格规范化并编制索引,我就不会认为包含数亿行的表格过大。

相反,我只是从简单的表格设计开始。如果您的网站取得了巨大的成功,那么在未来的MySql中实施partitioningsharding将不会有任何额外的努力,而不是直接扩展。

答案 2 :(得分:1)

如果我穿着你的鞋子,我会从一个数据库和一张桌子开始,而不用担心桌子可能的大小。如果您取得如此成功并达到您想象的规模,您可能会拥有更多的域名资源和知识,从而做出更明智的决策。一旦发生这种情况,您还可以考虑noSql解决方案,例如HBaseMondgodb和其他允许水平扩展(无限大小)的解决方案,但有一些限制,处理大数据的企业必然会面临。您还可以使用mysql partitions或其他分片解决方案。所以,用一张桌子来构建你的产品,除非你绝对需要,否则不要解决这个问题。祝你好运!