Couchbase 中的 Referenced 和 Embedded 文档之间应该使用哪个?
Which should be used between Referenced and Embedded document in the Couchbase?
我想使用 Couchbase noSQL 数据库。但是,我对哪种文档结构使用了引用文档和嵌入式文档感到困惑。
我有三个实体。
约会
预约发票。
发票的付款明细。 (一对多)
那么,我应该使用哪种文档结构,为什么?
这绝对是一个非常广泛的问题,没有 "right" 答案。您需要考虑您的访问模式(即您通常如何写入和检索数据)以及您布置的数据结构。
举个例子,我认为完全有可能将所有这些都放在一个文档中:
key: appointment::123
{
"date": "2018-01-29",
"place": "123 main st",
"invoice": {
"date": "2018-01-30",
"due": "2018-02-28",
"items": [
{ "desc": "widget", "quantity": 2, "price":3.99 },
{ "desc": "foo", "quantity": 1, "price":24.99 },
{ "desc": "bar", "quantity": 3, "price":5.00 }
]
}
你的问题同时标记了 CouchDb 和 Couchbase,所以我不确定你打算使用哪个。但是,如果您使用 Couchbase,我知道您可以使用 subdocument operations(从 Couchbase Server 4.5 开始)。也就是说,如果您只需要文档的部分,则不必每次都检索整个文档。随着文档变大,这会很有帮助。我不知道 CouchDb 中是否提供相同类型的东西(它可能被称为不同的东西)。此外,Couchbase 具有完整的 SQL 实现,因此无论您最终使用何种模型,您都可以查询数据。
我想使用 Couchbase noSQL 数据库。但是,我对哪种文档结构使用了引用文档和嵌入式文档感到困惑。
我有三个实体。
约会
预约发票。
发票的付款明细。 (一对多)
那么,我应该使用哪种文档结构,为什么?
这绝对是一个非常广泛的问题,没有 "right" 答案。您需要考虑您的访问模式(即您通常如何写入和检索数据)以及您布置的数据结构。
举个例子,我认为完全有可能将所有这些都放在一个文档中:
key: appointment::123
{
"date": "2018-01-29",
"place": "123 main st",
"invoice": {
"date": "2018-01-30",
"due": "2018-02-28",
"items": [
{ "desc": "widget", "quantity": 2, "price":3.99 },
{ "desc": "foo", "quantity": 1, "price":24.99 },
{ "desc": "bar", "quantity": 3, "price":5.00 }
]
}
你的问题同时标记了 CouchDb 和 Couchbase,所以我不确定你打算使用哪个。但是,如果您使用 Couchbase,我知道您可以使用 subdocument operations(从 Couchbase Server 4.5 开始)。也就是说,如果您只需要文档的部分,则不必每次都检索整个文档。随着文档变大,这会很有帮助。我不知道 CouchDb 中是否提供相同类型的东西(它可能被称为不同的东西)。此外,Couchbase 具有完整的 SQL 实现,因此无论您最终使用何种模型,您都可以查询数据。