《解读NoSQL》——1.3 NoSQL案例研究

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:

本节书摘来自异步社区出版社《解读NoSQL》一书中的第1章,第1.3节,作者: 【美】Dan McCreary(丹•麦克雷) , Ann Kelly(安•凯利),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 NoSQL案例研究

我们的经济正在发生变革,企业想要保持竞争力就必须找到吸引并留住客户的新方法。要做到这一点,就必须得到技术和相关技术人员及时有效的支持。在这个技术前沿时代,解决方案需要运用新的思考方式,即如何实现从传统的思维方式向流程化、技术化的思维方式转变。

以下的案例研究展示了如何用打破陈规的思维方式更快、更经济、更有效地解决问题。表1-2总结了NoSQL解决方案用于解决特定业务问题的5个案例研究。表中展示了问题、业务驱动因素和最终结果。当你查看后面详细案例研究部分的内容时,你会发现这些案例都有一个共同的主题:很多业务问题需要新思路和新技术来提供最佳的解决方案。

image

1.3.1 案例研究:LiveJournal的Memcache技术

LiveJournal博客系统的工程师们正致力于研究如何运用他们最宝贵的资源——每个Web服务器中的RAM——来运行系统。LiveJournal网站存在一个问题:这个网站太受欢迎了,浏览网站的用户数量也在不断增长。要满足这种不断增长的需求就需要不断增加Web服务器,并且每个服务器都要有自己单独的RAM。

为了提高性能,LiveJournal工程师发现了一些将最常被数据库查询的数据保存在RAM中的方法,避免了在数据库中进行相同SQL查询的昂贵成本。但是查询数据的副本是保存在各自Web服务器的RAM中,所以即使是同一个机架上的服务器也不会知道旁边的服务器已经在RAM中保存了查询数据的副本。

因此,LiveJournal的工程师发明了一个简单的方法来区分每一个SQL查询,那就是为每一个SQL查询设计一个“签名”。每个签名或散列值就代表一个SQL SELECT语句。Web服务器之间只需要发送一个请求,就可以知道其他服务器中是否已经有执行的SQL结果的副本。如果其中一个服务器已有副本,它会将查询结果回传给发出请求的服务器,这样就避免了已经不堪重负的SQL数据库数据往返的昂贵成本。他们将这个新系统称作Memcache,这是因为它管理了RAM中的内存高速缓存。

许多其他软件工程师在以前也遇到过这个问题。大型的共享内存的服务器资源池这个概念其实并不新,不同的是这次LiveJournal的工程师们在这个概念上领先了一步。他们不仅让这些系统运行(并且运行良好)并通过开放资源许可共享了他们的软件,还标准化了Web前端的通信协议(被称为memcached协议)。现在,如果有人想缓解因用户反复查询而导致的数据库超负荷运行的话,前端工具是一个不错的选择。

1.3.2 案例研究:Google的MapReduce——利用商用硬件生成搜索索引

关于NoSQL运动最有影响力的一个案例研究就是Google的MapReduce系统。在本节,Google将和我们分享如何使用廉价的商用CPU将大量的Web数据转换为内容搜索索引。

尽管它们分享的内容是标志性的,但其实映射函数和化简函数的概念并不新。映射函数和化简函数仅仅是数据转换两个阶段的名称而已,如图1-2所示。
image

图1-2 Map和Reduce函数可以在独立的转换系统中将大数据集划分成小块。关键是要将每个函数隔离,这样就可以将其扩展到多个服务器

转换的初始阶段被称为映射操作(map operation),它们负责数据的提取、转换和过滤。然后将结果送到下一层,即化简函数(reduce function)。化简函数将结果进行排序、整合和汇总,从而得到最终结果。

映射和化简函数背后的核心概念基于坚实的计算机科学工作,那还是在20世纪50年代,麻省理工学院的程序员通过当时比较有影响力的LISP系统实现了这些函数。与其他编程语言不同,LISP重视转化独立列表数据的函数,这是许多在分布式系统下表现出色的函数式编程语言的基础。

