我正在使用postgresql的hstore扩展,想知道数据是如何在内部存储的。请告诉我在hstore源代码中查看实现细节的位置。
我正在使用postgresql的hstore扩展,想知道数据是如何在内部存储的。请告诉我在hstore源代码中查看实现细节的位置。
hstore
是PostgreSQL主要分发的一部分,可以在http://git.postgresql.org/和GitHub上找到。你可以访问这里查看git head中的hstore
。
它似乎是作为varlena存储的,这意味着像其他任何内容一样,它也可以被TOAST。缺点是如果压缩了字段,就需要从磁盘读取整个字段才能提取一个键。
这也意味着,与任何其他正常字段值一样,更新字段的任何部分都需要将整个元组(行)的新副本写入表中,并在其不再对任何活动事务可见时将旧副本标记为过期(请参见Pg手册中的MVCC)。因此,对于经常更改的数据而言,大型hstore
是不可取的,因为每当其中任何部分发生更改时,都需要重新编写整个内容(以及包含它的行)。
源代码中似乎没有太多的注释来提供关于如何结构化和存储hstore
值的概述,而且这些代码中有很多宏,需要花费一些时间去理解。