postgresql – 对索引位集进行大批量更新的最佳方法
这个问题的环境是AWS RDS上的PostgreSQL 9.6.5.
问题是关于包含以下逻辑数据模型的3亿行的表的最佳模式设计和批量更新策略: > id:主键,最多40个字符的字符串 数据通过Apache Spark批量更新,即,更新可以表示为平面文件,例如,以COPY格式,或作为SQL操作.任何时候只有一个更新处于活动状态.代码和年份的更新非常罕见.对标志的更新会影响每次更新1-5%的行(3-15百万行).更新行可以包括所有标志及其值,只包括要更新的“on”标志或仅包含其值已更改的标志.在前一种情况下,Spark需要查询数据以获取标志的当前值. 更新期间将有一个小的读取负载. 问题是关于支持查询的最佳模式和相关更新策略.如上所述更新. 迄今为止的一些研究评论: >使用1,000个布尔列将创建一个非常有效的行表示,但除了一些DDL复杂性之外,还需要1,000个索引. 解决方法
不要将标志存储在主表中.
假设主表称为数据,请定义如下内容: CREATE TABLE flag_names ( id smallint PRIMARY KEY,name text NOT NULL ); CREATE TABLE flag ( flagname_id smallint NOT NULL REFERENCES flag_names(id),data_id text NOT NULL REFERENCES data(id),value boolean NOT NULL,PRIMARY KEY (flagname_id,data_id) ); 如果创建了新标志,请在flag_names中插入新行. 如果标志设置为TRUE或FALSE,则在标志表中插入或更新一行. 加入数据标志以测试是否设置了某个标志. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |