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