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

【编者按】你会怎么选择数据库,是关系数据库、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 官方技术博客][15]。

本文转自 OneAPM 官方博客

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

[15]: http://blog.oneapm.com/?utm_source=Community&utm_medium=Article&utm_term=%E5%9C%A8%E9%80%89%E6%8B%A9%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E8%B7%AF%E4%B8%8A%EF%BC%8C%E6%88%91%E4%BB%AC%E9%81%87%E5%88%B0%E8%BF%87%E5%93%AA%E4%BA%9B%E5%9D%91%EF%BC%9F%EF%BC%881%EF%BC%89&utm_content=wk530-605&utm_campaign=AiJavaArti&from=jscljdvnqm【编者按】你会怎么选择数据库,是关系数据库、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 官方博客

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

时间: 2024-09-15 03:11:51

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

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

[编者按]你会怎么选择数据库,是关系数据库.XML 数据库.资源描述框架(RDF),还是图形数据库?本文的第1部分深入而生动地探讨了各种选择.在第2部分,将深入介绍使用 Neo4j 的注意点.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 过渡到 Neo4j 之后的经验和教训 下面介绍一些有关运行 Neo4j 的实用技巧: 1. 如果你是 Java 商城,请嵌入式地运行 Neo4j Neo4j 是本地 Java 平台,我们又是 Java 商城,用 Neo4j 相当合适.嵌入 Neo4j

MYSQL创建、删除和选择数据库

3.3 创建.删除和选择数据库    MySQL提供了三条数据库级的语句,它们分别是: CREATE DATABASE 用于创建数据库,DROP DATABASE 用于删除数据库,USE 用于选择缺省数据库.    1. CREATE DATABASE 语句    创建一个数据库很容易:只要在CREATE DATABASE 语句中给出其名称即可:    其中限制条件是该数据库的名称必须是合法的,该数据库必须不存在,并且您必须有足够的权限来创建它.    2. DROP DATABASE 语句 

sql2000备份的数据库还原到sql2005后,选择“数据库关系图”提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象的解决方法

sql2005|备份|对象|解决|数据|数据库  sql2000备份的数据库还原到sql2005后,选择"数据库关系图"提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用"数据库属性"对话框的"文件"页或  ALTER  AUTHORIZATION  语句将数据库所有者设置为有效登录名,然后再添加数据库关系图支持对象.       解决方法如下: 1.设置兼容级别为90(2005为90)  USE  [maste

期刊,报纸, 电子书,博硕文章, 专题数据库,每个滑块下面有个下拉列表框选择数据库的名称,下拉列表框后面有个文本框,和按钮,如果处理第二个滑块(报纸)的下拉框该

问题描述 问题:有5个滑块:期刊,报纸,电子书,博硕文章,专题数据库,每个滑块下面有个下拉列表框选择数据库的名称,下拉列表框后面有个文本框,和按钮,如果处理第二个滑块(报纸)的下拉框该如何处理了?谢谢1.<divclass="searchMain"style="display:block;"><divclass="searchBorder"><asp:DropDownListID="DropDownList

超越传统:NoSQL数据库大比拼 助你轻松选择数据库

在两三年前,选择数据库是一件非常容易的事.资金充足的企业会选择甲骨文数据库,使用微软产品的企业通常SQL Server,而预算不足企业则会选择MySQL.不过,如今的情况已经大不相同了. 最近两三年,许多企业都推出了他们自己的开源项目以用于存储信息.在许多案例中,这些项目抛弃了传统的关系型数据库准则.许多人将这些项目称为NoSQL,即"Not Only SQL"的缩写.虽然有些NoSQL数据库很简单,但是还有一部分NoSQL数据库极为复杂.不过,它们的目标都是通过替代关系型数据库,并实

选择数据库审计的三大理由

本文讲的是选择数据库审计的三大理由,黑格尔曾说,"存在即合理",用在数据安全领域,同样适用.一款数据库安全产品的诞生,必有其存在的合理之处.有数据显示,超过90%的数据都是从数据库中泄露出去的,因此,围绕核心数据安全防护,数据库安全产品首当其中. 从国内权威IT研究咨询机构CCW Research发布的2015年<数据库安全市场现状与发展趋势研究报告>报告中不难看到,数据库审计市场份额占据半壁江山,用户对数据库审计产品的认知度也比较高.那么,基于用户的需求,为什么要用这款产

ODOO中通过域名来自动选择数据库

安装了一个Odoo8的测试环境,给不同的客户建立了不同的数据库,为了不让客户访问时看到其它数据库选择,需要把选择数据库的功能隐藏起来.每个客户分配一个域名,用不同的域名来自动关联数据库.   在之前openerp7应用中,有人提到了通过修改源码的方式来实现,但实际体验不太好,后来看了odoo8中的代码,实际上系统本身就已经提供了类似的功能.       def db_filter(dbs, httprequest=None):       httprequest = httprequest or

MySQL选择数据库use与mysql_select_db使用详解

从命令提示符,选择MySQL数据库: 这是很简单的选择一个特定的数据库mysql>提示符.选择一个特定的数据库,可以使用SQL命令. 例子: 下面是一个例子,选择数据库称为 TUTORIALS:  代码如下 复制代码 [root@host]# mysql -u root -p Enter password:****** mysql> use TUTORIALS; Database changed mysql> 现在已经选择教程数据库教程数据库和所有的后续操作都将进行. 注: 所有的数据库

为 IBM PureApplication System 做好准备(三)选择数据库选项

简介 本系列的前几篇文章重点探讨了如何将应用程序部署到 IBM PureApplication System 上.部署应用程序后,您需要考虑应用程序如何存储和访问数据.关系数据库管理系统提供了一种标准的数据存储和检索接口.一个围绕数据访问的高级安全模型,以及对多个用户同时访问存储的数据的并发性支持. 如果使用了 PureApplication System,则可以使用一个企业级关系数据库管理系统 (RDBMS) 以 IBM DB2 软件的形式部署应用程序.本文将介绍 DB2.在 PureAppl