更多表格或更多数据库?

时间:2009-10-22 01:28:11

标签: sql mysql database-design data-modeling

我正在为我运行的网站的用户设置一个系统来托管WordPress博客。现在,事情在一个数据库中运行良好,并且不同的博客使用自己的前置表(user1_postsuser_posts等)运行。

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

谢谢!

7 个答案:

答案 0 :(得分:6)

你需要

Wordpress Mu

答案 1 :(得分:3)

当您在列名,表名或数据库名称中引入数字时,您很可能做错了。

虽然此规则有例外,但它们罕见。请注意。

答案 2 :(得分:2)

在表格中添加customer_id列并进行垂直

答案 3 :(得分:1)

您正在做的主要是为他们提供一个单独的数据库,因为每个用户的数据将独立存在。我可能会建议将它们分成自己的数据库。

如果你有一张表,所有用户都在共享他们的数据,那么它变得棘手。那时您需要考虑是否要将数据保存在一个地方或单独

答案 4 :(得分:1)

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

将表格缓存设置为>表的总数是至关重要的,否则它将不得不保持打开和关闭表,这会破坏密钥缓冲区中的索引缓存,这意味着大量不必要的IO。

如果您使用多个数据库或相同的数据库没有任何区别,MyISAM的表缓存具有安全的效果。

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

答案 5 :(得分:0)

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

如果表格不大,并且不要求最终安全性,那么拥有customer_id列将会有效。

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

保持400个数据库可能会成为一个大问题。仔细考虑日常维护 - 备份,升级等,以及在拥有400个数据库时如何执行这些操作。我个人会避开这条路。

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

答案 6 :(得分:0)

4000张桌子有点大。

如果您计划将表拆分到不同的数据库中......您可以查看Meta数据库的安排。一个Meta DB位于包含不同数据库的连接详细信息的所有不同数据库中......以及常见信息。这样你就可以轻松扩展..并且使用现有的运行系统..你只需要一个Meta DB上的包装器就可以支持你正在运行的应用......

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