面向文档的NoSQL,面向文本是什么意思

如何根据性能选择内存NoSQL数据库

本文主要内容是测试了不同NoSQL数据库在测试工具YCSB中的表现。我们选取了3款流行的内存(in-memory)数据库管理系统:Redis,Tarantool 以及 CouchBase,还有缓存系统Memchached。Memchached虽然不属于数据库管理系统但常作为快速存储系统使用。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、昆都仑网站维护、网站推广。

测试环境由4台在Microsoft Azure Cloud中的虚拟机组成的计算机组组成。这些虚拟机同属于一个数据中心。nosql-1和nosql-2用作测试Tarantool和CouchBase,nosql-3和nosql-4用作测试Redis,Azure Redis Cache 以及 Memcached。这些机器都安装和配置了相应数据库和测试项目。虚拟机的配置为4核A3 CPU,7GB RAM,120GB硬盘。

数据库及设置

内存数据库管理系统会存储所有在主内存中的数据并在磁碟上进行持续更新操作;透过日志记录每个数据的修改以确保连贯性。由于是以append-only方式进行日志写入,因此它很少遇到瓶颈问题;读取/写入都不会造成频繁的磁碟头移动。

Redis在2009推出,目前的最新版本是3.0.5。我们这里使用的版本是3.0.4,以append-only(只附加)方式进行数据管理,与其配合使用的是Microsoft Azure Redis Cache工具。

Tarantool是一款开源NoSQL数据库管理系统。我们使用的是Tarantool 1.6.7-126-gb35aff9,日志采用write-ahead(先写)模式。Memcached是一款分布式内存缓存系统,这里使用是Memcached 1.4.14-0ubuntu9。

Couchbase Server是开源分布式NoSQL面向文档数据库,这里使用的版本是Couchbase 4.0.0-4047-1。

YCSB测试工具

Yahoo! Cloud Serving Benchmark(YCSB)是功能强大的NoSQL数据库性能测试工具,它提供了6种主要的负载工作类型,以字母A到F来区分。

负载A负责更新操作,极值是50/50的读写操作,如用于进行新近操作记录。负载B负责读取操作,极值是95/5的读写操作,如用于进行图片标签管理,多进行标签读取操作。负载C负载100%的读取操作,如用于进行用户属性获取。负载D以先进先出方式进行插入操作,如用户进行最新数据读取。负载E负责小范围记录读取而不是单个记录读取,如线程会话。负载F负责记录的读取,修改和写入,如用户信息管理。

我们对配置文件作了两处参数修改:数据条目recordcount设为200000,操作条目operationcount设为5000000。YCSB是多线程工具,我们将以8, 16, 32, 64, 128 及256 线程来进行测试。详细的测试脚本请点击这里进行下载。

下列测试结果图以颜色进行测试对象区分,

Tarantool (HASH) (蓝)

Tarantool (TREE)(浅蓝)

Redis (红)

Azure Redis Cache (橙)

Memcached (绿)

CouchBase(黑)

更多图片请点击[这里]查看。

结论

Tarantool在所有负载类型测试中皆取得了最优成绩。它创建了一个无锁内存引擎,以协同多任务方式进行操作而不是互斥或并行处理方式。根据以下性能图表现,我们的结论是Tarantool的高吞吐量处理是其最大优势之一。因此在多数场合下,Tarantool是用户的最佳选择。

nosql数据库的几大类型

1. 键值数据库

相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached

应用:内容缓存

优点:扩展性好、灵活性好、大量写操作时性能高

缺点:无法存储结构化信息、条件查询效率较低

使用者:百度云(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和Memcached)

2. 列族数据库

相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS

应用:分布式数据存储与管理

优点:查找速度快、可扩展性强、容易进行分布式扩展、复杂性低

使用者:Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Facebook(HBase)

3. 文档数据库

相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit

应用:存储、索引并管理面向文档的数据或者类似的半结构化数据

优点:性能好、灵活性高、复杂性低、数据结构灵活

缺点:缺乏统一的查询语言

使用者:百度云数据库(MongoDB)、SAP(MongoDB)

4. 图形数据库

图形数据库-使用图作为数据模型来存储数据。

相关产品:Neo4J、OrientDB、InfoGrid、GraphDB

应用:大量复杂、互连接、低结构化的图结构场合,如社交网络、推荐系统等

优点:灵活性高、支持复杂的图形算法、可用于构建复杂的关系图谱

缺点:复杂性高、只能支持一定的数据规模

使用者:Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)

有哪些轻型的非关系型数据库?

常见的非关系型数据库有:1、mongodb;2、cassandra;3、redis;4、hbase;5、neo4j。其中mongodb是非常著名的NoSQL数据库,它是一个面向文档的开源数据库。

常见的几种非关系型数据库:

1、MongoDB

