图数据库-复杂关系型数据的查询优化

一、背景

    关系型数据库在处理以下几个问题时往往会显得捉襟见肘:

  • 关联查询中涉及到的关系可能会经常性的变化、增加、修改、或者删除。更新其中一种关系时需要及时更新与之相关的其他关系,需要消耗额外的人力去记录所有的关联关系,以保证状态数据更新时不出错。例如,某个落地页实体ID与文案实体ID分别对应于同一个广告主实体ID,当修改了广告主实体表中的ID后,未同时更新落地页实体与文案实体中对应的广告主ID,这会导致多种关系发生断链
  • 涉及到需要拼接合并多个实体数据的时候。相当于需要合并多个请求的响应结果,增大了网络请求压力
  • 知识图谱型数据挖掘与展示。例如查询投放某个物料的全部广告主时,若采用关系型数据库,group的性能会随着结果的数量增大而降低

二、图数据库

1. 图数据库

    基于图论实现的一种新型noSql数据库,其数据库存储结构和数据的查询方式都是以图论为基础的,图论中图的基本元素为节点和边,在图数据库中对应的就是节点和关系。
    常用图数据库

2. 图论

    以图为研究对象,图由若干给定的点及连接两点的线所组成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。

3. 应用场景

    图数据库适用场景:

  • 辅助搜索:如社交网络,类似facebook兴趣图谱可以辅助推荐一些兴趣相似或者有联系的用户
  • 辅助问答:如知识问答,通过将知识建设成图的形式,可以把问题回答的更准确和可靠
  • 辅助决策:通过结合图相关的算法,如PageRank、mcl、betweenness等可以通过图数据库的优势挖掘或者推理出一些信息,辅助业务决策

    图数据库不适用场景:

  • 统计、报表分析
  • 不适合写多读少的场景。在写入或者删除时候,需要维护关系的链接指针。因此大量而频繁的写操作,在性能上是一个考验。

三、Neo4j图数据库实践用例

1. 基本元素与概念
  • 节点(node):表示一个实体记录,类似于关系数据库中的一条记录,一个节点包含多个属性和标签
  • 关系(relationship):用于将节点关联起来构成图,关系也称为图论的边(edge)
  • 属性(property):节点和关系都可以有多个属性,属性由键值对组成,类似于Java中哈希表
  • 标签(label):指示一组拥有相同属性的节点,但不强制要求相同,一个节点可有多个标签
  • 路径(path):任意两个节点都存在由关系组成的路径,路径有长短之分
2. 节点创建
# 创建一个有两个属性(name="tuing big movie",time=100)、一个标签(Movie )的节点
CREATE (:Movie{
   name:"tuing big movie", time:100})
3. 节点查询
MATCH  (a:Movie{
   name:"tuing big movie", time:100}) re
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值