首页 > 数据库 >图数据库入门教程(一)简单理解图数据库

图数据库入门教程(一)简单理解图数据库

时间:2022-08-29 10:24:27浏览次数:53  
标签:name comp 数据库 入门教程 id 华为 理解 company

以下内容是个人的理解,一家之言,可能误导,但能入门

为什么会有图数据库?

作为研发,我们接触最多的当属关系型数据库:Mysql、Oracle,还有一些非关系型数据库:MongoDB、Redis等,再广泛一些我们还接触过搜索引擎:elasticsearch、solr等。

我们知道,每种技术都有它适用的场景,Mysql擅长处理一致性要求高长期持久化并有简单查询的场景,Redis擅长处理读多写少,并发量大,数据准确性要求没那么高的场景,elasticsearch擅长处理全文查找的场景。那图数据库解决的什么场景?-复杂的数据关系查询。

img

上图是thnkerpop官网列出的一个关系查询的对比,左侧是图数据库的查询,右侧是mysql的查询。抛开具体的业务,只看上面的语句我们会发现mysql的查询语法复杂,关联表多,性能自不必说,并不是Mysql不好用,而是这不是它擅长处理的场景,就好比它不擅长全文查找一样。而图数据库恰恰是为这种场景而生的。

这个一个图数据库厂商用传统关系型数据库 MySQL 跟图数据库 Neo4j 的查询性能对比 ,在一个包含 100 万人、每人约有 50 个朋友的社交网络里找最大深度为 5 的朋友的朋友,实验结果表明多跳查询中图数据库优势明显(见图 2)。

img

图 1

img

一个场景了解图数据库

我们分别用mysql和图数据库进行建模,进行一个关系查询,以更好的了解它们的区别。

我们有一些企业:华为、苹果、OPPO、VIVO、小米、三星等,他们之间的关联关系是:竞争

用mysql进行建模

  1. 企业表
字段 备注
id
company_name 企业名称

2.竞争关系表

字段 备注
source_company_id a公司
target_company_id a公司竞争的公司id

插入数据,大概关系是这样

img

  1. 查询华为的竞争对手,你能写出sql
SELECT *
FROM company
WHERE id IN (
	SELECT target_company_id
	FROM comp_rel, company
	WHERE comp_rel.`source_company_id` = company.`id`
		AND company.`company_name` = '华为'
)
  1. 查询华为竞争对手的竞争对手,即二级竞争对手,你思索再三,写了出来
SELECT company.company_name
FROM comp_rel, company
WHERE comp_rel.`target_company_id` = company.id
	AND `source_company_id` IN (
		SELECT id
		FROM company
		WHERE id IN (
			SELECT target_company_id
			FROM comp_rel, company
			WHERE comp_rel.`source_company_id` = company.`id`
				AND company.`company_name` = '华为'
		)
	)
  1. 查询华为的一级和二级竞争对手
  2. 查询华为的三级竞争对手
  3. ...

可以看出来,sql不好写,即使写出来,也不敢上线

标签:name,comp,数据库,入门教程,id,华为,理解,company
From: https://www.cnblogs.com/roylee666/p/16634973.html

相关文章

  • 图数据库入门教程(二)认识tinkerpop与gremlin
    上一篇文章我们对图数据库有了一个简单的理解,对于关系的计算优雅而快速,适用与一些关系计算的场景,比如社交网络、金融反欺诈、商机发现、智能推荐等,想了解更多可以看一下阿......
  • mysql导入.idb文件进行修复数据库
    背景:数据库在运行过程中出现了问题,需要根据*.idb文件进行找回数据操作步骤:1)先创建一个同样数据格式的表(之前存在的话备份删除,最好先在新的数据库中走一遍流程)--......
  • Golang 中反射的应用与理解
    Golang中反射的应用与理解https://mp.weixin.qq.com/s/TmzV2VTfkE8of2_zuKa0gAGolang中反射的应用与理解原创 赵燕辉 字节跳动技术团队 2022-08-2312:00 发表于......
  • 10 分钟彻底理解 Redis 的持久化和主从复制
    在这篇文章,一起了解一下其中一个非常重要的内容:Redis的持久化机制。什么是Redis持久化?Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所......
  • 三丰主机数据库对外使用操作
    设备mysql数据库对外使用的方法:一、找到使用电脑的互联网IP二、进行界面设置  通过以上设置,就可以正常访问数据库了......
  • 尝试理解Linux容器进程与宿主机共享内核到底是什么意思?
    背景近期接触容器技术时,经常看到各类比较容器与虚拟机区别的文章中会提到:容器是共享宿主机的内核,而虚拟机则是拥有自己独立的内核,所以不可能在Linux上用容器运行windows,但......
  • Flyway管理数据库MySQL5.7入坑记录(二)
    在成功加入Flyway的Gradle的插件后,在Gradle的任务中选择flyway->flywayMigrate,进行数据库迁移操作,于是出现下面的问题。第二坑:执行flyMigrate出现错误信息:flywayNodatab......
  • 8/28 深入理解计算机系统笔记 内存映射
    9.8内存映射定义:将一个虚拟内存区域和一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容的过程被称为内存映射。虚拟内存区域可以映射到下面两种类型的对象中的......
  • 8/28 深入理解计算机系统笔记 动态内存分配
    9.9动态内存分配动态内存分配器维护一个进程的虚拟内存区域,称为堆。对于每个进程,内核维护一个变量brk,它指向堆的顶部。分配器将堆视做一组不同大小的块的集合来维护。......
  • 【.Net6】简单使用EF进行数据库迁移
    CodeFirstCodeFirst是根据代码中定义的模型,映射到数据库中,下面以一个控制台项目为例,简单描述其方法。//首先需要2个Nuget包:Microsoft.EntityFrameworkCore.SqlServer /......