《解读NoSQL》——2.1 保持组件简单以促进重用

2.1 保持组件简单以促进重用

如果你和关系型数据库打交道,那么你应该知道它们是多么复杂。一开始,它们是一个简单的系统,当被请求时,从单一的平面文件返回一个被选择的行即可。随着时间的迁移,它们需要管理不止一张表、执行连接操作、对查询进行优化、复制事务、运行存储过程、设置触发器、保证安全性、维护索引等。对于这些复杂的问题,NoSQL系统另辟蹊径,通过在网络中构建简单的分布式应用来满足不同维度的需求。保持架构级别的组件简单使得在不同的应用中可以重用这些组件,帮助开发人员理解和测试,而且应用的架构迁移也变得更容易。

NoSQL的观点认为,简单就是好的。构建一个应用时,并不需要在一个软件中包含所有的功能,应用的功能可以被分发到多个NoSQL(或者SQL)数据库上完成,这些系统由许多简单工具组成并具有简单的接口和清晰定义的功能。NoSQL产品遵循的原则是做好几件事。为了说明这一点,我们来看看系统是如何通过清晰定义的功能构建而成,并关注基于这些功能组合成新的功能是多么地容易。

如果你对UNIX操作系统熟悉的话,你应该对UNIX管道的概念不陌生。UNIX管道是一组相互连接的进程,前一个进程的输出正好是下一个进程的输入。与 UNIX 管道类似,NoSQL 系统由许多协同工作的功能模块构成。如图2-1所示,这是一个由一些小功能通过UNIX管道连接用来统计书中出现·figure·单词的次数。

图2-1 UNIX管道是个复用一些简单功能以实现新功能的例证。该图显示将一个目录中的所有章节文件连接起来并对所有章节的图片数量进行统计。通过使用UNIX管道,我们可以将3个简单的命令拼接成一个字符串:连接(·cat·)、搜索函数(·grep·)和单词计数(·wc·)。没有多余的代码,每一个函数接受前一个函数的输出并进行处理

这个例子的显著特点是通过键入 40 来个字符你就可以创建一个有用的函数。如果是在不支持UNIX风格函数的系统中,情况就困难得多。事实上,在原生XML数据库上执行的查询可能还会比这条命令更短,但这并不是通用的。

许多NoSQL系统都遵循利用协同工作的模块化组件这一思想。为了取代单一的大型数据库层,它们经常采用通过重新组合许多更加简单的模块的方法来满足不同应用的需求。例如,某一个功能允许通过内存(或者是memcache)共享对象,另一个功能负责运行批处理作业(如MapReduce作业),还有一个功能负责存储二进制文档(以键值对的方式存储)。我们注意到大多数UNIX管道的设计宗旨是在单一的处理器之上通过拼接线性的管道来达到传输面向行的数据流。而NoSQL的组件,尽管模块化,却不仅仅是一系列的线性管道组件。它们专注于那些常用于增强分布式Web服务的高效的数据服务。NoSQL系统可以是文档、消息、消息存储、文件存储或者是通过通用的API提供基于REST、JSON或XML的Web服务,它们还提供装载、验证、转换和输出海量数据的工具,而UNIX管道实际上是被设计成只能在单处理器之上工作。

标准观察:用来处理结构化数据的通用管道

你这时候可能会问是否还能用UNIX管道背后的思想来处理结构化数据。如果你使用的是JSON或者是XML的标准,那么答案是肯定的。并且W3C已经意识到管道的思想可以用来处理任意非结构化的数据以满足通用的需求,他们提供了管道式处理数据的标准:XProc。一些NoSQL数据库已经内建并实现了XProc作为它们架构的一部分。XProc标准允许一个NoSQL内建的数据转换管道不经任何修改就可以连接到其他XProc系统。可以通过http://www.w3.org/TR/xproc/找到更多有关XProc的信息。另外还有一个XML语法风格的UNIX脚本工具:XMLSH。可以通过http://www.xmlsh.org找到更多有关XMLSH的信息。
关于NoSQL系统的简单功能的概念将是反复出现的主题。哪怕是NoSQL系统不能在单一系统中满足所有的需求,也要敢于建议使用或者真正去使用NoSQL系统。可以把它们看作是工具的集合,如果对它们的组合使用方法了解越多,它们会变得越有用。接下来,我们将来看到这个简单的概念对于基于NoSQL的应用层的开发的重要性。

时间: 2024-09-22 07:32:19

《解读NoSQL》——2.1 保持组件简单以促进重用的相关文章

《解读NoSQL》导读

前言 解读NoSQL有时候,现实迫使我们重新审视我们认为已经了解的事物.在花费了大量的工作时间专注于以行式数据结构存储数据的数据建模任务之后,我们发现,其实建模环节并不是非做不可的.但是这些信息并不意味着我们现有的知识体系是无效的,它迫使我们去审视应该如何解决企业的技术难题.有了新的知识.技术和解决问题方式的武装之后,我们的思路才能得以扩展. 2006年,在一个涉及房地产交易的项目中,我们花了好几个月的时间设计XML的语言模式和形式以存储层次结构复杂的数据.根据我的一个朋友 Kurt Cagle

《解读NoSQL》——第2章 NoSQL概念

