将任意键/值对与Postgres DB中的表行相关联的最佳方法?

Dav*_*Eyk 4 postgresql performance database-design key-value entity-attribute-value

对于Postgres 8.4 DB,我有一个非常完美的关系数据模式,但是我需要能够将任意键/值对与我的几个表相关联,分配的键按行变化.键/值对是用户生成的,因此我无法提前预测它们或纠缠有序的架构更改.

我有以下要求:

  • 键/值对将经常被读取,偶尔写入.读取必须相当快.
  • 否(当前)需要查询键或值.(但有一天它可能会派上用场.)

我看到以下可能的解决方案:

  1. 实体-属性-值 模式/反模式.烦人,但烦恼一般会被我的ORM所抵消.
  2. 将键/值对存储为文本列上的序列化JSON数据.一个简单的解决方案,ORM再次派上用场,但我可以亲吻未来自己对查询的需求再见.
  3. 在其他NoSQL数据库中存储键/值对 - 可能是键/值或文档存储.ORM在这里没有帮助.我自己必须管理单独的查询(以及迫在眉睫的数据完整性问题?).

我担心查询性能,因为我希望有一天会有很多这些.我也关心程序员的表现,因为我必须构建,维护和使用这些东西.这里有明显的最佳方法吗?或者我错过了什么?

a_h*_*ame 7

这正是PostgreSQL中hstore数据类型的用途.
http://www.postgresql.org/docs/current/static/hstore.html

它真的很快(你可以索引它)并且很容易处理.唯一的缺点是你只能存储字符数据,但你也遇到其他解决方案的问题.

索引支持"exists"运算符,因此您可以非常快速地查询存在特定键的行,或者查询特定属性具有特定值的行.

由于一些尺寸限制被取消,因此9.0甚至更好.