亚马逊AWS官方博客
众多的数据库类型,你该怎么选择?
今天,数据的重要性已经渗透到各个领域,成为每个行业发展和变革的必要元素。然而,我们依然需要数据库来帮助我们存储和组织这些数据。传统的数据库技术并没有因为互联网技术的发展而消失,但是在互联网时代,对于数据库的新需求却不断出现。数据的规模不断增长,企业的需要处理的数据规模从GB快速增长到 TB甚至PB 规模,同时需要提供毫秒级延迟的数据访问,数据库有时需要每秒处理数百万个请求,可扩展以支持世界各地的数以百万,千万计的用户。
随着这些新的需求越来越广泛地被提出,越来越多的企业意识到,采用传统的数据库应对不同需求这种一刀切的方式,已经不再奏效。开发人员面对特定的需求场景,往往需要选择一款适合他们需求的数据库。很多企业开始尝试采用不同类型的开源数据库,如 MySQL,PostgreSQL 等,然而,如果希望通过采用开源数据库满足不同类型的需求,又同时获得与商业级数据库相同的性能和可用性却非常的困难。
为了响应这一客户需求,AWS提供了一系列针对特定场景进行优化的数据库,如下图所示:
图1:AWS 数据库服务一览图
- 关系型数据库:作为被广泛采用的数据库类型,关系型数据库在很多场景下,比如企业的ERP,CRM,财务系统和交易系统等,具有独特的优势。这些场景下,客户通常会有对于数据有强一致性的需求,要求数据库支持事务性处理(Transactional Processing)。基于客户这一需求,AWS为此构建 了Amazon Aurora数据库。Amazon Aurora 是一个针对云构建的与 MySQL 和 PostgreSQL 兼容的关系型数据库,它结合了高端商业数据库的性能和可用性,以及开源数据库的简单性和成本效益。
包含国内很多知名企业在内的成千上万的客户在Aurora 上运行他们的应用程序,比如大家所熟知的Camel Games, 虎牙直播,九州通医药,以及国际上知名的NASDAQ,Dow Jones等,都选择了在Amazon Aurora 上运行他们的关键业务负载,获得了性能提升。
虽然Amazon Aurora数据库是关系型数据库在云上的首选,但是AWS也支持客户首先把原有的数据库直接迁移到云上来,即刻享受到云上数据库服务带来的便利性,高可用和成本的节约。为此,Amazon Relational Database Service (Amazon RDS)提供了多种关系型数据库的引擎便于选择,包括PostgreSQL, MySQL, MariaDB, Oracle, and SQL Server等。您可以使用 AWS Database Migration Service 轻松将您现有的数据库迁移或复制到 Amazon RDS。
- 键-值型数据库:在移动互联网,电商,游戏以及物联网等很多新型场景中,数据库需要面对超大规模的数据处理,同时又需要低延迟的性能保障。对于这些需要极高的吞吐量和并发性、低延迟以及可靠性的需求,我们提供了Amazon DynamoDB。这是一款适用于任何规模的快速灵活的 NoSQL 数据库服务。
许多全球发展最快的企业,如 Lyft,三星等企业,都依靠 Amazon DynamoDB 的规模和性能来支持其关键任务工作负载。在国内,我们也看到诸如虎牙直播, Mobvista(汇量科技)等客户利用Amazon DynamoDB去应对其相应场景的需求。以Lyft为例,它的共享单车服务每天都需要处理海量的GPS数据来实现对车辆的追踪,这些数据结构往往很简单,存储量规模都非常大,但又往往需要在极短的时间内允许用户从不同的地方查询和访问。通过采用Amazon DynamoDB这种键-值型数据库就满足了上述的需求。
- 文档型数据库: 很多客户将 MongoDB 用作文档数据库,用于存储、检索和管理半结构化数据。由于设置和管理 MongoDB 集群所带来的复杂性,在 MongoDB 上构建可以快速扩展到多兆字节(TB)和每秒数十万次读写的高性能、高可用性的应用程序极具挑战性。为此,AWS提供了Amazon DocumentDB(兼容 MongoDB),它是一项快速、可扩展、高度可用且完全托管的文档数据库服务,支持 MongoDB 工作负载。作为一个文档数据库,Amazon DocumentDB 使得存储、查询和索引 JSON 数据变得简单。
- 图数据库:在社交网络、推荐引擎和欺诈检测等使用案例中,开发人员需要在数据之间创建关系并快速查询这些关系。 这个时候,如果采用关系型数据库,就需要面临及其复杂的SQL嵌套查询和联接去实现,随着数据的增加,性能也变得不能满足需求。Amazon Neptune 是一项快速、可靠且完全托管的图形数据库服务,可帮助客户轻松构建和运行使用高度互连数据集的应用程序。
- 时序数据库:随着物联网技术的发展,大量的IoT 设备兴起,时间序列数据是增长最快的数据类型之一。时间序列数据具有特定的特征,例如通常以时间顺序形式出现,数据只能附加,并且查询总是在一个时间间隔内进行。Amazon Timestream(注册预览版)是一种专门构建的时间序列数据库,它可以按时间间隔高效地存储和处理这些数据。利用 Timestream,您可以轻松存储和分析用于开发运营的日志数据、用于 IoT 应用程序的传感器数据和用于设备维护的工业遥测数据。
- 内存数据库:在游戏,视频流服务,社交网络等新型场景中,客户往往需要应用能够实时访问和查询海量数据。Amazon ElasticCache就是一款支持实时应用程序,提供亚毫秒级延迟的数据库。比如知名的地图软件公司Here,每天需要处理高达4亿次的API请求,来实现将客户的定位数据转变成地理位置数据,通过采用Amazon ElasticCache,极大的降低了访问的延迟时间,提高了客户的满意度,同时,还通过将负载从CPU优化的实例迁移到低成本的Cache节点来实现了成本的降低。
- 分类账数据库:很多公司需要记录在与客户的经济和金融活动的历史记录,比如银行交易中的信贷和借记历史,保险索赔的数据沿袭,供应链网络中的项目移动等。关系型数据库难以跟踪和验证对数据的任何意外更改。区块链框架会增加设计的复杂性,客户需要建立一个包含多个节点的完整区块链网络。Amazon QLDB 是一种新型数据库,提供了一个透明、不可变、可以以加密方式验证的事务日志,且该事务日志由一家可信的中央机构拥有,用于跟踪每次的应用程序数据更改,并不断维护完整且可验证的更改历史记录。
下面,我们通过一个案例来介绍这些面向不同场景的数据库:我们在下图展示了一个在线书店的演示应用,它包括了一些最基本的功能,比如产品目录、产品搜索、畅销书列表和社交推荐。
图2:AWS Bookstore演示应用程序的屏幕截图
当用户访问我们这个在线书店的首页时,通常用户会希望看到在售的书本列表,书本的一些基本描述、评分、价格等信息。从技术上讲,我们通过产品ID的键值便可以检索到这些属性。Amazon DynamoDB就非常适合作为书本目录的数据库系统,因为DynamoDB可以为任何规模的键值查找提供快速,可预测的性能。借助DynamoDB,即使未来这个网站拓展了产品的种类,产品目录可以从几百种书本扩展到数十亿种产品,也无需重新架构或更改数据库。
第二个用例是产品目录的畅销书清单,我们通常都会通过畅销书清单来更方便的选择我们需要的图书。一个理想的数据库可使书店维护排行榜的同时不需要在每次用户刷新网页时都对所有购买数据进行长时间且成本昂贵的汇总查询。 Amazon ElastiCache for Redis准确地解决了这个需求,包括内置的且存放在内存中的数据结构(例如排序集),这些数据集使书店可以快速有效地创建畅销书清单。为了使其运行,书店可以使用命令表中的DynamoDB Streams在每次有用户购买商品时更新ElastiCache中的最新状态。有了最畅销书清单,书店也可以在其网站首页上显示其中的一部分。另外,由于数据是内存中的数据,并且可以通过内置的排序集获得,因此书店将在最畅销书清单上遇到微秒级的读取延迟。
第三个用例是提供社交建议,以帮助书店的客户找到更适合特定情境的内容。我们往往喜欢从朋友的推荐书籍中快速找到自己感兴趣的读物。由于社交推荐位于书店的主页和网站上的其他页面上,因此推荐必须够快速。根据这些要求,专门构建的图形数据库(例如Amazon Neptune)很自然地可以导航数据中的链接,从而实现基于社交关系和相关购买活动的建议。 Neptune提供了快速构建和执行查询来遍历图形关系所需的必要功能和性能,并且它将随着网站(和应用程序)的增长而扩展,而不会影响性能。
为了获取和更新这些信息,Web店面进行了一系列不同的API调用。这里是利用Amazon API Gateway和AWS Lambda的后端应用程序的视图:
图3:AWS Bookstore演示应用程序的架构图
对于此书店应用程序,我们评估了该应用程序的主要用例,并为每个用例选择了最佳数据库。专门构建的数据库使您可以创建一个高性能、可扩展的基础结构来为应用程序提供动力,并通过选择合适的组件来解决每个用例。通过这种方法,您可以使用自己的资源构建类似的体系结构。
为了便于读者的学习,我们创建了一个AWS CloudFormation模板,在短短几分钟内可自动创建端到端的完整书店演示应用程序的堆栈。同时,我们在GitHub上提供了所有源代码,图像和示例数据,以供您部署,探索,修改和扩展。
图4:GitHub上的AWS Bookstore Demo App存储库
AWS Bookstore演示应用程序是一个有效的应用程序。您可以将应用程序用作沙箱或学习工具来探索类似的架构该如何相适应,也可以将其用作构建自己的应用程序的起始模板。演示应用程序只是作为如何使用专用数据库来构建可扩展的高性能全栈应用程序(例如Web店面)的一个示例。你也可以以此为基础,扩展这个应用,比如采用关系数据库(如Amazon RDS)处理一些扩展的场景,比如支付和交易环节。
总结
在本文中,我们探讨了AWS所构建的多种不同类型的数据库服务和相应的用户案例和应用场景,帮助我们了解如何针对不同的需求场景,在AWS云上选择一款适合自己需求的数据库服务。
参考文件:Build a Modern Application with Purpose-Built AWS Databases(https://aws.amazon.com/cn/blogs/database/building-a-modern-application-with-purpose-built-aws-databases/)