最近我一直在读关于可伸缩架构的书.在这种情况下,关于数据库不断出现的两个词是shardingpartitioning.我查了一下描述,但还是弄糊涂了.

stackoverflow的专家能帮我弄清楚基本情况吗?

  • shardingpartitioning之间有什么区别?
  • 'all sharded databases are essentially partitioned (over different nodes), but all partitioned databases are not necessarily sharded'是真的吗?

推荐答案

分区更像是在表或数据库之间划分数据的通用术语.切分是一种特定类型的分区,是所谓水平分区的一部分.

在这里,您可以跨(通常)多个实例或服务器复制模式,使用某种逻辑或标识符来知道要查找数据的实例或服务器.这种标识符通常被称为"碎片密钥".

一种常见的无键逻辑是使用字母表划分数据.A-D是实例1,E-G是实例2等.客户数据非常适合这种情况,但如果分区没有考虑到某些字母比其他字母更常见,则在不同实例的大小上会有一定的误报.

另一种常见的技术是使用密钥同步系统或逻辑,以确保跨实例的唯一密钥.

你可以研究的一个众所周知的例子是Instagram在早期是如何解决分区的(见下面的链接).他们一开始只在很少的服务器上进行分区,使用Postgres将数据从一开始就进行分割.我相信那几个物理碎片上有几千个逻辑碎片.阅读他们2012年的精彩作品:Instagram Engineering - Sharding & IDs

请看这里:http://www.quora.com/Whats-the-difference-between-sharding-and-partition

Mysql相关问答推荐

—符号在哪里条件""

如何有效地计算共同的朋友/追随者?

Google Sheet查询以提取数据并用值替换复选框.(差异)

根据当前表列的值,从SQL中的另一个表中获取数据

MySQL多连接以获得单个结果集(使用MySQL max函数)

在MySQL和JavaFX中保存和检索图像文件

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

使用 awk 重写 maxscale 过滤器

将 AVG 与 HAVING 结合使用

分别针对每个不同的列 Select 聚合

将sql查询转换为sequelize

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

保存SQL查询的中间结果

MYSQL 或 Laravel Eloquent 如何从这个订单中统计细节

MySQL 添加一个 NOT NULL 列

这是将表单数据插入 MySQL 数据库的安全方法吗?

INSERT ... 使用 WHERE 进行重复的密钥更新?

如何使用 SQL 数据库中的经纬度查找最近的位置?

将 MySQL 数据库置于版本控制之下?

数据截断:第 1 行的logo列数据太长