Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 可选的表格布局和索引_Postgresql - Fatal编程技术网

Postgresql 可选的表格布局和索引

Postgresql 可选的表格布局和索引,postgresql,Postgresql,我们正在收集统计数据,并有一些关于如何将其存储在数据库中的选项。它是一个数组,每行最多包含1000个对象,数千行。我们可以使用两种不同的结构 Option 1: [ { "04a32156-6ad6-49f4-a0c6-9d6ddf784595": [ { "B": false, "C": "2627", "O": null, "P": 3849

我们正在收集统计数据,并有一些关于如何将其存储在数据库中的选项。它是一个数组,每行最多包含1000个对象,数千行。我们可以使用两种不同的结构

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);