相关疑难解决方法(0)

在PostgreSQL中计算和节省空间

我有一个像pg这样的表:

CREATE TABLE t (
    a BIGSERIAL NOT NULL,               -- 8 b
    b SMALLINT,                         -- 2 b
    c SMALLINT,                         -- 2 b
    d REAL,                             -- 4 b
    e REAL,                             -- 4 b
    f REAL,                             -- 4 b
    g INTEGER,                          -- 4 b
    h REAL,                             -- 4 b
    i REAL,                             -- 4 b
    j SMALLINT,                         -- 2 b
    k INTEGER,                          -- 4 b
    l INTEGER,                          -- 4 b
    m REAL,                             -- 4 b
    CONSTRAINT a_pkey PRIMARY KEY (a)
);
Run Code Online (Sandbox Code Playgroud)

以上每行最多可添加50个字节.我的经验是,我需要另外40%到50%的系统开销,甚至没有任何用户创建的索引.所以,每行约75个字节.我将在表中有许多行,可能超过1450亿行,因此该表将推动13-14太字节.我可以使用什么技巧来压缩这个表?我的可能想法如下......

将 …

postgresql storage database-design bigdata

58
推荐指数
4
解决办法
2万
查看次数

PostgreSQL:"bytea"和"bit varying"类型之间的区别

PostgreSQL类型byteabit varying声音类似:

文档没有提到任何一个的最大大小.难道是1GB喜欢character varying

我有两个单独的用例,都在一个包含数百万行的表中:

存储MD5哈希值

这将是一个bytea长度为16个字节或a bit(128).它将用于:

  • 重复数据删除:大量使用GROUP BY,我想有一个索引.
  • WHERE md5 =仅查询完全匹配.
  • 显示为人类使用的十六进制字符串.

存储任意二进制数据

长度不超过4kB的二进制数据字符串:

  • 按位运算以查找与某个掩码匹配的字符串.这篇文章末尾的例子.
  • 提取一些字节,例如获取字符串中字节14的整数值.
  • 一些重复数据删除.

使用按位操作的工作示例bit varying.掩码是X'00FF00',它只返回行X'AAAAAA'.我缩短了示例的字符串,但它将超过它们的全长,高达4kB.是否可以做类似的事情bytea

CREATE TABLE test1 (mystring bit varying);
INSERT INTO test1 VALUES (X'AAAAAA'), (X'ABCABC');
SELECT * FROM test1 WHERE mystring & X'00FF00' = X'00AA00';
Run Code Online (Sandbox Code Playgroud)

其中的byteabit varying是比较合适的?

我看到这个UUID类型正好存储了16个字节,那么存储MD5会有什么好处吗?

postgresql bit-manipulation

13
推荐指数
2
解决办法
5909
查看次数