Google扩展了映射和化简函数使其能够处理数十亿网页并能在数以千计的低成本商用CPU上可靠运行。利用这两个函数,Google 在海量数据上实现了让映射任务和化简任务经济高效地运行。Google对MapReduce的运用使其他人对函数式编程的威力以及函数式编程系统通过数以千计的低成本CPU进行扩展的能力刮目相看。一些软件包,如Hadoop,很大程度上就是模仿这些函数。

MapReduce的应用启发了来自雅虎和其他组织的工程师们对Google的MapReduce创建了开源版本。它让我们逐渐意识到传统过程编程的局限性并鼓励我们使用函数式编程系统。

1.3.3 案例研究:Google的Bigtable——一个有着数十亿行和百万列的表

当Google发布Bigtable系统白皮书《A Distributed Storage System for Structured Data》的时候也影响了许多软件开发人员。Bigtable 背后的动力是存储用网页爬虫在互联网上收集到的HTML页面、图片、声音、视频和其他媒体的需求。这些数据太过庞大,以至于不太适合用单个关系型数据库进行存储,所以Google建立自己的存储系统。该系统建立的基本目标是可以轻易扩容以应对不断增长的数据存储需求并且不需要在硬件上投入过多。它既不是一个完整的关系型数据库也不是一个文档系统,Google称它为与结构化数据一起工作的“分布式存储系统”。

据说,Bigtable项目非常成功。它通过创建一个大表存储Google开发人员所需的数据从而为他们提供了数据的单一表格视图。此外,这个系统还允许物理硬件位于任何数据中心甚至世界上的任何角落,在这样的环境中,开发人员不需要关心自己所操控的数据所在的物理位置。

1.3.4 案例研究:亚马逊的Dynamo——每天24小时接收订单

Google的工作主要关注如何使分布式的批处理和报表生成更简单,而没有考虑对高度可伸缩的Web店面每天24小时运行需求的支持。在这方面,亚马逊考虑到了。亚马逊发表了另一篇的标志性论文《Amazon's 2007 Dynamo: A Highly Available Key-Value Store》。Dynamo背后的业务驱动是亚马逊需要创建一个高可用的Web店面来支持来自世界各地每天24小时不间断的交易。

在几个不同地点经营的传统实体零售商的优势在于他们的收银机和销售设备只需要在营业时间运行,而在非营业时间可以做日常报告、备份和软件升级。亚马逊的运营模式与之不同,亚马逊的客户来自世界各地,每时每刻都有人在网站上购物。在购买周期内,任何的宕机都可能带来数百万美元的损失,所以亚马逊的系统在服务过程中需要用铁一般的可靠性和可伸缩性来确保零损失。

在Dynamo刚开始应用时,亚马逊使用关系型数据库来支持它的购物车系统和结账系统。他们拥有RDBMS软件的无限许可和充足的咨询预算,允许他们为项目雇用最好的和最精明的顾问。尽管有着充足的预算和权力,但他们最终还是意识到仅靠关系模型无法满足未来的业务需求。

NoSQL社区里面的很多人都把亚马逊的Dynamo白皮书视为NoSQL运动的重要转折点。在关系模型还广泛使用的年代,NoSQL挑战了当时的现状和当时的最佳应用。亚马逊发现,键值存储接口简单,更易于复制数据且更加可靠。最终,亚马逊用键值存储的形式构建了一个可靠的、可扩展的,并且可以支持每天24小时运行的商业模式的一站式服务系统,这使得亚马逊成为世界上最成功的网络零售商之一。

1.3.5 案例研究:MarkLogic

2001年,一群住在旧金山湾区附近富有文档搜索经验的工程师们成立了一家专注于处理海量XML文档的公司。由于XML文档包含标记(markup),所以他们将公司命名为MarkLogic。

MarkLogic定义了两种类型的集群节点:查询和文档节点。查询节点接收查询请求并协调与执行查询相关的所有活动。文档节点包含XML文档,并负责在本地文件系统上执行查询。

