我正在做一个项目,我需要在sql数据库(postgres)中存储数十亿行非结构化的history_data,这些行是2 - 3年。数据/列可能每天都在变化。
例如,第一天用户可以保存{“user_id”:“2223”,“website”:“www.mywebsite.org”,“webpage”:“mysubpageName”}。
第二天{“name”:“username”,“user_id”:“2223”,“bookclub_id”:“1”}。
我之前一直在做一个项目,我们使用经典的实体键/值表模型来解决这个问题。我们最多可以保存30个键值/值pr实体。但是当超过70-100毫米行时,查询开始变得越来越慢(内部连接太多)。
因此我想知道我是否应该在postgres中使用Json模型进行更改。搜索网页,阅读博客后,我真的很困惑。什么是pro和con将这改变为postgres中的json?
答案 0 :(得分:1)
您可以根据查询复杂性来考虑这一点。如果你有一个json文档的索引(也许是user_id),你可以做一个简单的索引扫描来快速访问整个json字符串。
您必须在客户端进行剖析,或者您可以将其传递给postgres中的函数,例如,您只想提取特定值的数据。
处理json时postgres最重要的特性之一是具有功能索引。与索引列值的“普通”索引相比,函数索引将函数应用于一个(或更多)列值的值并索引返回值。我不知道提取json字符串值的函数,但考虑你想要bookclub_id = 1的用户。你可以创建一个像
这样的索引create index idx_bookblub_id on mytable using getJsonValue("bookclub_id",mytable.jsonvalue)
之后的查询,如
select * from mytable where getJsonValue("bookclub_id",mytable.jsonvalue) = 1
闪电般快。