MongoDB是最著名的NoSQL数据库。它是一个面向文档的开源数据库。MongoDB是一个可伸缩和可访问的数据库。它在c++中。MongoDB同样可以用作文件系统。在MongoDB中,JavaScript可以作为查询语言使用。通过使用sharding MongoDB水平伸缩。它在流行的JavaScript框架中非常有用。

人们真的很享受分片、高级文本搜索、gridFS和map-reduce功能。惊人的性能和新特性使这个NoSQL数据库在我们的列表中名列第一。

特点:提供高性能;自动分片;运行在多个服务器上;支持主从复制;数据以JSON样式文档的形式存储;索引文档中的任何字段;由于数据被放置在碎片中,所以它具有自动负载平衡配置;支持正则表达式搜索;在失败的情况下易于管理。

优点:易于安装MongoDB;MongoDB Inc.为客户提供专业支持;支持临时查询;高速数据库;无模式数据库;横向扩展数据库;性能非常高。

缺点:不支持连接;数据量大;嵌套文档是有限的;增加不必要的内存使用。

2、Cassandra

Cassandra是Facebook为收件箱搜索开发的。Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。通常,这些数据分布在许多普通服务器上。您还可以添加数据存储容量,使您的服务保持在线,您可以轻松地完成这项任务。由于集群中的所有节点都是相同的,因此不需要处理复杂的配置。

Cassandra是用Java编写的。Cassandra查询语言(CQL)是查询Cassandra数据库的一种类似sql的语言。因此,Cassandra在最佳开源数据库中排名第二。Facebook、Twitter、思科(Cisco)、Rackspace、eBay、Twitter、Netflix等一些最大的公司都在使用Cassandra。

特点:线性可伸缩;;保持快速响应时间;支持原子性、一致性、隔离性和耐久性(ACID)等属性;使用Apache Hadoop支持MapReduce;分配数据的最大灵活性;高度可伸缩;点对点架构。

优点:高度可伸缩;无单点故障;Multi-DC复制;与其他基于JVM的应用程序紧密集成;更适合多数据中心部署、冗余、故障转移和灾难恢复。

缺点:对聚合的有限支持;不可预知的性能;不支持特别查询。

3、Redis

Redis是一个键值存储。此外,它是最著名的键值存储。Redis支持一些c++、PHP、Ruby、Python、Perl、Scala等等。Redis是用C语言编写的。此外,它是根据BSD授权的。

特点:自动故障转移;将其数据库完全保存在内存中;事务;Lua脚本;将数据复制到任意数量的从属服务器;钥匙的寿命有限;LRU驱逐钥匙;支持发布/订阅。

优点:支持多种数据类型;很容易安装;非常快(每秒执行约11万组,每秒执行约81000次);操作都是原子的;多用途工具(在许多用例中使用)。

缺点:不支持连接;存储过程所需的Lua知识;数据集必须很好地适应内存。

4、HBase

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。

HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

5、neo4j

Neo4j被称为原生图数据库,因为它有效地实现了属性图模型,一直到存储层。这意味着数据完全按照白板的方式存储,数据库使用指针导航和遍历图。Neo4j有数据库的社区版和企业版。企业版包括Community Edition必须提供的所有功能,以及额外的企业需求,如备份、集群和故障转移功能。

特点:它支持唯一的约束;Neo4j支持完整的ACID(原子性、一致性、隔离性和持久性)规则;Java API: Cypher API和本机Java API;使用Apache Lucence索引;简单查询语言Neo4j CQL;包含用于执行CQL命令的UI: Neo4j Data Browser。

优点:容易检索其相邻节点或关系细节,无需连接或索引;易于学习Neo4j CQL查询语言命令;不需要复杂的连接来检索数据;非常容易地表示半结构化数据;大型企业实时应用程序的高可用性;简化的调优。

缺点:不支持分片

nosql数据库是什么 具有代表性以key-value的形式存储的

什么是NoSQL

大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。

为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。

为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。

关系型数据库简史

