「读书」数据密集型应用 Day 3

137 阅读3分钟

数据查询语言

查询语言

  • 命令式查询语言
  • 声明式查询语言
    • 声明式查询语⾔是迷⼈的,因为它通常⽐命令式API更加简洁和容易。但更重要的是,它还隐藏了数据库引擎的实现细节,这使得数据库系统可以在⽆需对查询做任何更改的情况下进⾏性能提升。

Web上的声明式查询

  • CSS 选择器

MapReduce查询

  • MapReduce是⼀个由Google推⼴的编程模型,⽤于在多台机器上批量处理⼤规模的数据
  • MapReduce既不是⼀个声明式的查询语⾔,也不是⼀个完全命令式的查询API,⽽是处于两者之间

图数据模型

  • 用于维护多对多关系

属性图

  • 在属性图模型中,每个顶点(vertex)包括:
    • 唯⼀的标识符
    • ⼀组出边(outgoing edges)
    • ⼀组⼊边(ingoing edges)
    • ⼀组属性(键值对)
  • 每条边(edge)包括:
    • 唯⼀标识符
    • 边的起点/尾部顶点(tail vertex)
    • 边的终点/头部顶点(head vertex)
    • 描述两个顶点之间关系类型的标签
    • ⼀组属性(键值对)

Cypher查询语⾔

通常对于声明式查询语⾔来说,在编写查询语句时,不需要指定执⾏细节:查询优化程序会⾃动选择预测效率最⾼的策略,因此你可以继续编写应⽤程序的其他部分

SQL中的图查询

同⼀个查询,⽤某⼀个查询语⾔可以写成4⾏,⽽⽤另⼀个查询语⾔需要29⾏,这恰恰说明了不同的数据模型是为不同的应⽤场景⽽设计的。选择适合应⽤程序的数据模型⾮常重要。

三元组存储和SPARQL

  • 三元组的主语相当于图中的⼀个顶点。⽽宾语是下⾯两者之⼀:
    • 原始数据类型中的值,例如字符串或数字。在这种情况下,三元组的谓语和宾语相当于主语顶点上的属性的键和值。例如, (lucy, age, 33) 就像属性 {“age”:33} 的顶点lucy。
    • 图中的另⼀个顶点。在这种情况下,谓语是图中的⼀条边,主语是其尾部顶点,⽽宾语是其头部顶点。例如,在 (lucy, marriedTo, alain) 中主语和宾语 lucy 和 alain 都是顶点,并且谓语 marriedTo 是连接他们的边的标签。

语义网络

从本质上讲语义⽹是⼀个简单且合理的想法:⽹站已经将信息发布为⽂字和图⽚供⼈类阅读,为什么不将信息作为机器可读的数据也发布给计算机呢?资源描述框架(RDF)【41】的⽬的是作为不同⽹站以⼀致的格式发布数据的⼀种机制,允许来⾃不同⽹站的数据⾃动合并成⼀个数据⽹络 - ⼀种互联⽹范围内的“关于⼀切的数据库“。

RDF 数据模型

SPARQL 查询语句

基础: datalog