![f91530a18d51d57574a21f89f89f8ce6.png](https://i-blog.csdnimg.cn/blog_migrate/99f9b31c71cb0e7f0d0866e6e22e37a1.jpeg)
数据量比较大需要分表的业务场景非常多,比如商城的订单表、WAF 记录的日志等等,常见的就是按照时间去分表。最近我们开源了一个 Django 插件,目的是方便在 PostgreSQL 11 上实现按时间的分区表的管理。
Django orm 非常好用,我们通过 patch 的方式实现了修改 orm 生成的 CREATE TABLE sql 语句,然后内置了一些分区表管理逻辑。
链接在这
chaitin/django-pg-timepartgithub.com![aa927d0fc6d5433396a333b03966ca54.png](https://i-blog.csdnimg.cn/blog_migrate/55587db8570fd7812df984dc86137d3c.png)
我们业务上使用这个库的截图如下
![7c93b8f66039a532d773221b69089f81.png](https://i-blog.csdnimg.cn/blog_migrate/04002e894dab7badb7348d32cf56c57a.jpeg)
![ec7c88f42f26f985e5a8a04e5a4b8f36.png](https://i-blog.csdnimg.cn/blog_migrate/5025d7668819cf12f346eea3b91f7bd0.jpeg)
我们使用分区表主要为了实现下面的需求
- 日志一旦被归档,这些数据就不要被查询了
- 如果查询的时候带上了时间,某些表就可以直接跳过查询
- 如果磁盘空间不足,快速删除某些数据(被归档的表的删除和 vacuum 会比较容易,因为需要锁,一直写数据的情况下不容易操作)
- 如果加磁盘扩容,新的子表可以单独调整 tablespace 放在新的磁盘上,先不移动已有的数据(也是锁的原因)
欢迎大家试用和提出意见~