`
OneAPM_Official
  • 浏览: 25134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在选择数据库的路上,我们遇到过哪些坑?(1)

阅读更多

【编者按】你会怎么选择数据库,是关系数据库、XML 数据库、资源描述框架(RDF),还是图形数据库?这篇演讲深入而生动地探讨了各种选择。本文系国内ITOM 管理平台 OneAPM 编译呈现。

备注:在去年十月于旧金山举办的 GraphConnect 大会上,FactGem 公司首席技术官 Clark Richey发表了这篇演讲,解释了他决定选择 Neo4j 数据的原因。

我是 FactGem 的首席技术官 Clark Richey。FactGem 是一家小公司。

在这里我想说一说我们是怎么开始接触数据库技术的,然后我们做出了哪些改变,我们还需要做出哪些决定,哪些东西影响了我们的决策流程。我还会介绍我们调查研究过的各种数据库和技术,以及我们在使用 Neo4j 过程中发现的一些最佳做法和最差做法。

2014 年夏天之后,很多事情都发生了变化,我也会对我们在这段时期测试的各种数据库做出一个仔细的评估。

 

选择数据库

 

关系数据库

最初,我们的创始人准备把数千份不同的文件放在一起,用来执行有效搜索、制定业务决策、进行数据分析和创建数据可视化。

在选择数据库的路上,我们遇到过哪些坑?(1)

我们在研究过程中发现,关系数据库 (RDBMS) 并不适合我们。当然,我们的本能反应就是使用这种数据库,毕竟我们已经用了这么长时间。但关系数据库需要固定的架构,并且创建数据库时就要设置好这一固定架构。用户必须创建各种表,确定关系,然后创建 JOIN 连接:

在选择数据库的路上,我们遇到过哪些坑?(1)

而我们需要的是比关系模型更为灵活的数据库。

 

XML 数据库

我曾经接触过 NoSQL 数据库。那时我在 MarkLogic 公司工作。MarkLogic 是一家企业级模式自由型 XML 数据库公司,该公司还存储文档并提供 JSON 格式。这种数据库无论在上传信息还是执行搜索时,速度都较快,并且模式自由。

在选择数据库的路上,我们遇到过哪些坑?(1)

我们确实从这一初始概念点(POC)学到了一些东西,但顾名思义,概念点本身就是一种不够全面的看法。我们依次对这一看法的各个子集进行测试,然后选取部分样本集,发现能够进行快速搜索和导航。

我们认识到,文档之间的隐含信息比存储在每个文档内的信息要有意思得多。于是我们试着弄清楚能不能创建一个数据库好让我们利用这些关系。

我们再次将信息建模,形成文档,后者非常适合我们的数据集。但使用文档数据库时,用户真正关心的当然是文档了。因此,尽管我们可以进行 JOIN 连接,但仍然不适用于大型数据集。

我们可以在文档内进行快速搜索,但不能对文档之间的关系进行快速搜索。对于这项操作而言,这一数据库并不合适。

 

资源描述框架 (RDF) / 三元组存储

为了解决问题,MarkLogic 把我们的所有文档从 XML 迁移到资源描述框架 (RDF),这一框架又被称为三元组存储。这无疑是个大手笔,也是非常与众不同的对待数据的方式,我们决定,就是它了。

这不算太难,因为我们很小心地从架构的剩余部分解耦了持久层。最后花了大约两个月时间,然后我们终于能在不影响应用程序剩余部分的情况下进行迁移。

我们为什么选择资源描述框架?因为它是专为连接带有统一资源标识符的信息而设计的,还拥有一种叫做 SPARQL 的标准化查询语言。

简而言之,资源描述框架是有关主/谓/宾关系的,从下面看得出来,其模型非常简单:

在选择数据库的路上,我们遇到过哪些坑?(1)

下面是资源描述框架概念的简单象形图:

在选择数据库的路上,我们遇到过哪些坑?(1)

如果我想说 Clark 认识 John Forrest,那么 Clark 就是资源。资源具有名字、姓氏和类型等属性,也具有关系。下面这些资源描述框架的三元组可以体现这一示意图:

在选择数据库的路上,我们遇到过哪些坑?(1)

我们的数据库确实很给力,总体来说我们也相当满意。利用资源描述框架,我们不仅重建了整个概念点,还实现了对数据库的更多操作 —— 包括探索各种关系。虽然在各个机构和行业之间进行大范围的数据分享时非常方便,但这并不是我们使用数据库的主要目的。

资源描述框架非常冗长,它是一种基于非属性的图形。由于所有内容都表现为节点,要想进行复杂的关系查询,必须先到达目的地然后再一同返回,这给我们带来了一些性能问题。虽然资源描述框架没有成为我们的最终选择,但它确实帮我们看清了专注于数据关系的希望。

作为一家小型初创公司,在这么短的时间里经历了这么多种数据库,我们有些担心。即使这样,我们仍然明白,从一开始就要选择合适的数据库是多么的重要,于是我们顶着重重压力,在没有做好充分的数据库工作的情况下,我们决定尝试图形数据库。

 

改变从这里开始:图形数据库

最初我们认为图形数据库和资源描述框架一个样。但我们知道,要描述两个人之间的关系,用资源描述框架太复杂了。我们希望能有一个非常非常简单的工具,让我们能够给节点分配属性,然后我们在一个属性图形模型里找到了以下内容:

在选择数据库的路上,我们遇到过哪些坑?(1)

于是我们又明白了,我们不能使用关系数据库,因为它们在关系上的表现不够出色。JOIN 连接、外键和索引既不真实,也不具体;它们只是我们画在纸上用来方便理解的图案。反过来说,在图形数据库中,关系被表达成具体实体。

 

TitanDB 数据库

我们先研究了 TitanDB,它各项强大的功能和极佳的可扩展性一开始让我们非常振奋。可惜的是,TitanDB 的启动和维护都非常复杂,必须得从 Cassandra 或 HBase 后台运行。

我们关心的另一个功能是最终一致存储,它并不符合 ACID 原理。这表示,如果我们要长时间运行大型图形数据库,最后可能会出现不一致现象。

TitanDB 确实提供了一个基本可长期运行的流程,能够始终如一地穿行整个图形,以期探测和修复不一致问题。除了这些不一致之外,TitanDB 还可以作为不基于图形的本地存储之上的层。

 

OrientDB 数据库

接下来我们又了解了 OrientDB。OrientDB 启动起来似乎简单得多,还具备大量针对文档的功能。但从社区的评论来看,性能和可扩展性是个问题。另外,OrientDB 把自己宣传成多模式数据库 ——图形和 SQL。这种宣传缺乏对纯图形操作的针对性,让我很是忧心,我们不仅想要做图形,还要做好图形。

 

发现 Neo4j

然后我们发现了 Neo4j。Neo4j 可高度扩展,对节点、关系或索引的数量没有限制。同时 Neo4j 入门也相当简单,这对我们是很大的诱惑;在使用第三个数据库时,必须得迅速投入运行。

性能表现极佳,扩增也非常广泛,并且只专注于图形用例。Titan 确实提供映射(作为本地节点类型)支持,但我们知道,即使没有这一支持我们也可以继续下去。

总的来说,我们之所以选择 Neo4j,有以下原因:

在选择数据库的路上,我们遇到过哪些坑?(1)

我们使用 Neo4j 企业版已有大约 16 个月,体验一直非常美好。Neo4j 易于使用,设置和维护也很简单,实现甚至超出了我们的预期。它让我们超越了我们的概念点,非常非常迅速地投入运行和构建新事物。

在本文的第二部分,将详细介绍使用 Neo4j 之后,作者学习到的经验教训,敬请期待。

本文系 OneAPM 工程师整理呈现。OneAPM 能为您提供端到端的应用性能解决方案,我们支持所有常见的框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,性能监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

原文地址:https://dzone.com/articles/from-good-to-graph-choosing-the-right-database

+

 

分享到:
评论

相关推荐

    物联网数据库如何设计?iot数据库和传统数据库有什么区别?

    本文中主要介绍了传统数据库没有物联网的速度基因,时序数据库的数据存储设计,时序数据库编程语言之争,时序数据库整合趋势明显等相关内容。本文来自csdn,由火龙果软件Anna编辑、推荐。而且“增删改查”是传统...

    海大数据库原理综合实验六

    (2) 选择的数据库应用系统应该规模适中,不宜太大太复杂,可能做不完;也不宜太小太简单,甚至仅有三两个表组成。 (3) 要设计良好的数据库完整性约束。 (4) 思考题:数据库设计通常由哪些辅助工具?各有哪些优...

    读写分离有哪些坑?.pdf

    在实际应用中,由于网络延迟、硬件性能限制等因素,主数据库与从数据库之间的同步可能存在延迟,导致从数据库上的数据不是最新的状态。这种情况被称为“过期读”。 #### 五、处理过期读的方法 1. **强制走主库方案...

    mysql数据库详解.pdf

    1、什么是数据库? 数据库:database,是存储数据的仓库。 数据库:高效的存储和处理数据的介质(介质主要有两种:磁盘和内存) 2、数据库的分类: 数据库基于存储介质的不同进行了分类:关系型数据库(SQL)和非...

    abap逻辑数据库ABAP数据库操作

    标题和描述所涉及的知识点主要集中在ABAP语言在SAP系统中对数据库的操作和管理。由于这部分内容比较专业,我将尽量详细地阐述ABAP(Advanced Business Application Programming)逻辑数据库和数据库操作的概念和用法...

    ZKtime5.0考勤管理系统sql 数据库建立及连接方法.pdf

    在“对象资源管理器”中,可以通过右键点击“数据库”,然后选择“新建数据库”来开始创建一个新的数据库。 在弹出的新建数据库对话框中,您需要为新数据库命名。数据库名称可以根据实际需求自定义,比如可以命名为...

    Nacos适配达梦数据库

    本主题将深入探讨Nacos如何与达梦数据库进行适配,以及在实际应用中可能遇到的问题和解决方案。 达梦数据库是中国自主研发的一款高性能、高可用性的关系型数据库管理系统,广泛应用于政府、金融、电信等领域。它...

    系统登陆遇到数据库不可信

    在IT领域,尤其是数据库管理中,遇到"数据库不可信"的问题是常见的挑战。这种情况通常发生在尝试使用低版本的数据库备份文件恢复到高版本数据库系统时。以下是对这个问题的详细分析和解决步骤。 首先,问题场景描述...

    数据库连接方式1

    在本文中,我们将详细讨论如何在新的计算机上配置数据库连接,以确保能够顺利访问存储在"用户信息.mdb"文件中的数据,这个过程涉及到用户信息.udl文件的使用。 首先,"用户信息.udl"文件是数据库连接字符串的载体,...

    如何落地数据库智能化运维?.md

    .md笔记文件,根据周亮在2018年5月12日【第九届中国数据库技术大会(DTCC)】现场演讲内容整理而成。 对重点关键词做了加粗处理,标题后面用圆括号()做了理解归纳。其余各处保持原文不变。供运维人员方便参考借鉴。 ...

    centos7_神通数据库安装文档1

    【神通数据库在CentOS7上的安装指南】 神通数据库是一款企业级的关系型数据库管理系统,它提供了高效、稳定的数据存储和管理解决方案。本指南将详细介绍在CentOS7操作系统上安装神通数据库的过程,包括图形界面安装...

    未能在 sysindexes 中找到数据库 ID 12 中对象 ID 1 的索引 ID 1 对应的行。请对 sysindexes 运行 DBCC CHECKTABLE。

    在进行数据库操作的过程中,可能会遇到这样的错误信息:“未能在 `sysindexes` 中找到数据库 ID 12 中对象 ID 1 的索引 ID 1 对应的行。请对 `sysindexes` 运行 `DBCC CHECKTABLE`。” 这一错误通常出现在 SQL ...

    VC SQL数据库提取器(备份、还原、分离数据库).rar

    还原数据库时,在“选择数据库”下拉列表中选择要还原的数据库,然后单击工具栏中的还原数据库按钮,选择备份文件,即可还原该数据库。  附加和分离数据库:单击附加数据库按钮,选择需要附加的数据库即可。  分离...

    Sybase12.5 数据库创建与导入数据库

    2. 在左侧视图中右键单击 ptms(sa),选择 Databases,然后点击 Add 创建一个新的数据库,输入数据库名称 ptms,选择数据库所有者 sybase/sybase,具备全部角色与权限。 3. 在 Database Devices 中点击 Add,选择 ...

    java配置数据库jar包操作

    在 Java 项目中,我们需要将 MySQL 的 Jar 包导入到项目中,以便使用 JDBC 连接数据库。MySQL 的 Jar 包提供了连接 MySQL 数据库的驱动程序,可以让我们使用 JDBC 来操作数据库。 如何在 Eclipse 中导入 Jar 包? ...

    DB2数据库安装、数据库创建步骤

    1. 在另外一台电脑上安装客户端。 2. 打开控制中心,主机名选择 z-server。 3. 点击搜索,找到新建数据库 DB2。 4. 点击确定,数据库连接成功。 五、解决常见错误 1. SQL1032N 错误: License 到期了,解决方法是...

    navicatepremuim连接sqlserver数据库遇到问题及解决方法

    但是在使用 Navicat Premium 连接 SQL Server 数据库时,可能会遇到一些问题,本文将详细介绍这些问题及解决方法。 首先,在安装 Navicat Premium 之前,需要安装 SQL Server Native Client,否则 Navicat Premium ...

    Oracle中使用DBCA创建数据库[整理].pdf

    在本节中,我们将详细介绍使用 DBCA 创建数据库的步骤和过程。 选择 DBCA 程序 在开始创建数据库之前,需要选择 DBCA 程序模块。DBCA 程序模块是 Oracle 的一部分,用于数据库的配置和管理。选择 DBCA 程序模块后...

    图书馆数据库分类介绍.doc

    图书馆数据库分类介绍

Global site tag (gtag.js) - Google Analytics