gpt4 book ai didi

mysql - 如果mysql中的表已经分片了,还需要分区吗?

转载 作者:行者123 更新时间:2023-11-29 10:11:31 25 4
gpt4 key购买 nike

背景:MySQL 5.7,InnoDB 引擎

我们有一个巨大的事务日志表(每天 600 万新行),我们希望将这个巨大的表分片为多个 mysql 实例和表(因此我们有 table_001、table_002 等)。用户经常查询他们最近的行,这意味着最近的行是热的,而旧的行是冷的。

我想知道在这种情况下每个分片表(table_001、table_002等)是否仍然需要mysql分区。我的意见是否定的。如果我们已经将数据分片成很多子表,为什么还需要另一种使用分区的子表呢? (分区实际上是内部单独的表,对吗?)

最佳答案

拆分表格有 4 种方法:

  • “分片”——多台服务器中每台服务器上的一些行。这对于“写入缩放”很有用。 (似乎不适用于您。)
  • “分区”——一种构建子表的特殊语法,但引用它就好像它是单个表。通过这种方式提高性能的情况很少。我们需要了解您的疑问才能进一步讨论此问题。
  • 手动将表拆分为table_001等 - 此论坛上一次又一次地建议这样做。它总是被认为是一个坏主意而被否决。
  • “复制”——通过让多个从机悬卡在一个主机上,您可以获得“读取扩展”。这将允许同时进行更多查询。 (我认为这不是适合您的“正确”解决方案。)在复制中,您必须写入一个位置,并且您会获得许多相同的数据副本。

您会删除“旧”数据吗?如果是这样,PARTITION BY RANGE(TO_DAYS(..)) 会使清除更加高效。但它并不一定会提高 SELECT 性能;让我们看看您的SELECT

您会像数据仓库“报告”一样“汇总”数据吗?如果是这样,我们可以进一步讨论。

回复:插入率

使用 InnoDB,单个大表本质上与多个小表或多个分区一样容易INSERT。 200并不是一个很大的插入率。

  • 您是否“批量”插入内容?即,INSERT ... VALUES (...), (...), ...;?或者使用加载数据?其中任何一个都可能维持超过 1000/秒。
  • 您有很多INDEX吗?它们对高插入率有些负担。让我们看看SHOW CREATE TABLE,以便进一步讨论。
  • 您是否有多个线程执行INSERT
  • 要获得真正高的插入率,请参阅 this .
  • SSD 可以实现更高的插入率。

关于mysql - 如果mysql中的表已经分片了,还需要分区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com