对于Postgres 8.4 DB,我有一个非常完美的关系数据模式,但是我需要能够将任意键/值对与我的几个表相关联,分配的键按行变化.键/值对是用户生成的,因此我无法提前预测它们或纠缠有序的架
我有以下要求:
>键/值对将经常被读取,偶尔写入.读取必须相当快.
>否(现在)需要查询键或值. (但有一天它可能会派上用场.)
我看到以下可能的解决方案:
> Entity-Attribute-Value pattern/antipattern.烦人,但烦恼一般会被我的ORM所抵消.
>将键/值对存储为文本列上的序列化JSON数据.一个简单的解决方案,ORM再次派上用场,但我可以亲吻未来自己对查询的需求再见.
>将键/值对存储在其他一些NoSQL数据库中 – 可能是键/值或文档存储. ORM在这里没有帮助.我自己必须管理单独的查询(以及迫在眉睫的数据完整性问题?).
我担心查询性能,因为我希望有一天会有很多这些.我也关心程序员的表现,因为我必须构建,维护和使用这些东西.这里有明显的最佳方法吗?或者我错过了什么?
这正是PostgreSQL中hstore数据类型的用途.http://www.postgresql.org/docs/current/static/hstore.html
它真的很快(你可以索引它)并且很容易处理.唯一的缺点是你只能存储字符数据,但你也遇到其他解决方案的问题.
索引支持“exists”运算符,因此您可以非常快速地查询存在特定键的行,或者查询特定属性具有特定值的行.
由于一些尺寸限制被取消,因此9.0甚至更好.