【问题标题】:How to scale mysql tables for growth如何扩展 mysql 表以实现增长
【发布时间】:2012-03-04 22:21:13
【问题描述】:

所以我正在开发一个网站,该网站将用大量流量替换旧网站,并且我还将在数据库中拥有大量数据,所以我向你们提出的问题是设计 mysql 的最佳方法是什么增长表?

我想拆分假设一个表,在 5 个表中包含 5 000 000 行,每个表有 1 000 000 行,并在表之间创建关系,但我想这不是一个好选择,因为我会花费大量的资源和时间来弄清楚我的数据在哪个表中。

或者你们能给我一些建议吗?

【问题讨论】:

标签: php mysql mysql-management


【解决方案1】:

不,你在人际关系上是绝对正确的。这种技术称为Normalization,您可以在其中定义单独的表,因为这些单独的表会受到时间的影响并且独立于其他表。

因此,如果您有一个跟踪房间和客人的酒店数据库,那么您就知道标准化是必要的,因为房间和客人彼此独立。

但您将在每个表中都有外键/代理键(例如 room_id),它们可以关联进入该特定房间的特定客人。

就您而言,规范化可以帮助您优化 5000 行,因为循环遍历 5000 多个元素并检索整个数据并不是最优的。

这是一个强有力的example,说明为什么规范化在数据库管理中至关重要。

【讨论】:

  • 那么当我必须查询数据库时我该怎么做?内部联接?例如:INNER JOIN table1,table2,table3,table4,table5....
  • 我想做一个内部连接不是那么聪明......因为它需要与一张大桌子相同的时间......但可能有一种方法,一些关键参考要知道您要查找的数据在哪个表中。
  • 你可以做一个简单的JOIN。例如,$query="SELECT room_number, room_guest FROM room JOIN guest ON room.room_id=guest.room_id WHERE booking_data='$date' "; 将通过加入roomguests 表来获取特定日期的房间预订详情。确保 room_id 是客人表中的外键。
【解决方案2】:

评论中提到的分区是一种方法,但检查的第一个路径甚至是确定是否可以根据一些内部数据将包含大量数据的表分解为可用的块。

例如,假设您有一个巨大的联系人表。您基本上可以将数据分解为从 a-d、e-j 等开始的联系人。然后,当您添加记录时,您只需确保将记录添加到正确的表中(我建议检查存储过程以处理此问题,以便在数据库中调节逻辑)。您还可能设置存储过程来从同一个表中获取数据。但是,通过这样做,您必须意识到使用自动递增 ID 将无法正常工作,因为如果不自己做一些工作,您将无法在所有表中维护唯一 ID。

这些当然是简单的解决方案。有大量针对大型数据集的解决方案,其中还包括查看其他存储解决方案、集群、分区等。自己手动执行其中一些操作可以让您对一些可能的“手动解决方案”有所了解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多