SQL或NoSQL的选择:7个对比指标

使用NoSQL数据库有众多好处,但也经常面临两个挑战:

  • 如何转换RDBMS( Relational Database Management System ) Schema到无Schema文档模型。
  • 需要学习新的 API/Query 以访问数据。

NoSQL缩写代表“不仅仅 SQL”,但是经常被误解为“不是SQL”。因此,为了使用NoSQL数据库,组织将不仅需要将他们的关系数据模型转换为文档模型,而且还需要进行NoSQL数据库API的培训。

实际上,NoSQL从未放弃过最流行的数据库数据访问。许多NoSQL供应商仍在使用SQL的变体,例如: Cosmos DBCassandra CQLElasticsearch SQLCockroach Labs。即使使用 MongoDB查询 语言,您仍会发现它基于select-join-project构造,这是SQL中使用的关系代数的基础。

NoSQL领域中的一个数据库公司 Couchbase 及其 N1QL 查询语言,就为NoSQL数据库带来SQL般的查询体验。虽然Couchbase以JSON格式存储数据,但它支持的数据模型可以是关系结构或分层结构,由于其schema灵活性和可扩展性,经常在基于文档的模型中使用。因为Couchbase提供了类似SQL的查询语言-N1QL,它扩展了SQL语言以允许用户操纵文档模型的层次结构。所有这些都是基于具有 key-value APIs 的Couchbase高性能数据服务构建的 。

在当今的NoSQL数据库市场中有很多选择,组织在享受NoSQL带来的优势时,同时也带来许多挑战。

  • 对结构化和非结构化数据的支持
  • 商业硬件的水平可扩展性
  • 易于管理 schema 演变
  • 数据库供应商的选择

为了帮助组织做出决定,Altoros(一家致力于帮助公司从旧版IT系统过渡到未来的公司)发布了查询比较报告,以比较当今最受欢迎的数据库中的查询语言。它选择MySQL / SQLCouchbase N1QLMongoDB query语言对比。使用以下条件对每种查询语言的实现进行了评估,以满足不同的查询情景。

  1. Simplicity (简洁性)
  2. Readability (可读性)
  3. Expressiveness(表现力)
  4. Flexibility(灵活性)
  5. Skills availability(技能专长)
  6. Line of codes(代码行数)
  7. The number of application to server trips(应用程序请求服务器的次数)

可以在此 GitHub找到数据库对比的示例,这些示例可以帮助部署和运行此报告中的所有情景。

对比方法

该报告的目的是从传统RDBMS应用程序的角度比较查询语言。为此,它选择了:

活动管理应用程序模型,通常在管理销售,服务和营销活动的大多数CRM系统应用。报告包括用于MySQL的关系模型和用于Couchbase和MongoDB的文档数据库模型。

它还使用了这些系统的大多数用户可以识别的一组查询情景。

情境(Scenario) 描述
1.客户会议报告 为了准备下周要参加的客户会议,我想获得所有参加会议的客户及其联系人的列表。
2.区域销售地区报告 我是C-Suite卖方区域的区域销售经理。我想获取分配给该地区的所有帐户以及团队成员的账号。
3.客户十大行业 根据2018年销售活动,从客户中确定十大行业。
4.销售组织 我想弄清楚19财年第三季度,花了多少时间与团队成员进行交谈。
5.销售活动报告 在2018年的一个月内,与销售相关的任务数量变化趋势。
6.销售团队技能 当前销售组织中的销售团队技能/角色分析
7.客户互动报告 查看我们在19财年第四季度与客户进行的所有演示,并详细说明在每个客户上花费的时间以及会议的有效性。
8.分析消费者关于酒店的评论 调用Google自然语言API对所有评论进行排序
9.通过文本搜索识别客户会议 确定讨论了特定主题的客户帐户及其相关联系人。搜索条件可以部分或全部包括以下信息:会议标题,会议日期范围,客户联系详细信息,销售团队成员详细信息(参与者)和客户名称。

对于每种情况,报告均提供以SQL,N1QL和MongoDB查询语言编写的相应解决情景,然后提供每种解决情景的评估。

对比结果

该报告以MySQL-SQL为参考,根据许多标准评估了Couchbase N1QL和MongoDB查询语言。

备注:

  1. N1QL与SQL非常相似,并且始终给它比MongoDB查询语言更高的评分。
  2. 情景3的示例代码显示,对于简单查询,这三种查询语言相对相似,并且具有相似的评分。差异出现在JOIN和Aggregations查询场景中。

代码行数

该图表显示了每个查询的代码行数。尽管此度量标准可能并不准确,因为所有查询语言都有自己推荐的格式,但它至少说明了基本差异。

  • N1QL查询语言的代码行数与SQL大致相同。
  • MongoDB查询语言始终具有更多的代码行。
  • 对于场景7,必须为MongoDB查询语言编写347行,而N1QL为21行。这个差异,反映了MongoDB查询在复杂聚合和通用表达式(CTE)方面的局限性,在过去的几十年中,SQL(现在是N1QL)一直是关系数据库技术的主要优势。

请注意,这是Altoros团队提供的MongoDB查询解决方式。与任何实现一样,可能还有其他方式编写Mongo代码。

客户端向服务器的请求数

该图显示了应用程序必须提交给数据库服务器的次数。

备注:

  1. 在大多数情况下,SQL/N1QL只需要向服务器提交一个查询,而MongoDB需要查询多个部分,因此需要多次访问后端服务器。这是由于SQL/N1QL的表现力所致,其中应用程序开发人员只需要声明所需的输出,由服务器来处理并返回结果。
  2. 由于缺乏复杂聚合的支持,MongoDB就需要通过多个阶段执行其计算。这类似于标准的SQL子查询方法。此处的区别在于,子查询结果集需要在客户端应用程序中维护,然后再传递给另一个查询。

总结

如图所示,归纳如下:

  • SQL/N1QL 是 declarative的,可以自动优化查询结果;Mongo是Procedural的,需要用户自己显示设置。
  • SQL/N1QL 是标准SQL,并且可以处理JSON文档;Mongo查询是特有的。
  • SQL/N1QL 仅需要请求一次服务器,性能卓越;Mongo查询需要请求多次服务器,耗费更多资源。
  • 与SQL/N1QL相比, Mongo查询面对聚合和JOIN查询就会变得复杂。

参考:

  1. Altoros查询比较报告— https://resources.couchbase.com/c/altoros-database-query-report
  2. Couchbase N1QL教程— https://query-tutorial.couchbase.com/tutorial
  3. 索引顾问作为N1QL的服务— https://index-advisor.couchbase.com/indexadvisor

译文链接: https://dzone.com/articles/sql-to-nosql-how-would-you-choose

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址