第五十三期:公司如何选择数据库?DynamoDB、Hadoop和MongoDB 大比拼

随着公司数据存储方式的不断扩展,本文旨在比较公司使用的一些更现代的数据库系统——了解DynamoDB,Hadoop和MongoDB可以提供哪些功能将帮助用户针对业务模型做出更好的决策。

作者:久谦

用户如何选择最能满足当前业务需求的数据库,通常取决于其开发团队的技术和已使用的应用程序。了解哪种数据库系统最适合用户公司的当前和未来需求十分重要。数据库在所有行业和组织机构中都扮演着至关重要的角色。因此,是否能从需求和价格两个维度选择最合适的数据库系统可能成为项目与战略成败间的分水岭。

随着公司数据存储方式的不断扩展,本文旨在比较公司使用的一些更现代的数据库系统——了解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这三个数据库系统很不一样,彼此之前并不总能互换使用。而且每个数据库都有其优缺点以及用例。

上文中突出强调的内容旨在帮助用户更好地选择合适自身的数据库系统。用户根据其组织规模,采用这些数据库系统中的任何一个都可以处理多样化的数据类型、获得有效的应用程序管理服务以及更多其他服务。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[引用格式][中文论文][毕业论文]毕业论文引用格式 英文引用文献间隔过大

英文引用文献间隔过大,需要选中该条英文引用文献,在段落设置的中文版式设置西文换行,设置后再进行微调 设置前 设置后 设置方法

动态规划——0-1背包问题

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 0-1背包问题 背包能够承受的总重量一定w,每个物品的总量不同int[] weight表示。怎么放才能让背包中物品的总重量最大。 每次决定一种物品&#xff0c…

第五十四期:MongoDB与MySQL:如何选择

MongoDB和MySQL分别是领先的开源NoSQL和关系数据库。哪个最适合您的应用程序? 作者:XEyes行走的CODE来源 MongoDB和MySQL分别是领先的开源NoSQL和关系数据库。哪个最适合您的应用程序? 在1990年代的互联网泡沫时期,用于Web应用程序的一种通用软件堆栈…

动态规划——矩阵中的最短路径长度

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 题目 假设我们有一个 n 乘以 n 的矩阵 w[n][n]。矩阵存储的都是正整数。棋子起始位置在左上角,终止位置在右下角。我们将棋子从左上角移动到右下角。每次…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第19篇]Shamir密钥交换场景

这是一系列博客文章中最新的一篇,该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结…

第五十五期:MongoDB数据库误删后的恢复

如果部署的是 MongoDB 复制集,这时还有一线希望,可以通过 oplog 来尽可能的恢复数据;MongoDB 复制集的每一条修改操作都会记录一条 oplog;如果对 MongoDB 做了全量备份 增量备份,那么可以通过备份集及来恢复数据。 作者&#xf…

037-PHP如何返回闭包函数实例

<?php /*: 如何返回闭包函数实例*/# 直接调用将不会输出$txt的内容function demo(){$txt 我爱PHP;$func function () use ($txt) {echo $txt;};# 这里不再直接调用&#xff0c;而且是把实例返回return $func; # 区别于直接写 $func;}# 测试一下 $res demo(); // 函数返…

动态规划——莱文斯坦距离

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 莱文斯坦距离 在搜索引擎中会有搜索词纠错的功能。这个功能背后的原理是编辑距离。 编辑距离 编辑距离是量化两个词之间的相似度。 编辑距离是指将一个字符串变为…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第18篇]画一个/描述ECB,CBC,CTR模式的操作

操作模式:块密码的安全性依赖于加解密一个固定长度的明文块.当加密或者解密消息的时候,块是被需要的.我们使用一种操作模式将明文的多个块链接在一起.我们会知道,这种链接在一起的方法是十分重要. 电子密码本(ECB)模式:加密,解密. ECB模式是最直接的方法.明文被分割成m块.每一…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第20篇]Merkle-Damgaard hash函数如何构造

这里讲的是MD变换,MD变换的全称为Merkle-Damgaard变换.我们平时接触的hash函数都是先构造出一个防碰撞的压缩函数.然后先证明这个小的,固定长度的压缩函数是安全的,然后再用它构造一个任意长度的哈希算法.虽然存在很多其它的构造方法,MD是迄今为止最常用的(至少是被用到最多的)…

第五十六期:IPv6只是增加了地址数量?其实真相并没有那么简单!

究竟什么是IPv6?它到底是干啥用的?IPv6的全称是Internet Protocol version 6。其中&#xff0c;Internet Protocol译为“互联网协议”。所以&#xff0c;IPv6就是互联网协议第6版。 作者&#xff1a;小枣君 10月20日&#xff0c;在乌镇举办的第六届世界互联网大会上&#x…

spring学习(10):创建项目(自动装配)

首先创建项目 pom.xml的配置文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第21篇]CRT算法如何提高RSA的性能?

CRT加速RSA&#xff1a;https://www.di-mgt.com.au/crt_rsa.html 转载链接&#xff1a;https://www.cnblogs.com/zhuowangy2k/p/12245513.html

动态规划——最长递增子序列

题目 我们有一个数字序列包含 n 个不同的数字&#xff0c;如何求出这个序列中的最长递增子序列长度&#xff1f;比如 2, 9, 3, 6, 5, 1, 7 这样一组数字序列&#xff0c;它的最长递增子序列就是 2, 3, 5, 7&#xff0c;所以最长递增子序列的长度是 4。 回溯法 数组长度为n&a…

spring学习(11):使用配置类

CompactDisc类 package soundSystem;import org.springframework.stereotype.Component;Component public class CompactDisc {public CompactDisc() {super();System.out.println("compactdisc无参构造方法");}public void play(){System.out.println("正在播…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第22篇]如何用蒙哥马利算法表示一个数字和多个相乘的数字

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 安全和效率 密码学的目标是设计高度安全的密码学协议,但是同时这些协议也应该被有效率的实现.这样就可以一…

动态规划——双11既可以薅羊毛还能花钱最少

淘宝的“双十一”购物节有各种促销活动&#xff0c;比如“满 200 元减 50 元”。假设你的购物车中有 n 个&#xff08;n>100&#xff09;想买的商品&#xff0c;希望从里面选几个&#xff0c;在凑够满减条件的前提下&#xff0c;让选出来的商品价格总和最大程度地接近满减条…

spring学习(12):使用junit4进行单元测试

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第23篇]写一个实现蒙哥马利算法的C程序

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 这次博客我将通过对蒙哥马利算法的一个实际的实现&#xff0c;来补充我们上周蒙哥马利算法的理论方面。这个…

spring学习(13):使用junit4进行单元测试续

加入spring test.jar包 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…