Skip to main content

Citus

当一个数据库表的容量达到百万级别后,所有的查询都会变得非常慢。这时需要使用分库分表的技术。Citus 是 PostgresQL 的一个插件,可以实现数据库端的分库分表。

理论知识

水平切分与垂直切分

水平切分是在一张表上,在不改变表结构的前提下,将表的数据条目划分到多个数据库表中。划分的标准可以是表字段的哈希,也可以是随机划分。

垂直切分是在一张表上,将属性拆分,然后将表的数据条目划分到多个数据库表中。通常的做法是冷热数据分离,将冷数据(读多写少)的数据单独放到一个表中,将热数据(写多)根据需要划分到多个表中。

切分位置

切分可以使用多种技术实现。

在数据库端,可以使用插件实现,或者直接使用带有切分功能的数据库。Citus 就是 PostgresQL 实现数据库端切分的插件。

在应用层或 ORM 层也可以用代理做,例如 Sharding-JDBC。

使用 Citus

直接部署