我有以下要求:
技术:
json:
[{
"id": 1,
"text": "test1",
"children": [{
"id": 2,
"text": "test1"
},
{
"id": 3,
"text": "test1",
"children": [{
"id": 4,
"text": "test1"
},
{
"id": 5,
"text": "test1"
}
]
}
]
}]
现在我有两个案例:
a)这个嵌套状态来自前端,我希望再次拥有完全相同的顺序(不幸的是postgres或mysql不一定给出你存储它的相同顺序)
b)我希望有可能通过以下方式订购这个深度嵌套的状态中的creationDate
由于性能原因,我不能在前端内压平状态(例如使用" parentId") - 扁平化是递归的并且非常昂贵。
你知道如何解决这个问题吗? postgres是一个很好的选择吗?
答案 0 :(得分:0)
postgres是一个不错的选择吗?
和任何其他关系数据库一样可怕。如果将整个结构存储为字符串,解析并在代码中对其进行排序实际上证明是最高性能的解决方案,我不会感到惊讶。但是,如果您选择将其映射到关系模式...
就保存而言,您显然需要@JoinColumn @OrderColumn @OneToMany
子列表。我对@OrderColumn
持谨慎态度,因为它可能会引入严重的性能问题。
至于检索,大多数dbs都提供分层查询扩展,因此您可以尝试使用本机查询。参见例如Oracle的https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm和ORDER SIBLINGS BY
子句。 Postgres还允许递归查询,但语法有点复杂:https://www.postgresql.org/docs/9.1/static/queries-with.html。
您的应用需要重新组合树,但我仍然期望比每个级别执行一个查询以检索层次结构更好的性能。在(id, parent_id)
上创建索引可能会有所帮助。您可以尝试使用原始查询方法vs @OneToMany(fetch=EAGER)
来比较性能。