【问题标题】:Better having more db or more table?更好地拥有更多的数据库或更多的表?
【发布时间】:2014-12-19 14:50:47
【问题描述】:

有一个问题。

在我提出问题之前,我想为标签添加类似 db-optimization 但标签不存在的东西。

实际上,我的数据库中有很多表,我正在编写一个程序,对企业解决方案做一些事情,我有一个程序员可以看到的“alpha”系统,一个程序员可以看到的“beta”系统,还有一些用户和生产系统。

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

  • Table_beta
  • Table_alpha

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

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

你怎么看?哪种解决方案更好?实际一个还是分贝分开一个?

作为参考,该应用程序是一款网络游戏,游戏系统将存储 120MB 到 200MB 的空间,每个玩家的最低存储空间接近 5MB。

提前感谢您的回复。

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    如果您以兆字节为单位计算,那么您离现代系统或数据库的限制还差得很远。这些与您的解决方案无关。

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

    【讨论】:

    • 我不使用复制系统,我允许在 alpha 系统上编辑创建一个编辑行,之后该行进入 beta 版本,在批准(和测试)后它将返回到生产系统。每个系统都有它的配置,只有在系统处于“维护”状态时才会进行数据库自动操作
    • 这只是为了没有重复的系统并尽可能使用较少的资源,我在创建它之前尝试过这样想。
    【解决方案2】:

    我很难想象将测试表放入生产系统有什么好处。

    那么在你的代码中,当你打开一个表时,你一定是在说

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

    或者好一点

    table="foobar" & environment
    

    (我以VB为例。如果是另一种语言,差别不大。)

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

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

    这也意味着您的所有查询都必须通过动态填写的表名“组装”起来,而不仅仅是静态查询字符串。如果您使用存储过程,则必须拥有多个存储过程副本。

    更可怕的是,每次更新表定义时,都必须更新 3 次。如果你犯了一个错误并且它不完全一样,你可能会发现在测试中有效的代码在你投入生产时不起作用。

    这似乎造成了很多问题,我只是看不到任何优势。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多