postgresql - 如何在 PostgreSQL 中存储多个元组数组
问题描述
我有一个看起来像这样的数组[[(Double,Double)]]
。它是一个多维元组数组。
这是我永远不会查询的数据,因为它不需要查询。只有在客户端这样才有意义。我正在考虑将整个内容存储为字符串,然后将其解析回多数组。
考虑到我最多可以有 20 个数组和 4 个最大内部数组,每个数组都有一个 2 Double 的元组,这会是一个好方法吗?解析会非常昂贵吗?
我将如何检查哪种方法更好,以及将其作为多维数组存储在 PostgreSQL 中是否是更好的方法?
我将如何存储它?
解决方案
要存储复合类型的数组(具有任何嵌套级别),您需要使用已注册的基类型。您可以有一个定义行类型的表,或者只是显式创建类型:
CREATE TYPE dd AS (a float8, b float8);
以下是构建您的二维数组的一些方法:
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)'));
有关的:
请注意,Postgres 数组类型dd[]
可以存储具有任何嵌套级别的值。看:
这是否比仅存储字符串文字更有效text
取决于您的用例的详细信息。
- 数组类型占用 24 字节的开销加上元素值的通常存储大小。
float8
(=double precision
) 占用 8 个字节。文本字符串“1”在磁盘上占 2 个字节,在 RAM 中占 4 个字节。text
“123.45678”在磁盘上占用 10 个字节,在 RAM 中占用 12 个字节。- Simple
text
的读取和写入速度比相同大小的数组类型快一点。 - 大
text
值被压缩(自动),这有利于存储大小(尤其是重复模式) - 但会增加压缩/解压缩成本。
在任何情况下,实际的 Postgres 数组都更干净,因为 Postgres 不允许存储非法字符串。
推荐阅读
- r - 在绘图内包含颜色图例,并在 plotly-R 中将调色板更改为蓝色/红色
- laravel - 是bug laravel,还是什么?hasMany 返回空数组
- python - 如何在烧瓶python中将“新的csv文件”保存到“文件名”中
- react-native - 如何修复构建失败的 React Native 应用程序?
- javascript - 如何在 SPA 上使用随机生成的 API 密钥?
- forms - 更新到 xamarin forms 5 导致调试速度非常慢
- android - ScrollView 错误,即使它有一个孩子
- jmeter - 根据示例响应中的 queryTime 断言
- bash - 提取两个字符之间的行的正则表达式
- c# - ASP.NET Core 5 MVC 用员工等级计算工资