Citus
当一个数据库表的容量达到百万级别后,所有的查询都会变得非常慢。这时需要使用分库分表的技术。Citus 是 PostgresQL 的一个插件,可以实现数据库端的分库分表。
理论知识
水平切分与垂直切分
水平切分是在一张表上,在不改变表结构的前提下,将表的数据条目划分到多个数据库表中。划分的标准可以是表字段的哈希,也可以是随机划分。
垂直切分是在一张表上,将属性拆分,然后将表的数据条目划分到多个数据库表中。通常的做法是冷热数据分离,将冷数据(读多写少)的数据单独放到一个表中,将热数据(写多)根据需要划分到多个表中。
切分位置
切分可以使用多种技术实现。
在数据库端,可以使用插件实现,或者直接使用带有切分功能的数据库。Citus 就是 PostgresQL 实现数据库端切分的插件。
在应用层或 ORM 层也可以用代理做,例如 Sharding-JDBC。
使用 Citus
直接部署