【编者按】你会怎么选择数据库,是关系数据库、XML 数据库、资源描述框架(RDF),还是图形数据库?这篇演讲深入而生动地探讨了各种选择。本文系国内ITOM 管理平台 OneAPM 编译呈现。
备注:在去年十月于旧金山举办的 GraphConnect 大会上,FactGem 公司首席技术官 Clark Richey发表了这篇演讲,解释了他决定选择 Neo4j 数据的原因。
我是 FactGem 的首席技术官 Clark Richey。FactGem 是一家小公司。
在这里我想说一说我们是怎么开始接触数据库技术的,然后我们做出了哪些改变,我们还需要做出哪些决定,哪些东西影响了我们的决策流程。我还会介绍我们调查研究过的各种数据库和技术,以及我们在使用 Neo4j 过程中发现的一些最佳做法和最差做法。
2014 年夏天之后,很多事情都发生了变化,我也会对我们在这段时期测试的各种数据库做出一个仔细的评估。
选择数据库
关系数据库
最初,我们的创始人准备把数千份不同的文件放在一起,用来执行有效搜索、制定业务决策、进行数据分析和创建数据可视化。
我们在研究过程中发现,关系数据库 (RDBMS) 并不适合我们。当然,我们的本能反应就是使用这种数据库,毕竟我们已经用了这么长时间。但关系数据库需要固定的架构,并且创建数据库时就要设置好这一固定架构。用户必须创建各种表,确定关系,然后创建 JOIN 连接:
而我们需要的是比关系模型更为灵活的数据库。
XML 数据库
我曾经接触过 NoSQL 数据库。那时我在 MarkLogic 公司工作。MarkLogic 是一家企业级模式自由型 XML 数据库公司,该公司还存储文档并提供 JSON 格式。这种数据库无论在上传信息还是执行搜索时,速度都较快,并且模式自由。
我们确实从这一初始概念点(POC)学到了一些东西,但顾名思义,概念点本身就是一种不够全面的看法。我们依次对这一看法的各个子集进行测试,然后选取部分样本集,发现能够进行快速搜索和导航。
我们认识到,文档之间的隐含信息比存储在每个文档内的信息要有意思得多。于是我们试着弄清楚能不能创建一个数据库好让我们利用这些关系。
我们再次将信息建模,形成文档,后者非常适合我们的数据集。但使用文档数据库时,用户真正关心的当然是文档了。因此,尽管我们可以进行 JOIN 连接,但仍然不适用于大型数据集。
我们可以在文档内进行快速搜索,但不能对文档之间的关系进行快速搜索。对于这项操作而言,这一数据库并不合适。
资源描述框架 (RDF) / 三元组存储
为了解决问题,MarkLogic 把我们的所有文档从 XML 迁移到资源描述框架 (RDF),这一框架又被称为三元组存储。这无疑是个大手笔,也是非常与众不同的对待数据的方式,我们决定,就是它了。
这不算太难,因为我们很小心地从架构的剩余部分解耦了持久层。最后花了大约两个月时间,然后我们终于能在不影响应用程序剩余部分的情况下进行迁移。
我们为什么选择资源描述框架?因为它是专为连接带有统一资源标识符的信息而设计的,还拥有一种叫做 SPARQL 的标准化查询语言。
简而言之,资源描述框架是有关主/谓/宾关系的,从下面看得出来,其模型非常简单:
下面是资源描述框架概念的简单象形图:
如果我想说 Clark 认识 John Forrest,那么 Clark 就是资源。资源具有名字、姓氏和类型等属性,也具有关系。下面这些资源描述框架的三元组可以体现这一示意图:
我们的数据库确实很给力,总体来说我们也相当满意。利用资源描述框架,我们不仅重建了整个概念点,还实现了对数据库的更多操作 —— 包括探索各种关系。虽然在各个机构和行业之间进行大范围的数据分享时非常方便,但这并不是我们使用数据库的主要目的。
资源描述框架非常冗长,它是一种基于非属性的图形。由于所有内容都表现为节点,要想进行复杂的关系查询,必须先到达目的地然后再一同返回,这给我们带来了一些性能问题。虽然资源描述框架没有成为我们的最终选择,但它确实帮我们看清了专注于数据关系的希望。
作为一家小型初创公司,在这么短的时间里经历了这么多种数据库,我们有些担心。即使这样,我们仍然明白,从一开始就要选择合适的数据库是多么的重要,于是我们顶着重重压力,在没有做好充分的数据库工作的情况下,我们决定尝试图形数据库。
改变从这里开始:图形数据库
最初我们认为图形数据库和资源描述框架一个样。但我们知道,要描述两个人之间的关系,用资源描述框架太复杂了。我们希望能有一个非常非常简单的工具,让我们能够给节点分配属性,然后我们在一个属性图形模型里找到了以下内容:
于是我们又明白了,我们不能使用关系数据库,因为它们在关系上的表现不够出色。JOIN 连接、外键和索引既不真实,也不具体;它们只是我们画在纸上用来方便理解的图案。反过来说,在图形数据库中,关系被表达成具体实体。
TitanDB 数据库
我们先研究了 TitanDB,它各项强大的功能和极佳的可扩展性一开始让我们非常振奋。可惜的是,TitanDB 的启动和维护都非常复杂,必须得从 Cassandra 或 HBase 后台运行。
我们关心的另一个功能是最终一致存储,它并不符合 ACID 原理。这表示,如果我们要长时间运行大型图形数据库,最后可能会出现不一致现象。
TitanDB 确实提供了一个基本可长期运行的流程,能够始终如一地穿行整个图形,以期探测和修复不一致问题。除了这些不一致之外,TitanDB 还可以作为不基于图形的本地存储之上的层。
OrientDB 数据库
接下来我们又了解了 OrientDB。OrientDB 启动起来似乎简单得多,还具备大量针对文档的功能。但从社区的评论来看,性能和可扩展性是个问题。另外,OrientDB 把自己宣传成多模式数据库 ——图形和 SQL。这种宣传缺乏对纯图形操作的针对性,让我很是忧心,我们不仅想要做图形,还要做好图形。
发现 Neo4j
然后我们发现了 Neo4j。Neo4j 可高度扩展,对节点、关系或索引的数量没有限制。同时 Neo4j 入门也相当简单,这对我们是很大的诱惑;在使用第三个数据库时,必须得迅速投入运行。
性能表现极佳,扩增也非常广泛,并且只专注于图形用例。Titan 确实提供映射(作为本地节点类型)支持,但我们知道,即使没有这一支持我们也可以继续下去。
总的来说,我们之所以选择 Neo4j,有以下原因:
我们使用 Neo4j 企业版已有大约 16 个月,体验一直非常美好。Neo4j 易于使用,设置和维护也很简单,实现甚至超出了我们的预期。它让我们超越了我们的概念点,非常非常迅速地投入运行和构建新事物。
在本文的第二部分,将详细介绍使用 Neo4j 之后,作者学习到的经验教训,敬请期待。
本文系 OneAPM 工程师整理呈现。OneAPM 能为您提供端到端的应用性能解决方案,我们支持所有常见的框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,性能监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客
原文地址:https://dzone.com/articles/from-good-to-graph-choosing-the-right-database
相关推荐
在实际应用中,由于网络延迟、硬件性能限制等因素,主数据库与从数据库之间的同步可能存在延迟,导致从数据库上的数据不是最新的状态。这种情况被称为“过期读”。 #### 五、处理过期读的方法 1. **强制走主库方案...
1、什么是数据库? 数据库:database,是存储数据的仓库。 数据库:高效的存储和处理数据的介质(介质主要有两种:磁盘和内存) 2、数据库的分类: 数据库基于存储介质的不同进行了分类:关系型数据库(SQL)和非...
标题和描述所涉及的知识点主要集中在ABAP语言在SAP系统中对数据库的操作和管理。由于这部分内容比较专业,我将尽量详细地阐述ABAP(Advanced Business Application Programming)逻辑数据库和数据库操作的概念和用法...
趣说 | 数据库和缓存如何保证一致性?.doc
本主题将深入探讨Nacos如何与达梦数据库进行适配,以及在实际应用中可能遇到的问题和解决方案。 达梦数据库是中国自主研发的一款高性能、高可用性的关系型数据库管理系统,广泛应用于政府、金融、电信等领域。它...
在IT领域,尤其是数据库管理中,遇到"数据库不可信"的问题是常见的挑战。这种情况通常发生在尝试使用低版本的数据库备份文件恢复到高版本数据库系统时。以下是对这个问题的详细分析和解决步骤。 首先,问题场景描述...
在本文中,我们将详细介绍神通数据库在Windows系统上的安装过程,包括下载、安装、创建数据库、配置参数、启动实例以及连接测试等关键步骤。 1. **下载说明** 神通数据库的最新版本为7.0.8,可在官方网站...
.md笔记文件,根据周亮在2018年5月12日【第九届中国数据库技术大会(DTCC)】现场演讲内容整理而成。 对重点关键词做了加粗处理,标题后面用圆括号()做了理解归纳。其余各处保持原文不变。供运维人员方便参考借鉴。 ...
在本资源中,我们将通过一系列选择题来考察数据库原理的基础知识。 1. 数据库组件 在数据库系统中,有多个组件共同构成了数据库。这些组件包括数据、数据库管理系统(DBMS)、数据库管理员、应用程序员等。在E-...
数据独立性是指应用程序与数据库的逻辑结构之间的一种独立性,分为逻辑数据独立性和物理数据独立性。逻辑数据独立性是指数据库的逻辑结构发生变化时,不影响应用程序的运行,因为应用程序是基于概念模式编写的,而非...
数据库选择判断数据库选择判断
但是在使用 Navicat Premium 连接 SQL Server 数据库时,可能会遇到一些问题,本文将详细介绍这些问题及解决方法。 首先,在安装 Navicat Premium 之前,需要安装 SQL Server Native Client,否则 Navicat Premium ...
在本节中,我们将详细介绍使用 DBCA 创建数据库的步骤和过程。 选择 DBCA 程序 在开始创建数据库之前,需要选择 DBCA 程序模块。DBCA 程序模块是 Oracle 的一部分,用于数据库的配置和管理。选择 DBCA 程序模块后...
2. 在新数据库中选择“还原数据库”,从备份文件还原数据,强制在现有数据库上还原。 **第四步:DTS数据传输** 1. 使用企业管理器的DTS导入/导出工具,选择本地数据库作为数据源。 2. 连接到万网服务器,输入数据库...
6. **异常处理与故障排查**:在实际使用过程中,可能会遇到与数据库相关的异常,比如连接超时、SQL错误等。此时,需要根据达梦数据库的错误信息进行问题定位和解决。 总之,适配XXL-JOB与达梦数据库涉及数据库脚本...
由于各种原因,大型机已经不再是多数企业的可选项,而采用 x86 架构的通用设备在单机性能和可靠性上都不能满足要求,因此分布式架构就成为了一个必然的选择。 分布式数据库的应用非常广泛,许多互联网公司和传统的...
1.数据库有哪些?。单机: ACCESS SQLITE EDB QE(内存操作的数据库)。网络: MySQL PHP+MySQL 。2.EDB的优势。1.EDB 他是易语言自带的数据库格式。2.EDB 便于操作。3.EDB 相当于一张表。4.EDB 不支持SQL语句 SQL语句:...
(查找数据库名在文章中间,自己往下翻吧,不单拎出来了) vs自带数据库sql server的中文插入乱码问题: 如图所示,我插入表的中文变成了问号 解决思路: 1、是我的表建立时字段类型不支持中文? 2、数据库的排序...
通过本章的学习,我们可以了解到 MySQL 数据库的基础知识,包括数据库管理系统的数学模型、关系数据库管理系统、SQL 语言的特点、MySQL 的特点、数据库表与电子表格的区别、数据库设计辅助工具有哪些等。 1....