火力基地。使用 NoSQL 时什么更有效——将引用的 table 对象存储在对象中或存储 id 并按需检索它?
Firebase. What's more efficient when using NoSQL - to store referenced table object in an object or to store id and retrieve it on demand?
所以我目前正在学习 Firebase 和 NoSQL 数据库。当我在其他对象中有很多引用对象时,我对使用哪个有疑问。我想出了一个解决方案来保存引用对象的 id
而不是保存整个对象并按需按 id
检索它,但我开始想知道哪种方法更有效并且应该使用。
第一个例子是持有一个对象的id
:
"job": {
"id": 1,
"name": "name",
"orderId": 1
}
使用此方法时,每当我获得 job
对象时,我也会获得 order
对象并将其附加到作业。
另一个解决方案是持有整个对象:
"job": {
"id": 1,
"name": "name",
"order": {
"id": 1,
"date": "2022-01-28"
}
}
这样除了数据库有大对象外没有任何问题
哪个更好用效率更高?或者也许还有第三种方式?
None 这些解决方案优于另一个。您应该根据应用的用例使用一个或另一个。我不完全确定您使用的是 Cloud Firestore 还是实时数据库,但您应该始终比较一个结构与另一个结构。你怎么能那样做?只需添加一些虚拟数据并执行所需的查询即可。这样一来,你就知道哪个比那个贵了。
除此之外,如果您有 SQL 背景,则在 NoSQL 数据库中复制数据是正常的。这种技术称为反规范化。如果您考虑在某个时间点尝试使用 Cloud Firestore,那么请从以下 post:
中查看我的回答
所以我目前正在学习 Firebase 和 NoSQL 数据库。当我在其他对象中有很多引用对象时,我对使用哪个有疑问。我想出了一个解决方案来保存引用对象的 id
而不是保存整个对象并按需按 id
检索它,但我开始想知道哪种方法更有效并且应该使用。
第一个例子是持有一个对象的id
:
"job": {
"id": 1,
"name": "name",
"orderId": 1
}
使用此方法时,每当我获得 job
对象时,我也会获得 order
对象并将其附加到作业。
另一个解决方案是持有整个对象:
"job": {
"id": 1,
"name": "name",
"order": {
"id": 1,
"date": "2022-01-28"
}
}
这样除了数据库有大对象外没有任何问题
哪个更好用效率更高?或者也许还有第三种方式?
None 这些解决方案优于另一个。您应该根据应用的用例使用一个或另一个。我不完全确定您使用的是 Cloud Firestore 还是实时数据库,但您应该始终比较一个结构与另一个结构。你怎么能那样做?只需添加一些虚拟数据并执行所需的查询即可。这样一来,你就知道哪个比那个贵了。
除此之外,如果您有 SQL 背景,则在 NoSQL 数据库中复制数据是正常的。这种技术称为反规范化。如果您考虑在某个时间点尝试使用 Cloud Firestore,那么请从以下 post:
中查看我的回答