【问题标题】:More tables or more databases?更多表还是更多数据库?
【发布时间】:2009-10-22 14:53:42
【问题描述】:

我正在设置一个系统来为我运行的网站的用户托管 WordPress 博客。目前,在一个数据库和不同的博客中运行的都很好,它们使用自己的前置表(user1_postsuser_posts 等)。

尽管到目前为止工作正常,但感觉有点混乱。如果这个数据库有 4000 个表,那会是个问题吗?将其拆分为 400 个数据库会更好吗? (或者我错过了一种更聪明的方法?)

谢谢!

【问题讨论】:

标签: sql mysql database-design data-modeling


【解决方案1】:

Wordpress Mu 是你所需要的

【讨论】:

    【解决方案2】:

    当你在列名、表名或数据库名中引入数字时,你很可能做错了什么。

    虽然这条规则有例外,但它们很少见。请注意。

    【讨论】:

    • fwiw,这正是 WordPress MU 所做的,我有机会搞砸它。它最终会创建 wp_1_posts、wp_2_posts 等。假设它正在运行 wordpress.com,所以在这种情况下它不会太糟糕。
    • 按照这个逻辑,Windows 是一个优秀的操作系统,因为每个人都在使用它! :-)
    【解决方案3】:

    将 customer_id 列添加到您的表中并垂直

    【讨论】:

      【解决方案4】:

      您所做的实际上是为他们提供一个单独的数据库,因为每个用户的数据将单独存在。我可能会建议将它们拆分到自己的数据库中。

      如果您有一个所有用户都在共享数据的表,那么问题就来了。这时您需要考虑是否要将他们的数据保存在一个地方或单独

      【讨论】:

        【解决方案5】:

        这取决于您使用的引擎。如果您使用的是 MyISAM,如果您的表数量超过 my.cnf 中设置的表缓存大小,性能将会非常糟糕。

        将表缓存设置为>表的总数是至关重要的,否则它将不得不不断打开和关闭表,这会炸毁键缓冲区中的索引缓存,这意味着不必要的 IO 堆。

        使用多个数据库或同一个数据库没有任何区别,MyISAM的表缓存具有安全作用。

        同样的事情可能发生在其他引擎上,但我认为效果不那么明显(例如 InnoDB 在关闭表时不会丢失其缓存,但它仍然不是免费的)

        【讨论】:

          【解决方案6】:

          根据表的大小和数据库软件 - 您可能需要考虑分区。

          如果表不大,并且不要求最终的安全性,那么有一个 customer_id 列就可以了。

          架构中的 4000 个表很大,它可能会也可能不会导致性能问题 - 取决于数据库。

          维护 400 个数据库可能会让人头疼。好好想想日常维护——备份、升级等,以及当你有 400 个数据库时你将如何做这些事情。我个人会避开这条路线。

          也许是一条中间道路?每 50 个客户一个数据库?

          【讨论】:

            【解决方案7】:

            4000 张桌子有点大。

            如果您打算将表拆分到不同的数据库中...您可以查看元数据库排列...一个元数据库位于所有不同的数据库中,其中包含不同数据库的连接详细信息...以及公共信息。 . 这样你应该能够轻松扩展.. 并使用现有的运行系统.. 你只需要一个包装在你的元数据库上来支持你正在运行的应用程序......

            我不确定这会有多大帮助!!!!

            【讨论】:

              猜你喜欢
              • 2011-07-15
              • 1970-01-01
              • 2010-10-16
              • 2012-12-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-04
              相关资源
              最近更新 更多