Postgresql 可选的表格布局和索引
我们正在收集统计数据,并有一些关于如何将其存储在数据库中的选项。它是一个数组,每行最多包含1000个对象,数千行。我们可以使用两种不同的结构Postgresql 可选的表格布局和索引,postgresql,Postgresql,我们正在收集统计数据,并有一些关于如何将其存储在数据库中的选项。它是一个数组,每行最多包含1000个对象,数千行。我们可以使用两种不同的结构 Option 1: [ { "04a32156-6ad6-49f4-a0c6-9d6ddf784595": [ { "B": false, "C": "2627", "O": null, "P": 3849
Option 1:
[
{
"04a32156-6ad6-49f4-a0c6-9d6ddf784595": [
{
"B": false,
"C": "2627",
"O": null,
"P": 38494
},
{
"B": false,
"C": "2273",
"O": null,
"P": 45900
}
]
},
{
"fcd2cf78-09dc-436b-be87-b768eab989f5": [
{
"B": false,
"C": "1836",
"O": null,
"P": 2212
},
{
"B": true,
"C": "2080",
"O": null,
"P": 2105
}
]
}
]
或
我们需要查询id为'04a32156-6ad6-49f4-a0c6-9d6ddf784595'的对象中的所有数据
哪种结构更好,索引的最佳方式是什么?除了此处的id之外,不需要为其他项目编制索引。对于简单快速的查询,最好的方法是规范化架构:
CREATE TABLE object (
h uuid PRIMARY KEY
);
CREATE TABLE data (
data_id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
b boolean,
c integer NOT NULL,
o integer[],
p integer NOT NULL
)
CREATE TABLE object_data (
h uuid REFERENCES object NOT NULL,
data_id bigint REFERENCES data NOT NULL,
PRIMARY KEY (h, data_id)
);
CREATE INDEX ON object_data (data_id);
是的,这里最大的挑战是在db中插入1x2MB的blob比插入1000x2KB的行快得多,这是我们无法沿着这条路径前进的主要原因。您是否尝试过使用
复制
?
CREATE TABLE object (
h uuid PRIMARY KEY
);
CREATE TABLE data (
data_id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
b boolean,
c integer NOT NULL,
o integer[],
p integer NOT NULL
)
CREATE TABLE object_data (
h uuid REFERENCES object NOT NULL,
data_id bigint REFERENCES data NOT NULL,
PRIMARY KEY (h, data_id)
);
CREATE INDEX ON object_data (data_id);