技术编程像图一样的数据模型( 五 )
- 在CODASYL中 , 所有的查询是命令式的 , 很难去编写并且因为模式的改变而经常要去重写 。 在图数据库中 , 如果你想的话 , 你可以以命令式的代码写下你的遍历 , 但通常图数据库也支持高级别的声明式语言 , 诸如Cypher或SPARQL 。 基石:Datalog
Datalog是比SPARAL或Cypher更老的语言 , 在1980年代 , 被学术界广泛的研究 。 在软件工程师中很少被知晓 , 尽管不是很重要 , 但他也为后来的建立的查询语言奠定了基础 。
实际上 , Datalog用于一些数据系统:例如 , 它是Datomic的查询语言 , 而Cascalog是用于在Hadoop中查询大型数据集的Datalog实现 。
Datalog的数据模型有点类似于triple-stroes模型 。 但不是将三元组写为(subject, predicate,object) , 而是将其写为predicate(subject, object) , 如下图:
本文插图
现在我们已经定义了数据 , 我们可以编写与之前相同的查询 , 如下图所示 。 它看起来与Cypher或SPARQL中的等效项有所不同 , 但请不要失望 。 Datalog是Prolog的子集 , 如果您学习过计算机科学 , 则可能会见过 。
本文插图
Cypher和SPARQL通过SELECT跳入 , 但是Datalog一次只迈出了一小步 。 我们定义了一些规则来告诉数据库新的predicate:在这里 , 我们定义了两个新的predicate , within_recursive和migrated 。 这些predicate不是存储在数据库中的三元组 , 而是取自数据或其他规则 。 规则可以引用其他规则 , 就像函数可以调用其他函数或递归调用自己一样 。 这样 , 可以一次构建一小块复杂的查询 。
在规则中 , 以大写字母开头的单词是变量 , 并且像Cypher和SPARQL中一样对predicate进行匹配 。 例如 , name(Location , Name)通过Location = namercia和Name="North America"这样的变量绑定来匹配name(namerica, 'North America) 。
推荐阅读
- 烹饪|锡纸烧烤技术,三款酱料配方是关键,制作好酱料锡纸类菜品轻松做
- 芯片|我国开始技术封锁!除量子密码以外,还有一项让美国憋屈十几年
- 上海嘉定|一项专利技术使车库车位增多10%,开发商们要坐不住了
- 上海市科学技术委员会|关于做好制订因公出国(境)培训中期规划的补充通知
- 闲情居|华为云手机发布,真正的5G手机,绕过光刻机的技术壁垒
- 一味宠爱|最全盘点卡中国脖子的35项技术,折射中国工业水平的真实现状
- 映璇汽车工作室|终于知道它为啥难卖了,看完长城WEY内部技术团队做的竞品分析
- Java|计算机专业的本科生,该选择学习Java技术体系还是.NET技术体系
- 人员|计划到期!立昂技术:部分董事、高管人员累计减持约47万股
- 南方PLUS|高新区面向全市征集30项以上技术需求,@佛山企业