原文来自Medium,作者SeattleDataGuy
原文链接:https://medium.com/better-programming/dynamodb-vs-hadoop-vs-mongodb-4f05714312b2
用户如何选择最能满足当前业务需求的数据库,通常取决于其开发团队的技术和已使用的应用程序。了解哪种数据库系统最适合用户公司的当前和未来需求十分重要。数据库在所有行业和组织机构中都扮演着至关重要的角色。因此,是否能从需求和价格两个维度选择最合适的数据库系统可能成为项目与战略成败间的分水岭。
随着公司数据存储方式的不断扩展,本文旨在比较公司使用的一些更现代的数据库系统——了解DynamoDB,Hadoop和MongoDB可以提供哪些功能将帮助用户针对业务模型做出更好的决策。所有这些系统彼此间不一定都可以互换,而且在某些情况下,它们更像是比较苹果和橙子。但是,由于它们通常都属于NoSQL(译注:NoSQL泛指非关系型的数据库,NoSQL数据库促进了可扩展性,且能够帮助Web应用减少开发时间)的范畴,这几个系统通常会被放在一起比较。
因此,我们先从介绍每个系统开始,之后再进行比较。
什么是DynamoDB ?
DynamoDB是Amazon精心打造的一项NoSQL数据库服务,可以作为Amazon Web Services(AWS)产品组合的一部分。
DynamoDB起源于Dynamo系统——一个高度可用的键值(key-value)存储系统。Amazon建立该系统的目的是避免像2004年假日电商促销活动出现的系统中断情况。
最初,由于Dynamo操作复杂性很高,并且需要在数据一致性、性能、查询灵活性和可靠性之间进行权衡,即便是Amazon内部也只有少数团队采用了Dynamo系统。
而且在这期间,Amazon的开发人员更倾向使用SimpleDB NoSQL数据库,该数据库可以减轻用户数据库的管理工作。但是,由于SimpleDB受到一些限制,最终限制了它的使用场景。
2012年推出的DynamoDB是AWS的数据库服务,旨在打破Dynamo和SimpleDB的局限。
什么是Hadoop?
Apache Hadoop软件库是一个框架,它允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器, 每台机器提供本地计算和存储。
Hadoop本身的目的是检测和处理应用层的故障,而无须依靠硬件来提供高的可用性。再深层次地看,Hadoop实际上是模块化的。这就意味着用户可以更换其中的任何部分,搭建成各种软件工具。这一过程实现了非常灵活、有效、强劲的体系架构。
什么是MongoDB?
MongoDB是由MongoDB Inc创建的非表格和开放式数据库。发起者最初专注于创建一个完全使用开放源代码的平台,但为了获得现有数据库使用客群以满足其在云中构建服务的需求,他们开始创建个人数据库系统。
意识到创建数据库软件的可能性之后,该团队就将重点转移到了创建MongoDB上。2009年发布的MongoDB旨在创建一个技术基础,使开发团队能够获得分布式系统设计、文档数据模型和统一的体验。
2016年,MongoDB推出云托管数据库服务MongoDB Atlas。MongoDB Atlas提供了正版MongoDB服务,使用户可以摆脱具体的操作任务。
现在来说说差异。
使用、设置和管理的便捷性
DynamoDB
DynamoDB的托管服务将用户从底层基础结构中解放出来,并且仅通过远程端点与数据库进行交互。用户使用DynamoDB时无需担心操作问题或关注其他硬件规定,这使得DynamoDB非常容易上手。
Hadoop
Hadoop在设置方面有选择多样,无需抽象(abstraction,译注:数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。),仅凭命令行(command-line)即可实现管理Hadoop。当然,这意味着用户需要熟悉命令行,并了解如何设置硬件。由于其复杂性,已有多家公司(例如Cloudera)围绕Hadoop开发产品,帮助用户减轻管理Hadoop的复杂工作。
如果做得好,使用上述第三方公司的产品可为用户节省成千上万的人事费用(因为雇用Hadoop工程师通常要花费15万美元以上)。
MongoDB
MongoDB不是SaaS服务,它是最容易直接管理的数据系统之一。用户可以轻松下载并快速开始与MongoDB进行交互。
质量支持
DynamoDB
DynamoDB用户可通过社区支持论坛、企业支持、ServerFault和Stack Overflow获得质量支持。
DynamoDB社区提供示例应用程序、驱动程序、扩展程序和支持工具。此外,由于DynamoDB是AWS的一部分,因此用户可直接根据其的业务规模向Amazon获得进一步的支持。
Hadoop
多家公司提供了针对Hadoop的商业服务,并提供专业的技术支持。而Hadoop已经存在了很长时间,已经拥有多个社区支持论坛、支持工具和课程支持,可帮助用户提高使用系统进行管理和开发的能力。
就个人而言,如果用户使用的是Hadoop原始软件,我们认为Hadoop可能是很难获得质量支持的系统之一。但是,鉴于这么多第三方介入,我们认为多数大公司可以将Hadoop视为数据存储系统。
MongoDB
MongoDB提供社区支持论坛、ServerFault和Stack Overflow。其用户还可以获得每周七天,每天24小时的企业支持。除此之外,MongoDB社区还会组织活动、MongoDB大学、用户组和网络研讨会的相关信息。
数据库结构
DynamoDB
DynamoDB将属性、项目和表作为核心部分,以便用户经常使用。
-表涉及众多项目,而单个项目又是属性的组合。
-此外,DynamoDB使用主码(primary key)专门标识表中的单个项目。
-使用二级索引可实现更高的查询灵活性。
MongoDB
MongoDB在存储模式自由数据时采用了类似JSON格式的doc文件。
MongoDB中的文档集合并不包含预定义的列和结构,这些预定义的列和结构可能因各种文档而有所不同。关系数据库中MongoDB的一些特点包括:
-查询语言易于阅读。
-一致性强。
由于其模式自由,MongoDB允许不在先创建文档结构的情况下创建文档。
MongoDB与关系数据库管理系统(RDBMS)的主要对比包括:
表|列|值|记录
与MongoDB相比,它包括:
集合|键|值|文档
这种方法意味着MongoDB的集合和RDBMS的表是相似的。此外,文档与记录也类似。
Hadoop
Hadoop不限定数据结构。从本质上讲,它只接受在系统上使用的数据类型。Hadoop采用读时模式,提高了其对所有数据集的通用性。
Hadoop中的所有数据都存储为文件系统,Hive和Immpala等建立在Hadoop文件系统上的数据仓储架构则使用户能够以表格式查看基础数据。
如果用户要通过Hadoop原始软件来管理Hadoop,这将变得非常复杂。因为用户选择和编码的文件类型在从速度到空间的所有方面都起巨大作用,撤销操作也会变得非常困难。
用户的商业权利
DynamoDB
在游戏和物联网(IoT)领域,DynamoDB仍然是一个受欢迎的选择。如果用户使用AWS堆栈并且需要一个NoSQL数据库,那么使用DynamoDB是一个不错的选择。注意:一旦使用DynamoDB,用户可能无法像在MongoDB上那样访问嵌入式数据结构。
Hadoop
Hadoop是大型企业中比较热门的选择,因为大型企业需要服务器集群,而专门的数据管理、编程技能和高成本的实施方式对于这些服务器集群来讲并不是问题。
在构建未来的企业数据中心方面,Hadoop也可以积极发挥作用。它可能很难管理(这取决于用户决定如何管理、有或没有第三方),但它同时也带来了很多优势。
MongoDB
在高速缓存和可伸缩性(scalability)特点上,MongoDB是个极好的选择。
MongoDB在Web开发中也起着重要作用,它可以使后端到前端的文档样式数据传递变得容易。对于创建内容管理系统的公司来说,选择MongoDB可以让管理数据变得简单。
性能问题
DynamoDB
DynamoDB在性能方面存在以下突出问题:
-DynamoDB的定价模型非常昂贵(译注:吞吐量高,导致存储成本高)。
-低延迟读取还不够低。
-跨区域的并行写入将导致数据丢失,并且跨区域的读取无法保持高度一致。
-难以设置持续集成/持续交付(CI/CD)管道。
-故障排除困难(诸如识别导致分区变热的确切密钥之类的简单操作也很复杂)。
-持久性和一致性应用场景尚不广泛。
-不兼容ACID事务和一致的二级索引。
Hadoop
Hadoop在性能方面存在以下突出问题::
-DataNode和NameNode(在HDFS中有两种节点,分别是NameNode和DataNode)变慢。
-MapReduce数据本地化。
-TaskTracker的性能以及对时间间隔的影响。
MongoDB
MongoDB在性能方面存在以下突出问题:
-设计与访问模式和架构相结合的索引非常重要。
-大型处理对象和大型数组异常的问题。
-安全性和耐用性设置仍令人担忧。
-没有优化查询模块(Query optimizer,专门负责优化SELECT语句的优化器模块)。
除了这些差异,用户总能看到有支持工具悬浮在系统上,以进一步支持数据系统管理。
我们来看一些工具:
Rockset
Rockset是云中可扩展、可靠的搜索和分析服务,仅使用SQL查询语言,便可在TB级别的数据量级上构建快速的操作应用程序。
这是Rockset的最大好处。使用Rockset工具,用户的团队无需熟悉另一种查询语言。
NoSQLBooster
NoSQLBooster是用于连接管理MongoDB的图形用户接口(GUI)。此外,它还允许用户同时使用SQL语法和MongoDB语法进行查询。
因此,它不仅使管理数据库更加容易(想想使用SQL Server Management Studio时的场景),而且还使分析人员更容易运行查询程序来回答业务问题。
Sqoop
Apache Sqoop(TM)是一种用于在Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。该类工具有助于简化与Hadoop的交互,可被称为ETL工具。
结论
DynamoDB,Hadoop和MongoDB这三个数据库系统很不一样,彼此之前并不总能互换使用。而且每个数据库都有其优缺点以及用例。
上文中突出强调的内容旨在帮助用户更好地选择合适自身的数据库系统。用户根据其组织规模,采用这些数据库系统中的任何一个都可以处理多样化的数据类型、获得有效的应用程序管理服务以及更多其他服务。