【问题标题】:Database servers, partitions and instances数据库服务器、分区和实例
【发布时间】:2020-07-13 16:07:05
【问题描述】:

在 MySQL(和 PostgreSQL)中,究竟是什么构成了数据库实例和数据库分区?

例如,不同的数据库分区是否需要存在于不同的数据库实例上?或者单个数据库实例可以管理多个分区吗?如果是后者,称其为“分区”有什么意义?在这种情况下,DB 会知道吗?

以下是在线课程中描述系统设计的文档中的引述:

我们如何规划系统的未来发展?

我们可以拥有大量的逻辑分区来适应未来的数据增长,这样一开始,多个逻辑分区驻留在一个物理数据库服务器上。由于每个数据库服务器可以有多个数据库实例,我们可以在任何服务器上为每个逻辑分区拥有单独的数据库。所以每当我们觉得某个特定的数据库服务器有很多数据时,我们可以将一些逻辑分区从它迁移到另一台服务器上。我们可以维护一个配置文件(或单独的数据库),将我们的逻辑分区映射到数据库服务器;这将使我们能够轻松地移动分区。每当我们想移动一个分区时,我们只需要更新配置文件来宣布改变。

【问题讨论】:

  • 具体-哪个数据库系统?我认为该文本是在谈论分片,而不是分区。
  • @LaurenzAlbe 我主要对 MySQL 感兴趣,但将它留给 PostgreSQL,因为听起来这些概念可能相对普遍
  • 你能提供引用材料的链接吗?我猜这不是来自 mysql 或 postgresql 的官方文档。
  • Sharding 涉及多个实例。在 MySQL 中,Partitioning 应该仅限于单个实例。查看我的答案。

标签: mysql postgresql partitioning sharding


【解决方案1】:

这些术语容易混淆、误用和定义不一致。

对于 MySQL:

一个数据库有多个定义:

  • “模式”(其他供应商/标准使用)。这是表格的集合。一个实例中有一个或多个“数据库。
  • 实例。您应该使用“服务器”或“数据库服务器”更清楚。
  • 数据。 “数据集”可能是一个更好的术语。

实例指的是在某台机器上运行的mysqld 的副本。

  • 您可以在一个硬件上拥有多个实例。 (罕见)
  • 您可以在单个硬件上拥有多个实例,这些实例位于不同的 VM 或 Docker 中。 (便于测试)
  • 通常“实例”是指一台服务器上带有一份 MySQL 副本。 (适用于大规模情况)

PARTITION 是布置table(在database 中)的特定方式。

  • 可见于CREATE TABLE (...) PARTITION BY ...
  • 它是数据的“水平”拆分,通常按日期,但也可以按其他“列”。
  • 它对性能没有直接影响,因此很少有用。

分片在 MySQL 中没有实现,但可以在 MySQL 之上完成。

  • 它也是数据的“水平”拆分,但在这种情况下跨越多个“实例”。
  • 例如,用例是社交媒体,其中有数百万“用户”,大部分由他们自己处理。也就是说,大多数查询都集中在数据的单个切片上,因此对于在一台服务器上执行所有这些查询的一群用户来说是很实用的。
  • 它可以称为“水平分区”,但不应与表的PARTITIONs 混淆。

垂直分区是将一些从表中拉出并放入并行表中。

  • 两个表(通常)具有相同的PRIMARY KEY,从而促进JOINs
  • 垂直分区(通常)仅在单个“实例”中完成。
  • 目的包括拆分大文本/博客列;拆分可选列(并使用LEFT JOIN 得到NULLs)。
  • 垂直分区在 MyISAM 中有些用处,但在 InnoDB 中很少有用,因为该引擎会自动执行此操作。

复制集群

  • 多个实例包含相同的数据。
  • 用于“高可用性”(HA)。
  • 用于横向扩展读取。
  • 与分区或分片正交。
  • 将实例放在同一台服务器上没有意义(测试/实验/登台/等除外)。

【讨论】:

    【解决方案2】:

    就 MySQL 和 PostgreSQL 功能集而言,分区是数据的物理分段。它们存在于单个数据库实例中,用于缩小您在特定时间与之交互的数据范围,以应对高数据量情况。

    您引用的文档是在系统设计级别谈论更抽象的数据分区概念。

    【讨论】:

    • 感谢@chaos,所以可以正确地说(至少在 MySQL 和 PostgreSQL 中),一个服务器可以包含多个实例,一个实例可以包含多个分区(对于给定的一组表),但我们不能让实例共享分区,或者服务器共享实例,对吧?
    • 就 MySQL/PostgreSQL 类型的分区而言是正确的。另见en.wikipedia.org/wiki/Shard_(database_architecture)
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2021-06-03
    • 2023-03-12
    • 2023-04-10
    • 1970-01-01
    • 2018-09-29
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多