更好的拥有更多数据库或更多表?

时间:2014-12-19 14:50:48

标签: mysql database-design

有个问题。

在我的问题之前,我想添加像db-optimization这样的标签,但标签不存在。

我实际上有我的数据库有很多表,我正在编写一个关于企业解决方案的程序,我有一个" alpha"程序员可以看到的系统," beta"程序员和一些用户和生产系统看到的系统。

现在,我有很多表(不是全部)像那样:

  • Table_beta
  • Table_alpha

我知道我可以将所有beta和alpha表放在他们自己的数据库中(我可以创建我需要的数据库),并改变所有需要的关系。

我已经知道单个表大小的mysql db限制,最终知道数据库文件本身(如果没有拆分)。 我也知道将它们分开可以帮助我们进行一些操作。

你怎么看?哪种解决方案更好?实际的一个或db分隔一个?

至于一些参考,该应用程序是一个网络游戏,将存储让我们说游戏系统从120MB到200MB,每个玩家最低约5MB。

提前感谢您的回复。

2 个答案:

答案 0 :(得分:2)

评论太长了。

如果您计算的是兆字节,那么您就不会接近现代系统或数据库的限制。这些与您的解决方案无关。

您应该将应用程序封装在一个面向生产系统的数据库中。然后,您应该拥有此数据库的副本,以进行开发,测试,性能调整和其他应用程序。您不应该混合来自其他系统中的在线应用程序的数据 - 除非您有意使用复制机制或其他有意系统复制它。

答案 1 :(得分:0)

我很难想象将测试表放入生产系统的优势。

然后在你的代码中,当你打开一张桌子时,你必须说

if environment = "alpha" then
  table="foobar_alpha"
elseif environment = "beta" then
  table="foobar_beta"
else
  table=foobar"
endif

或稍好一点

table="foobar" & environment

(我用VB作为例子。如果是另一种语言则差别很小。)

或者更糟糕的是,你有一些更复杂的东西。

这似乎只是打开了程序错误的可能性,导致将测试数据写入生产表,只是因为在指定表名的数百或数千个地方之一,有人忘记编写代码以获得正确的表名。

这也意味着您的所有查询都必须被组装成#34;表格名称即时填写,而不是只有一个静态查询字符串。如果使用存储过程,则必须拥有存储过程的多个副本。

更令人恐怖的是,无论何时更新表定义,都必须进行3次更新。如果你犯了一个错误并且它不完全相同,你会发现在测试中起作用的代码在你去生产时并不起作用。

这似乎造成了很多问题,我只是没有看到任何好处。

所以不,创建一个只有生产所需表格的生产数据库。然后复制此数据库以用于开发和测试。