Pra*_*guy 4 postgresql performance index database-design partitioning
我的任务是在 PostgreSQL 中设计一个表(从未使用过它)来从平面文件加载数据。该表将包含约 110M 行。每行都有一定的 IP 地址范围(例如:0.0.1.0 - 0.0.2.240)和大约 20 个属性。
数据需要每周完全更换一次,每天一次更新将根据每日文件进行。
应用程序将查询此表以获取给定的 IP 地址。需要找到合适的范围并返回属性。
我的计划是根据 IP 的第一个八位字节对表进行分区。这会给我 255 个分区。索引将基于范围的开始和结束 IP。
请让我知道是否有关于分区和索引的更多有用的想法?任何好的做法也会有所帮助。
ip4r
延期我的计划是根据 IP 的第一个八位字节对表进行分区。这会给我 255 个分区。索引将基于范围的开始和结束 ip。请让我知道是否有关于分区和索引的更多有用的想法?任何好的做法也会有所帮助。
这是ip4r的理想情况,摘自文档。
[...] 内置类型对 (
column >>= parameter
)形式的索引查找没有很好的支持,即您有一个 IP 地址范围表并希望找到哪些包含给定的 IP 地址。这需要一个rtree 或 gist 索引来有效地执行,并且还需要一种表示不精确落在 CIDR 边界上的 IP 地址范围的方法。[...默认类型] 是可变长度类型(支持 ipv6),具有非平凡的开销,作者(其应用程序主要处理大量单个 IPv4 地址)想要更轻量级的表示。
CREATE TABLE ipranges (range ip4r primary key, description text not null);
CREATE INDEX ipranges_range_idx ON ipranges USING gist (range);
INSERT INTO ipranges VALUES ('10.0.0.0/8','rfc1918 block 1');
INSERT INTO ipranges VALUES ('172.16.0.0/12','rfc1918 block 2');
INSERT INTO ipranges VALUES ('192.168.0.0/16','rfc1918 block 3');
INSERT INTO ipranges VALUES ('0.0.0.0/1','classical class A space');
INSERT INTO ipranges VALUES ('10.0.1.10-10.0.1.20','my internal network');
INSERT INTO ipranges VALUES ('127.0.0.1','localhost');
SELECT *
FROM ipranges
WHERE ip <<= range
ORDER BY ip, @ range;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
127 次 |
最近记录: |