在DB服务器上存储大量表

时间:2012-06-15 18:23:29

标签: php mysql performance hosting mybb

的MySQL / PHP: 我有以下情况:我将在一台服务器上安装一个软件,大约70个表安装多次(很明显:它是一个MyBB论坛)。说,我将安装这500次(500个不同的论坛,让我们说,10个不同的主题和5种不同的语言,仅作为一个例子)。

我正在查看以下选项:

  1. 将所有论坛存储在一个架构中,并在每个论坛中更改其前缀。
  2. 将每个论坛存储在不同的架构中,相同的前缀。
  3. 只创建一组70个表,并附加" forumID"到每张桌子供选择。
  4. 创建多组70个表,为每个表附加一个forumID,并为~10-100个论坛使用一组表。
  5. 1& 2,我不必改变MyBB的大部分代码(易于维护),3& 4我必须编写某种搜索模式,用于每个查询以检测所有选定的表并附加WHERE子句(或者如果不存在则创建它)以考虑forumID(难以维护)。

    如果我通过My​​BB维护判断这一点,那么它就是前两个选项之一。但我还应该考虑一下:对于MySQL服务器来说,性能更高,速度更快?

    谢谢, 克里斯

    / edit:所有论坛都将使用相同的代码。我不想要维护500件不同的装置......

3 个答案:

答案 0 :(得分:1)

我只是复制架构pr。论坛。

参数:

  1. 这是一个易于自动化的过程,自动化它可能比重写所有SQL语句以使用“forumid”列更快。
  2. 此解决方案可让您轻松扩展到新硬件。扩展数据库始终是复杂且昂贵的(与扩展Web实例Web服务器相比)。
  3. 将每个论坛分开也可以让您将前5个论坛移动到单独的机器上。如果这是你赚钱的东西,你可以拥有“高级论坛”(每台服务器10个,x $ /月)和“Freemium论坛”(免费,但它们都在一台服务器上,没有性能保证)
  4. 如果您有500个不同的论坛,那么每个论坛的利用率会有很大差异。任何允许您为每个论坛使用不同表的解决方案都会导致数据库服务器上的缓存命中率更高,因为它能够更有效地缓存(并且缓存命中率是高的关键)数据库上的表现)

答案 1 :(得分:1)

我认为你应该忘记选项3和4,因为:

  • 性能

你的表会变大,它们的索引也会变大。较大的索引意味着较慢的插入。选择可能不会受到太大影响。

据我所知,所有缓冲区和缓存都是实例范围的,因此在这方面,所有选项都是等效的。

  • 管理

重构代码的麻烦,以及每次升级后重做工作的需要对我来说都是足够的(对我来说)放弃这个想法。此外,即使是升级程序也可能需要调整以适应您的自定义布局。

您可能希望单独备份和恢复论坛。然后你需要自己编写备份脚本,mysqldump在这种情况下无法帮助。每次添加新表时都会更新备份脚本(可能在升级期间发生)。

升级期间,数据库结构可能会发生变化。一次改变整个结构可能听起来骇人听闻。但是,您需要同时关闭所有500个论坛,并进行非常长的结构更改,而不是500个更小,更快的更改。

  • 可扩展性

(主要适用于选项4)如果需要,将一个单独的论坛数据库移动到另一个服务器似乎更加困难。

  • 安全

如果入侵者破坏了您的应用程序,我相信她可以更容​​易地访问所有论坛,但这只是一个疯狂的猜测。


选项1和2的表现同样出色,表是否在同一个数据库上只是语法问题。

我偏好选项2,因为在每个数据库的基础上更容易授予访问权限。

答案 2 :(得分:0)

我会选择替代3(在其他表上创建论坛表和forumID列)。

这样您就可以从应用程序创建新论坛,而无需管理不同的模式或表格。

在我看来,进行架构更改比在论坛表中创建新行要差一些。