postgresql - 基于表名的 Postgres 表分区
问题描述
我有一个表,其中存储有关特定事件和特定时间戳的天气信息。我在这张表上插入、更新和选择(比删除更频繁)。我的所有查询都查询时间戳和 event_id。由于这张表正在爆炸,我正在考虑在 postgres 中进行表分区。
- 我还可以考虑拥有多个表并将它们命名为“table_< event_id >_< timestamp >”来存储特定的时间戳信息,而不是使用 postgres 声明/继承分区。但是,我注意到互联网上没有人做过或写过这样的方法。有什么我想念的吗?
- 我看到在 postgres 分区中,数据既保存在主表中,也保存在子表中。为什么要在这两个地方保留?对我进行插入和更新似乎效率较低。
- 当 postgres 开始阻塞时,表的数量是否有一般限制?
谢谢!
解决方案
重新 1) 不要这样做。如果 Postgres 开发人员已经通过提供声明性分区为您完成了这项工作,为什么还要重新发明轮子
重新2)你错了。数据只保存在它所属的分区中。它看起来好像存储在“主”中。
重新 3) 没有内置限制,但任何超出“几千”分区的东西都可能太多了。它仍然可以工作,但特别是查询计划会更慢。有时查询执行也可能会受到影响,因为运行时分区修剪不再那么有效。
根据您的描述,您可能希望对事件 ID 进行哈希分区,然后在时间戳值上创建范围子分区(因此事件的每个分区再次在时间戳范围内进行分区)
推荐阅读
- powerbi - PowerBI 故障排除措施错误“列不存在或没有关系...”
- php - 无法使用复选框保持用户登录
- java - 在 Logback 中使用 include 重用编码器配置
- javascript - 无法读取未定义的属性“用户名”
- jquery - 在此音频插件中找不到暂停功能
- vb.net - 是否可以在 vb.net for Office 中获取当前显示测量单位?
- oracle - Oracle获取插入时间戳的当天之间的所有记录
- javascript - Vuex 有效负载唯一 ID 重复两次(或更多)
- azure-functions - Cosmos DB 触发器无法使用 azure 函数 C# 读取 appsettings
- php - 编辑:在 PHP 中计算变量