第2章 NoSQL概念 解读NoSQL本章主要内容 NoSQL 概念对于可靠的数据库事务的ACID 和 BASE最小化由于数据库分区所造成的宕机时间Brewer 的 CAP 定理少即是多. --Ludwig Mies van der Rohe 在本章,我们将介绍一些NoSQL系统的核心概念.阅读完本章之后,你将有能力识别和定义NoSQL的概念和术语,了解NoSQL厂商的产品及其特性并且能够决定这些特性是否适合你的NoSQL系统.接下来,我们将讨论如何在应用开发过程中利用简单的组件来降低复杂性和促

《解读NoSQL》——第1章 NoSQL:明智的选择

第1章 NoSQL:明智的选择 解读NoSQL**本章主要内容**什么是NoSQLNoSQL的商业驱动NoSQL的案例研究**最小部件所耗费的复杂度约每两年增长一倍.当然,如果这个增长速度不再增长的话,短期内这样的增长速度仍然会继续. --Gordon Moore(戈登·摩尔,Intel创始人之一),1965 --你最好开始游泳,否则你将沉入水底--因为时代在变革. --Bob Dylan** 我们编写本书有两个初衷:第一,介绍NoSQL数据库:第二,展示如何使用NoSQL系统作为独立的解决方案

《解读NoSQL》——2.2 将应用分层以简化设计

在架构中采用应用分层的思想可以构建弹性的.可重用的应用.采用应用分层的思想,当必须做出一些改动时,可以选择新增或者修改某一个特定的层次,而不是重写它.在接下来的例子中,通过比较关系型数据库系统和NoSQL系统,可以发现NoSQL应用的功能分布是不同的. 当应用设计者开始考虑存储持久化数据的软件系统时,他们有很多选择.其中一个就是决定是否需要将整个应用的功能通过应用层进行划分.确定每一个应用层将应用分拆为架构独立的组件,有助于软件设计者决定每一个组件需要承担的功能.这种分离的特性有助于设计者向其他

《解读NoSQL》——2.5 比较ACID和BASE——两种可靠的数据库事务方法

2.5 比较ACID和BASE--两种可靠的数据库事务方法 兼顾性能和一致性的事务控制在分布式计算环境下是很重要的.通常会在两种事务控制模型中选择其一使用:ACID用于RDBMS,BASE用在很多NoSQL系统.即使数据库事务只有很少一部分需要事务完整性,但了解RDBMS和NoSQL系统能够采用这些事务控制策略也是很重要的.这两种模型的区别在于应用开发人员所付出的努力和事务控制所发生的位置(层级). 让我们从一个简单的银行业务案例来展现一个可靠的事务.如今,许多人都有两个银行账户:储蓄账户和支票

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

1.3 NoSQL案例研究 我们的经济正在发生变革,企业想要保持竞争力就必须找到吸引并留住客户的新方法.要做到这一点,就必须得到技术和相关技术人员及时有效的支持.在这个技术前沿时代,解决方案需要运用新的思考方式,即如何实现从传统的思维方式向流程化.技术化的思维方式转变. 以下的案例研究展示了如何用打破陈规的思维方式更快.更经济.更有效地解决问题.表1-2总结了NoSQL解决方案用于解决特定业务问题的5个案例研究.表中展示了问题.业务驱动因素和最终结果.当你查看后面详细案例研究部分的内容时,你会发

《解读NoSQL》——1.2 NoSQL的商业驱动

1.2 NoSQL的商业驱动 哲学家.科学家Thomas Kuhn提出了"模式转变"(paradigm shift)的概念来描述在科学试验中反复出现的过程,也是这样才有很多创新的思想爆发出来,并以非线性的方式影响了世界.我们将采用Kuhn对于模式转变的定义去思考和解释当今NoSQL运动以及思维模式.架构.涌现的方法的改变. 许多使用基于单CPU的关系型系统的机构都面临着技术的十字路口:机构的需求正在发生变化.企业通过不断采集和分析海量的可变数据获得价值,并基于获得的信息对业务作出快速调

《解读NoSQL》——2.4 使用一致性散列算法维护当前的缓存

2.4 使用一致性散列算法维护当前的缓存 我们已经知道了将经常使用的数据保存在RAM缓存中的重要性,以及如何通过减少非必要的磁盘访问来提升数据库性能.NoSQL系统将基于这个概念进行深入探讨,并采用了一致性散列(consistent hashing)的算法使访问最频繁的数据保存在缓存中. 在评估NoSQL系统如何工作时,一致性散列算法是一种有效的通用流程.一致性散列算法能很快判断出一个新的查询或者文档是否和缓存中的某一个对象是相同的.了解这些将有助于减少不必要的磁盘访问并且使数据库保持高速运行的

《解读NoSQL》——1.1 什么是NoSQL

1.1 什么是NoSQL 准确定义NoSQL本身就具有挑战性.NoSQL这个术语其实是有待商榷的,因为它并没有真正意义上揭示NoSQL运动的核心主题.这个术语来源于一群定期在湾区开会并讨论一些共同关注的可扩展的开源数据库的人们,它就这样出现了.不管它形不形象,它似乎出现在所有地方:行业期刊.产品说明和各种会议.在本书,我们将用NoSQL区别于传统的关系型数据库管理系统(RDBMS). 按照我们的目标,我们将从以下几个方面定义NoSQL. NoSQL是关于快速而高效地处理数据,专注于性能.可靠性和