j.d*_*doe 1 postgresql parsing database-design tuples multidimensional-array
我有一个看起来像这样的数组[[(Double,Double)]]。它是一个多维元组数组。
这是我永远不会查询的数据,因为它不需要查询。只有在客户端是这样才有意义。我正在考虑将整个内容存储为字符串,然后将其解析回多数组。
这是一个很好的方法吗?考虑到我最多可以有 20 个数组,其中最多有 4 个内部数组,每个数组都有一个 2 Double 的元组,那么解析会非常昂贵吗?
我如何检查哪种方法更好,以及将其存储为 PostgreSQL 中的多维数组是否是更好的方法?
我将如何存储它?
要存储复合类型的数组(具有任何嵌套级别),您需要一个已注册的基类型才能使用。您可以有一个定义行类型的表,或者只是显式创建类型:
CREATE TYPE dd AS (a float8, b float8);
Run Code Online (Sandbox Code Playgroud)
以下是构建二维数组的一些方法:
SELECT ARRAY [['(1.23,23.4)'::dd]]
, (ARRAY [['(1.23,23.4)']])::dd[]
, '{{"(1.23,23.4)"}}'::dd[]
, ARRAY[ARRAY[dd '(1.23,23.4)']]
, ARRAY(SELECT ARRAY (SELECT dd '(1.23,23.4)'));
Run Code Online (Sandbox Code Playgroud)
有关的:
请注意,Postgres 数组类型dd[]可以存储任何嵌套级别的值。看:
这是否比仅存储字符串文字更有效很大程度上text取决于您的用例的详细信息。
float8(= double precision) 占用 8 个字节。文本字符串“1”在磁盘上占用 2 个字节,在 RAM 中占用 4 个字节。text“123.45678”在磁盘上占用 10 个字节,在 RAM 中占用 12 个字节。text的读写速度比相同大小的数组类型要快一些。text值会被压缩(自动),这有利于存储大小(尤其是重复模式) - 但会增加压缩/解压缩成本。无论如何,实际的 Postgres 数组都更干净,因为 Postgres 不允许存储非法字符串。
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |