我如何在 Couchbase 中支持“表格”?
How do I support “Tables” in Couchbase?
RDBMS 有 table;此外,NoSQL 中也存在类似的概念,例如 Google 数据存储中的种类。但是 Couchbase 将所有内容都放在一个大名称空间中。如何以类似 table 的方式排列我的数据?
我想要 table 类命名空间的性能优势。如果我有 1,000,000 行一种类型,10 行另一种类型,我宁愿查询引擎不必查看 1,000,010 行来找到这十行之一。
- 存储桶可用,但最多只能有十个。所以,这些并不是真正的 table-like.
- 表可以在应用层上实现,每个
JsonDocument
中有一个 type
或 kind
属性。但这混合了不同的抽象层:元数据与数据。
- 您可以在每个键前加上类似 "Table" 的名称。
"User:111"
而不是 111
.
如何在 Couchbase 中获得 Tables/Kinds 的好处?
目前,正确的做法是添加一个表示文档类型的属性,然后使用您的 "type" 属性在其中创建索引。因此您的查询将直接扫描索引而不是完整的 table 扫描。乍一听这可能不常见,但索引是 CB 中最强大的功能之一。
您可以查看您的查询是否正在使用您在 Web 控制台的 "Plan" 选项卡中创建的索引:
https://blog.couchbase.com/couchbase-5-5-enhanced-query-plan-visualization/
如果您正在使用 Spring 数据,它会自动完成或您通过属性“_class”完成 https://blog.couchbase.com/couchbase-spring-boot-spring-data/
为此用例创建多个存储桶不是一个好的策略,因为每当您需要进行连接时,您都需要做一些额外的工作。
您可以在查询中通过 meta() 访问有关文档的一些元数据(例如:meta().id、meta().cas),但类型本身必须保持为顶级文档的属性。
您可以在每个键前加上类似 "Table" 的名称。 "User:111" 而不是 111。 -> 当您需要过滤应通过跨数据中心复制复制的文档时,这很有用 https://blog.couchbase.com/deep-dive-cross-data-center-replication-xdcr/
RDBMS 有 table;此外,NoSQL 中也存在类似的概念,例如 Google 数据存储中的种类。但是 Couchbase 将所有内容都放在一个大名称空间中。如何以类似 table 的方式排列我的数据?
我想要 table 类命名空间的性能优势。如果我有 1,000,000 行一种类型,10 行另一种类型,我宁愿查询引擎不必查看 1,000,010 行来找到这十行之一。
- 存储桶可用,但最多只能有十个。所以,这些并不是真正的 table-like.
- 表可以在应用层上实现,每个
JsonDocument
中有一个type
或kind
属性。但这混合了不同的抽象层:元数据与数据。 - 您可以在每个键前加上类似 "Table" 的名称。
"User:111"
而不是111
.
如何在 Couchbase 中获得 Tables/Kinds 的好处?
目前,正确的做法是添加一个表示文档类型的属性,然后使用您的 "type" 属性在其中创建索引。因此您的查询将直接扫描索引而不是完整的 table 扫描。乍一听这可能不常见,但索引是 CB 中最强大的功能之一。
您可以查看您的查询是否正在使用您在 Web 控制台的 "Plan" 选项卡中创建的索引: https://blog.couchbase.com/couchbase-5-5-enhanced-query-plan-visualization/
如果您正在使用 Spring 数据,它会自动完成或您通过属性“_class”完成 https://blog.couchbase.com/couchbase-spring-boot-spring-data/
为此用例创建多个存储桶不是一个好的策略,因为每当您需要进行连接时,您都需要做一些额外的工作。
您可以在查询中通过 meta() 访问有关文档的一些元数据(例如:meta().id、meta().cas),但类型本身必须保持为顶级文档的属性。
您可以在每个键前加上类似 "Table" 的名称。 "User:111" 而不是 111。 -> 当您需要过滤应通过跨数据中心复制复制的文档时,这很有用 https://blog.couchbase.com/deep-dive-cross-data-center-replication-xdcr/