查询请求被发送到一个查询节点后,即被分发到每个包含XML文档索引的远端服务器。所有符合要求的文档会被返回至查询节点。当所有文档节点完成响应后,查询结果即被返回。

MarkLogic的架构是将查询任务移动至文档而不是将文档移动至查询服务器,这样的架构对千兆字节的文档具有线性可扩展性。

MarkLogic发现他们在美国联邦政府系统中的产品有一个需求,即TB级的智库信息以及大型出版物需要存储和搜索它们的XML文档。自2001年以来,MarkLogic已经发展成为成熟的、通用的、高度可扩展的文档存储并对ACID事务和细粒度的、基于角色的访问控制提供支持。最初,MarkLogic开发者使用的主要语言是XQuery与REST的组合,新版本支持Java和其他语言的编程接口。

MarkLogic 是一个商业产品,对于任何超过 40 GB 的数据集都需要软件许可。NoSQL 与商用产品和开源产品联系紧密,为业务问题提供了创新的解决方案。

1.3.6 实践

为了展示这些概念在这本书中如何应用,我们将为您介绍Sally的解决方案。Sally在一个有许多业务部门的大型组织中担任解决方案架构师。解决方案架构师帮助存在信息管理问题的业务部门选择最好的解决方案来应对这些信息挑战。Sally致力于解决需要定制开发的应用程序项目,她对于SQL和NoSQL技术有着深入的了解。Sally的工作就是为业务问题寻求最适合的解决方案。

现在让我们通过两个案例来看看Sally是如何应用她的知识的。在第一个案例中,一个需要跟踪硬件采购的设备授权信息的团队来寻求Sally的建议。由于在RDBMS中已经保存了硬件的信息,并且这个团队在SQL方面很有经验,Sally推荐他们扩展RDBMS以包含授权信息并使用连接操作创建报表。在这种情况下,SQL就很合适了。

在第二个示例中,一个负责在关系型数据库中存储数字图片信息的团队找到 Sally。他们遇到的问题是数据库性能正对他们的Web应用页面产生负面影响。在这种情况下,Sally推荐他们将所有图片移至键值对形式的存储系统,用一个URL代表一个图片。键值存储对读密集型应用程序做了优化并能与内容分发网络相协作。当我们把图片管理负载从RDBMS迁出之后,Web应用程序以及其他应用程序的性能都得到了改善。

请注意,Sally没有将她的工作简单地按照非此即彼的方式,即不是RDBMS就是NoSQL的方式进行选择。有时最好的解决方案是兼收并蓄的。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
25天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
114 1
|
2月前
|
存储 NoSQL 关系型数据库
面试题18: NOSQL数据库
面试题18: NOSQL数据库
|
3月前
|
存储 NoSQL API
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
137 0
|
4天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
31 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
12天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
北京某国企客户Oracle 11g R2数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表数据。 Oracle数据库执行Truncate命令的原理:在执行Truncate命令后ORACLE会在数据字典和Segment Header中更新表的Data Object ID,但不会修改实际数据部分的块。由于数据字典与段头的DATA_OBJECT_ID与后续的数据块中的并不一致,所以ORACLE服务进程在读取全表数据时不会读取到已经被TRUNCATE的记录,但是实际数据未被覆盖。
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
|
1月前
|
存储 NoSQL 关系型数据库
四种类型的nosql数据库
随着互联网的发展,传统关系型数据库已经不能满足大数据时代的需求。NoSQL数据库应运而生,它们具有高可扩展性、高性能和高可用性等优点。本文将介绍四种主要类型的NoSQL数据库,分别是键值存储数据库、文档存储数据库、列存储数据库和图形数据库。这些数据库在不同的场景下有着不同的应用,可以满足不同的需求。
|
1月前
|
存储 缓存 NoSQL
|
2月前
|
存储 SQL 数据库连接
连接并操作数据库:Python 数据库案例
数据库是一种用于存储和管理数据的工具,它以一种有组织的方式将数据存储在文件或内存中,以便于检索和处理。数据库系统通常使用 SQL(Structured Query Language)语言来进行数据的操作,包括数据的插入、查询、更新和删除等。
|
2月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例