欢迎投稿

今日深度:

NoSQL 数据建模技术(1)(5)

(15) 嵌套文档扁平化:有限的字段名 Nested Documents Flattening: Numbered Field Names

搜索引擎基本上来说和扁平文档一同工作,如:每一个文档是一个扁平的字段和值的例表。这种数据模型的用来把业务实体映射到一个文本文档上,如果你的业务实体有很复杂的内部结构,这可能会变得很有挑战。一个典型的挑战是把一个有层级的文档映映射出来。例如,文档中嵌套另一个文档。让我们看看下面的示例:


Nested Documents Problem

上面的每一个业务实体代码一种简历。其包括了人名和一个技能列表。我把这个层级文档映射成一个文本文档,一种方法是创建 Skill 和 Level 字段。这个模型可以通过技术或是等级来搜索一个人,而上图标注的那样的组合查询则会失败。陈皓注:因为分不清Excellent是否是Math还是Poetry上的)

在引用中的 [4.6] 给出了一种解决方案。其为每个字段都标上数字 Skill_i 和 Level_i,这样就可以分开搜索每一个对下图中使用了OR来遍历查找所有可能的字段):


Nested Document Modeling using Numbered Field Names

这样的方式根本没有扩展性,对于一些复杂的问题来说只会让代码复杂度和维护工作变大。

适用性: Search Engines 全文搜索

(16)嵌套文档扁平化:邻近查询 Nested Documents Flattening: Proximity Queries

在附录 [4.6]中给出了这个技术用来解决扁平层次文档。它用邻近的查询来限制可被查询的单词的范围。下图中,所有的技能和等级被放在一个字段中,叫 SkillAndLevel,查询中出现的 “Excellent” 和 “Poetry” 必需一个紧跟另一个:


Nested Document Modeling using Proximity Queries

附录 [4.3] 中讲述了这个技术被用在Solr中的一个成功案例。

适用性: Search Engines 全文搜索

(17) 图结构批处理 Batch Graph Processing

Graph databases 图数据库,如 neo4j 是一个出众的图数据库,尤其是使用一个结点来探索邻居结点,或是探索两个或少量结点前的关系。但是处理大量的图数据是很没有效率的,因为图数据库的性能和扩展性并不是其目的。分布式的图数据处理可以被 MapReduce 和 Message Passing pattern 来处理。如: 在我前一篇的文章中的那个示例。这个方法可以让 Key-Value stores, Document databases, 和 BigTable-style databases 适合于处理大图。

Applicability: Key-Value Stores, Document Databases, BigTable-style Databases

参考

Finally, I provide a list of useful links related to NoSQL data modeling:

  • BigTable-style Databases:
  • Document Databases:
  • Full Text Search Engines:
  • Graph Databases:
  • Demensionality Reduction:

  • www.htsjk.Com true http://www.htsjk.com/shujukukf/17004.html NewsArticle (15) 嵌套文档扁平化:有限的字段名 Nested Documents Flattening: Numbered Field Names 搜索引擎基本上来说和扁平文档一同工作,如:每一个文档是一个扁平的字段和...
    评论暂时关闭