我需要存储和构建下一个结构的快速查询:
class Model {
id: number:
alias: string;
schema: Record<string, any>;
}
其中schema
可以是:
{
someField: '$model_alias',
otherField: {
nestedField: '$other_model_alias'
}
}
示例数据:
{ id: 1, alias: "model_one", schema: { field1: "test", field2: "demo" } }
{ id: 2, alias: "model_second", schema: { someField: "$model_one", otherField: { nestedField: 5 } }
{ id: 3, alias: "model_third", schema: { field5: "$model_second", field6: "$model_one", field7: "$model_fourth" } }
{ id: 4, alias: "model_fourth", schema: { field8: "$model_second" } }
正如你所看到的,json字段schema
包含的字段可能会引用另一个带有模式的模型,因此,可能会有很多嵌套,关系可能是多对多的。
有没有可能用Postgres实现这样的结构,或者应该使用一些替代方案?我需要可能的简单管理结构和非常快速的查询(得到树的孩子或得到树的父母)。
- 谢谢-谢谢
1条答案
按热度按时间s2j5cfk01#
选择正确的数据库类型在最好的情况下也是很棘手的。你能提供更多关于你要做什么类型的查询的信息吗?你的数据集有多大?
如果您的需求是独占地获取模型的父模型和子模型,那么关系数据库(如postgres)可以做到这一点。如果关系是多对多的,那么您将拥有一个桥接表(https://dzone.com/articles/how-to-handle-a-many-to-many-relationship-in-datab),并且能够在该表上进行高效的查询。
如果你要在关系之间进行大量的多跳遍历,你可能真的需要查看一个图数据库来避免代价高昂的连接。Postgres甚至有一个插件可以实现这一点:https://www.postgresql.org/about/news/announcing-age-a-multi-model-graph-database-extension-for-postgresql-2050/
我不建议使用文档存储来存储像这样关系很大的数据,因为管理文档之间的关系必须由用户手动处理,而这通常会带来更多的麻烦。