1969年,埃德加?6?1弗兰克?6?1科德(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数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQL数据库的应用就没有意义吗?

答案是否定的。的确,它在处理大量数据方面很有优势。但实际上NoSQL数据库还有各种各样的特点,如果能够恰当地利用这些特点将会是非常有帮助。具体的例子将会在第2章和第3章进行介绍,这些用途将会让你感受到利用NoSQL的好处。

希望顺畅地对数据进行缓存(Cache)处理

希望对数组类型的数据进行高速处理

希望进行全部保存

多样的NoSQL数据库

NoSQL数据库存在着“key-value存储”、“文档型数据库”、“列存储数据库”等各种各样的种类,每种数据库又包含各自的特点。下一节让我们一起来了解一下NoSQL数据库的种类和特点。

NoSQL数据库是什么

NoSQL说起来简单,但实际上到底有多少种呢?我在提笔的时候,到NoSQL的官方网站上确认了一下,竟然已经有122种了。另外官方网站上也介绍了本书没有涉及到的图形数据库和对象数据库等各个类别。不知不觉间,原来已经出现了这么多的NoSQL数据库啊。

本节将为大家介绍具有代表性的NoSQL数据库。

key-value存储

这是最常见的NoSQL数据库,它的数据是以key-value的形式存储的。虽然它的处理速度非常快,但是基本上只能通过key的完全一致查询获取数据。根据数据的保存方式可以分为临时性、永久性和两者兼具三种。

临时性

memcached属于这种类型。所谓临时性就是 “数据有可能丢失”的意思。memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止的时候,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据(旧数据会丢失)。

在内存中保存数据

可以进行非常快速的保存和读取处理

数据有可能丢失

永久性

Tokyo Tyrant、Flare、ROMA等属于这种类型。和临时性相反,所谓永久性就是“数据不会丢失”的意思。这里的key-value存储不像memcached那样在内存中保存数据,而是把数据保存在硬盘上。与memcached在内存中处理数据比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的。但数据不会丢失是它最大的优势。

在硬盘上保存数据

可以进行非常快速的保存和读取处理(但无法与memcached相比)

数据不会丢失

两者兼具

Redis属于这种类型。Redis有些特殊,临时性和永久性兼具,且集合了临时性key-value存储和永久性key-value存储的优点。Redis首先把数据保存到内存中,在满足特定条件(默认是15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的key发生变更)的时候将数据写入到硬盘中。这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性。这种类型的数据库特别适合于处理数组类型的数据。

同时在内存和硬盘上保存数据

可以进行非常快速的保存和读取处理

保存在硬盘上的数据不会消失(可以恢复)

适合于处理数组类型的数据

面向文档的数据库

MongoDB、CouchDB属于这种类型。它们属于NoSQL数据库,但与key-value存储相异。

不定义表结构

面向文档的数据库具有以下特征:即使不定义表结构,也可以像定义了表结构一样使用。关系型数据库在变更表结构时比较费事,而且为了保持一致性还需修改程序。然而NoSQL数据库则可省去这些麻烦(通常程序都是正确的),确实是方便快捷。

可以使用复杂的查询条件

跟key-value存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据。虽然不具备事务处理和JOIN这些关系型数据库所具有的处理能力,但除此以外的其他处理基本上都能实现。这是非常容易使用的NoSQL数据库。

不需要定义表结构

可以利用复杂的查询条件

面向列的数据库

Cassandra、Hbase、HyperTable属于这种类型。由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引人注目。

面向行的数据库和面向列的数据库

普通的关系型数据库都是以行为单位来存储数据的,擅长进行以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被称为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

高扩展性

面向列的数据库具有高扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,利用面向列的数据库的优势,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,应用起来十分困难。

高扩展性(特别是写入处理)

应用十分困难

最近,像Twitter和Facebook这样需要对大量数据进行更新和查询的网络服务不断增加,面向列的数据库的优势对其中一些服务是非常有用的,但是由于这与本书所要介绍的内容关系不大,就不进行详细介绍了。

总结:

NoSQL并不是No-SQL,而是指Not Only SQL。

NoSQL的出现是为了弥补SQL数据库因为事务等机制带来的对海量数据、高并发请求的处理的性能上的欠缺。

NoSQL不是为了替代SQL而出现的,它是一种替补方案,而不是解决方案的首选。

绝大多数的NoSQL产品都是基于大内存和高性能随机读写的(比如具有更高性能的固态硬盘阵列),一般的小型企业在选择NoSQL时一定要慎重!不要为了NoSQL而NoSQL,可能会导致花了冤枉钱又耽搁了项目进程。

NoSQL不是万能的,但在大型项目中,你往往需要它!

文档数据库?

文档型数据库是 NoSQL 中非常重要的一个分支,它主要用来存储、索引并管理面向文档的数据或者类似的半结构化数据。 目前业界比较流行的文档型数据库如下:MongoDb、CouchDB、OrientDB、MarkLogic。

nosql数据库的四种类型

一般将NoSQL数据库分为四大类:键值(Key-Value)存储数据库、列存储数据库、文档型数据库和图形(Graph)数据库。它们的数据模型、优缺点、典型应用场景。

键值(Key-Value)存储数据库Key指向Value的键值对,通常用hash表来实现查找速度快数据无结构化(通常只被当作字符串或者二进制数据)内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等。

列存储数据库,以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限分布式的文件系统。

文档型数据库,Key-Value对应的键值对,Value为结构化数据,数据结构要求不严格,表结构可变(不需要像关系型数据库一样需预先定义表结构),查询性能不高,而且缺乏统一的查询语法,Web应用。

图形(Graph)数据库,图结构,利用图结构相关算法(如最短路径寻址,N度关系查找等),很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案,社交网络,推荐系统等。


文章题目:面向文档的NoSQL,面向文本是什么意思
文章位置:http://myzitong.com/article/dscdpdd.html