NoSQL数据库入门:思想、技术与软件探索

需积分: 32 16 下载量 21 浏览量 更新于2024-07-29 收藏 3.88MB PDF 举报
"NOSQL 技术文档,探讨NOSQL思想、框架及软件应用,适合初学者入门" NOSQL(Not Only SQL)数据库是一种非关系型的数据库技术,它针对大规模数据分布式存储和处理的需求,提供了不同于传统SQL数据库的解决方案。NOSQL的核心思想在于放弃对ACID(原子性、一致性、隔离性和持久性)事务的严格支持,转而追求更高的可扩展性、高可用性和容错性。 1. 思想篇 - CAP理论:在分布式系统中,无法同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。NOSQL通常选择AP或CP,牺牲强一致性以换取系统性能和稳定性。 - 最终一致性:系统中的所有副本经过一段时间后,最终会达到一致状态,允许短暂的数据不一致。 - BASE理论:基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency),是对CAP理论的一种实践策略。 - I/O的五分钟法则:强调快速响应用户请求,即使数据不完全是最新的。 - Amdahl定律和Gustafson定律:讨论并行计算性能提升的限制和可能性。 2. 手段篇 - 一致性哈希:解决分布式系统中负载均衡和数据分布问题。 - 亚马逊现状:亚马逊的Dynamo论文提出了一种基于一致性哈希和虚拟节点的分布式数据库设计。 - QuorumNRW:读写策略,确保数据的一致性和可用性。 - Vectorclock:用于分布式系统中处理时序和冲突检测的工具。 - Gossip协议:通过节点间的信息传播来维护数据一致性,分为StateTransferModel和OperationTransferModel两种模型。 - Merkletree:用于证明数据完整性和减少数据验证的复杂性,常见于区块链中。 - Paxos算法:解决分布式系统中的共识问题。 3. 软件篇 - 亚数据库:如Memcached,提供高速缓存功能,提升系统性能。 - Hadoop之Hbase:基于Hadoop的分布式列式存储系统,适合实时查询大数据。 - Facebook之Cassandra:分布式NoSQL数据库,适用于大规模数据分布式存储,提供高吞吐量和低延迟。 - Google之BigTable:大型分布式多维数据表,用于存储海量数据。 - Yahoo之PNUTS:云数据库系统,提供高性能的数据存储和访问。 NOSQL数据库根据数据模型的不同,可以分为多种类型: - 列存数据库:如Hbase,适合分析大量结构化数据。 - 文档存储:如MongoDB,以JSON文档形式存储数据。 - 键值对存储:如Amazon SimpleDB,适合简单的键值操作。 - 图形数据库:如Neo4j,用于存储和查询复杂的关系网络。 这些不同的NOSQL数据库软件各有特点,可以根据具体应用场景选择合适的解决方案。例如,Memcached适用于需要高速缓存的场景,Hbase适合实时查询大规模数据,MongoDB则适合处理结构多变的数据。 NOSQL数据库在大数据时代提供了灵活、可扩展的存储和处理方案,适应了互联网应用对数据处理的新需求。其设计思想和软件应用已经广泛应用于社交网络、推荐系统、日志处理等场景。
2014-07-21 上传
关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。 为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。 为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。 关系型数据库简史 1969年,埃德加•弗兰克•科德(Edgar Frank Codd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBM Research Report》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。 科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。 通用性及高性能 虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。 突出的优势 关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点: 保持数据的一致性(事务处理) 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处) 可以进行JOIN等复杂查询 存在很多实际成果和专业技术信息(成熟的技术) 这其中,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。 关系型数据库的不足 不擅长的处理 就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理: 大量数据的写入处理 为有数据更新的表做索引或表结构(schema)变更 字段不固定时应用 对简单查询需要快速返回结果的处理 。。。。。。 NoSQL数据库 为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。 易于数据的分散 如前所述,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。 首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。 另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。 不对大量数据进行处理的话就没有使用的必要吗? NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQