10个完美之NoSQL数据库

http://www.infoq.com/research/nosql-databases?utm\_source=infoqresearch&utm\_campaign=lr-homepage

 

摘要:随着大数据的不停上扬,非关系型的数据库现在改成了一个绝热门之新领域,非关系数据库产品的向上十分快。现今之微机体系布局于多少存储方只要有特大之档次扩展性,而NoSQL也多亏从为改变就同样现状。目前Google的
BigTable和Amazon
的Dynamo使用的即是NoSQL型数据库,本文介绍了10种植美的NoSQL数据库。

 

NoSQL的分类

NoSQL可以约上分为4个门类:Key-value、Document-Oriented、Column-Family
Databases以及 Graph-Oriented Databases。
下就是一览这些项目的特色:

一、 列存储(Wide Column Store/Column-Family)数据库

排存储数据库将数据储存在列族(column
family)中,一个列族存储时让同步查询的相干数据。举个例子,如果我们出一个Person类,我们日常会并查询他们之真名及年龄要不是工薪。这种景象下,姓名以及年就是见面被放入一个列族中,而工资则当其余一个列族中。

产品:Cassandra、HBase

发生哪个当应用:Ebay (Cassandra)、Instagram (Cassandra)、NASA
(Cassandra)、Twitter (Cassandra and HBase)、Facebook
(HBase)、Yahoo!(HBase)

适用的观

1. 日记。因为我们好拿数据储存在不同之排着,每个应用程序可以将消息写副好的列族中。

2. 博客平台。我们囤每个信息及不同之列族中。举个例子,标签可以储存在一个,类别好于一个,而文章虽然当旁一个。

匪适用场景

1. 万一我们需要ACID事务。Vassandra就非支持工作。

2. 原型设计。如果我们分析Cassandra的数据结构,我们就见面发觉结构是冲我们想之数据查询方式若一定。在模型设计的初,我们平素无可能夺预测她的查询方式,而使查询办法转,我们不怕必须还规划列族。

老二、 面向文档(Document-Oriented)数据库

面向文档数据库会拿数据为文档的花样储存。每个文档都是自包含的数额单元,是平多元数据项的聚众。每个数据项都发生一个号以及相应之价,值既好是略的数据类型,如字符串、数字与日期等;也可以是复杂的类别,如有序列表和关系对象。数据存储的最好小单位是文档,同一个表中存储的文档属性可以是例外之,数据可采取XML、JSON或者JSONB等多种形式存储。

产品:MongoDB、CouchDB、RavenDB

产生哪个当用:SAP (MongoDB)、Codecademy (MongoDB)、Foursquare
(MongoDB)、NBC News (RavenDB)

适用的场景

1. 日志。企业环境下,每个应用程序都有不同之日记信息。Document-Oriented数据库并没有固定的模式,所以我们得用它储存不同的消息。

2. 浅析。鉴于其的弱模式结构,不改模式下就是足以储存不同的胸怀方法和上加新的襟怀。

勿适用场景

于不同的文档上助长事务。Document-Oriented数据库并无支持文档中的事务,如果对当下上面来求则免应有选用这解决方案。

 

三、 键值(Key-Value)数据库

键值数据库就如于人情语言中采用的哈希表。你可以由此key来添加、查询或者去除数据,鉴于使用主键访问,所以会见获得是的特性和扩展性。

产品:Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort

发生哪个当以:GitHub (Riak)、BestBuy (Riak)、Twitter
(Redis和Memcached)、StackOverFlow (Redis)、 Instagram
(Redis)、Youtube (Memcached)、Wikipedia(Memcached)

适用的状况

储存用户信息,比如会话、配置文件、参数、购物车等等。这些信一般还同ID(键)挂钩,这种情景下键值数据库是独雅好之选料。

切莫适用场景

1. 代表通过键查询,而是经价值来查询。Key-Value数据库被向无通过价值查询的路。

2. 用仓储数据里面的涉嫌。在Key-Value数据库被未能够透过简单个或上述之键来关联数据。

3. 事务之支撑。在Key-Value数据库被故障发生时未可以展开回滚。

四、 图(Graph-Oriented)数据库

希冀数据库允许我们拿数据以图的法门囤。实体会为当作终点,而实体之间的干虽会吃看成边。比如我们出三独实体,Steve
Jobs、Apple和Next,则会出星星点点个“Founded by”的边将Apple和Next连接受Steve
Jobs。

产品:Neo4J、Infinite Graph、OrientDB

生哪个当采取:Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)

适用的景象

1. 以有关系性强之数码遭到

2. 推荐引擎。如果我们用数据以图的花样展现,那么将会杀有利于于推荐的制订

非适用场景

匪切合的数据模型。图数据库的适用范围很有些,因为很少来操作涉及到任何图。

 

 

类型

部分代表

特点

列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

上述NoSQL数据库类型的分开并无是绝对,只是从存储模型上来进行的大约分。它们之间从来不断的交界,也有交代的状态,比如Tokyo Cabinet / Tyrant的Table类型存储,就足以清楚吧凡文档型存储,Berkeley DB XML数据库是基于Berkeley DB之上开发的。

 

尽管NoSQL流行语火起来才短短一年的年月,但是不可否认,现在曾起来了次替代移动。尽管前期的库房代码只能算是一种植实验,然而本的网都越来越的熟、稳定。不过本也面临着一个严格的实况:技术尤其成熟——以至于本那个好之NoSQL数据存储不得不进行重写,也产生少数口看当下就是所谓的2.0本。这里列有一部分较著名的家伙,可以吗很数量建立快速、可扩大的存储库。

1. Casssandra

 

Cassandra头由Facebook开发,后来化了Apache开源项目,它是一个网络社交云计算方面佳之数据库。它并了另的兴工具要Solr,现在既变成一个了成熟的大型数据存储工具。Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其关键意义比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB。Cassandra的显要特色就是其不是一个数据库,而是由同样堆积数据库节点共同构成的一个分布式网络服务,对Cassandra的一个状操作,会于复制到外节点上,而对Cassandra的朗诵操作,也会受路由于到某个节点上面去读取。在近日之同不行测试中,Netflix建立了一个288个节点的集群。

2. Lucene/Solr

 

Lucene大凡Apache软件基金会4
jakarta项目组的一个子项目,这是一个放源代码的全文检索引擎工具确保,就是说它不是一个整机的全文检索引擎,而是一个全文检索引擎的架构。不过大部分人口连无认同Lucene是一个数据库,因为大部分口只是用它们来寻觅大量之文本块,不过它实在使了同另外NoSQL数据存储相似的型。如果说查询并无是就局限为精确的相当,而是找有那些出现于片被之许或字段的话,毫无疑问,Lucene/Solr是不过好之询问方式。

3. Riak

 

Riak是由技术公司basho开发的一个好像Dynamo的分布式Key-Value系统。其坐分布式,水平扩展性,高容错性等特征著称。从事Riak工作绝有意思之片是得以JavaScript或者Erlang来做Map/Reduce查询,它们会询问每个节点,收集结果,而且好重,如果需要运用的结果进行再开展搜的话语。该网还为接近于Solr的索提供全文索引,同时还提供一个控制面板,可以查看集群的音。

4. CouchDB

 

CouchDB是因此Erlang开发的面向文档的数据库系统,不过她不是一个俗的关系数据库,而是面向文档的数据库,其数量存储方有点类似lucene的index文件格式,CouchDB最老之义在她是一个面向web应用的新一替存储系统。作为一个分布式的数据库,CouchDB可以把仓储系统分布到n台物理的节点上面,并且十分好之和谐以及联合节点内的数额读写一致性。CouchDB支持REST
API,可以于用户用JavaScript来操作CouchDB数据库,也足以用JavaScript编写查询语句,可以想像一下,用AJAX技术整合CouchDB开发出的CMS系统会是多的粗略与便利。

CouchDB还发一个尤为商业化的“表亲”——Couchbase,不过其提供缓存功能,更好之分片,增量查询,更好的目录和部分其他的功力。其实Couchbase与CouchDB也是环环相扣相关的,Couchbase产品含有了CouchDB的一个副本。

5. Neo4J

 

大部分之NoSQL数据库只是存储键和值的一个心灵手巧的打。不过Neo4J的囤的凡目标期间的涉及,或者说这种组织就是数学中的“图”。Neo4J是一个面向网络(“图”)的数据库,也就是说,它是一个嵌入式的、基于磁盘的、具备了的事体特性的Java持久化引擎,但是其以结构化数据存储于网络直达而无是表中,当然为足以把Neo4J看作是一个赛性能的图引擎,该引擎具有成熟以及身心健康的数据库的有着特性。该工具包括多关于搜索与剖析的关联之算法,它会帮助查找谁是自身之爱侣,或者找心上人之情人。这些“图的遍历”算法,可以节约成千上万指南针查询的劳动。

6. Oracle的NoSQL

 

或是是NoSQL运动极富裕之因由,Oracle决定开发同悠悠产品,将键/值对拆分在所有节点集上,这样的优势在于提供了一个活的事情保护措施,进而可以保证于数额在节点上等候存储开始到通过网被成功备份结束,都老在左右之中。

Oracle的NoSQL
Database,是以10月4号的甲骨文全球大全上揭晓之Big
Data Appliance的内一个组件,Big Data
Appliance是一个合龙了Hadoop、NoSQL
Database、Oracle数据库Hadoop适配器、Oracle数据库Hadoop装载器及R语言的系统。

7. MongoDB

 

MongoDB举凡一个根据分布式文件存储的数据库,介于关系数据库和免关系数据库之间,是非关系数据库当中作用最丰富,最像关系数据库的。MongoDB最充分之特点是他支持的查询语言很强劲,其语法有点类似于面向对象的查询语言,几乎可兑现类似关系数据库单表查询的大举意义,而且还支持针对数码建立目录。MongoDB支持RUBY,PYTHON,JAVA,C++,PHP,C#等于多种语言。

MongoDB是青出于蓝性能开源文档数据库,也是当下最为被关注的NoSQL技术之一,以便捷、可扩大及针对性企业应用友好(支持工作,一致性与数据完整性保证,有深企业应用案例)而名声鹊起。有人甚至认为LAMP中的M应该用MongoDB取代MySQL,其火热程度可见一斑。使用MongoDB的铺连Foursquare,
Craiglist,
迪士尼,SAP,Intuit,EA等,国内淘宝、大众点评、视觉中国相当于企业有下。(最新版本MongoDB
2.2下载)

 

https://www.mongodb.org/downloads 

 

Install MongoDB on Windows(安装配置官方参考)
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/

将程序文件解压在C盘下的mongodb文件夹下,数据库及安排文件在D盘下的test\mongodb文件夹下。

解压安装包到C:\MongoDB

树数据库目录 D:\test\MongoDB\data

建立日志目录 D:\test\MongoDB\logs

成立布局文件目录 D:\test\MongoDB\etc

树立布局文件 D:\test\MongoDB\etc\mongodb.conf

以CMD下运作如下代码配置:

C:\mongodb\mongod.exe –dbpath d:\test\mongodb\data

C:\mongodb\mongod.exe

C:\mongodb\mongo.exe

systemLog: destination: file
path: c:\data\log\mongod.log
storage: dbPath: c:\data\db

sc.exe create MongoDB binPath= “C:\mongodb\mongod.exe –service
–config=\”C:\mongodb\mongod.cfg\”” DisplayName= “MongoDB” start=
“auto”

安装系统环境变量:
C:\Program Files\MongoDB\Server\3.0\bin
配备默认数据库文件
mongod.exe –dbpath d:\mongodb\data
布日记文件
mongod.exe –dbpath D:\MongoDB\data
–logpath=D:\MongoDB\logs\mongodb.log –logappend
布服务
–创建服务
sc create MongoDB binPath= “C:\Program
Files\MongoDB\Server\3.0\bin\mongod.exe –service –dbpath
D:\test\MongoDB\data –logpath=D:\test\MongoDB\logs\mongodb.log
–logappend”
–删除服务
sc delete MongoDB

Component Set Binaries
Server mongod.exe
Router mongos.exe
Client mongo.exe
MonitoringTools mongostat.exe, mongotop.exe
ImportExportTools mongodump.exe, mongorestore.exe, mongoexport.exe,
mongoimport.exe
MiscellaneousTools bsondump.exe, mongofiles.exe, mongooplog.exe,
mongoperf.exe

 

MongoDB shell version: 3.0.6
connecting to: test
Server has startup warnings:
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten]
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** NOTE: This
is a 32 bi
t MongoDB binary.
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** 32 bit
builds a
re limited to less than 2GB of data (or less with –journal).
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** Note that
journ
aling defaults to off for 32 bit and is currently off.
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** See
http://doch
ub.mongodb.org/core/32bit
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten]
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** NOTE: your
operating
system version does not support the method that MongoDB
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** uses to
detect
impending page faults.
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten] ** This may
result
in slower performance for certain use cases
2015-09-08T11:44:26.265+0800 I CONTROL [initandlisten]
> show dbs
admin 0.078GB
local 0.078GB
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce

show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries wit
h time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memor
y, ‘global’ is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to f
urther iterate
DBQuery.shellBatchSize = x set default number of items to display on s
hell
exit quit the mongo shell
>

http://docs.mongodb.org/manual/reference/method/db.createUser/\#db.createUser

use admin
db.createUser(
{
user: “appAdmin”,
pwd: “password”,
roles:
[
{ role: “readWrite”, db: “config” },
“clusterAdmin”
]
}
)

Mongodb GUI
MongoVUE http://www.mongovue.com/downloads/
MongoHub https://github.com/bububa/mongohub
RockMongo https://github.com/iwind/rockmongo
               
 http://sourceforge.net/projects/rockmongoadmin/ 

 

http://hubbledotnet.codeplex.com/SourceControl/latest
https://github.com/mongodb
https://github.com/mongodb/mongo-csharp-driver

 

MongoDB常用命令教程 

mongodb超级用户相关命令: 

use admin 

#增还是改用户密码 

db.addUser(169it,’pwd’) 

#翻用户列表 

db.system.users.find() 

#用户征 

db.auth(169it,’pwd’) 

#抹用户 

db.removeUser(‘mongodb’) 

#翻看所有用户 

show users 

#翻看有数据库 

show dbs 

#查阅有的collection 

show collections 

#查看各collection的状态 

db.printCollectionStats() 

#查看主从复制状态 

db.printReplicationInfo() 

#修补数据库 

db.repairDatabase() 

#安装记录profiling,0=off 1=slow 2=all 

db.setProfilingLevel(1) 

#查看profiling 

show profile 

#拷贝数据库 

db.copyDatabase(‘mail_addr’,’mail_addr_tmp’) 

#删除collection 

db.mail_addr.drop() 

#除去时之数目库 

db.dropDatabase() 

mongodb客户端连接命令: 

/usr/local/mongodb/bin/mongo 8.8.88/ixigualib -u ixigua -p ‘pwd’ 

mongodb增删改命令: 

#储存嵌套的对象 

db.foo.save({‘name’:’ysz’,’address’:{‘city’:’beijing’,’post’:100096},’phone’:[138,139]}) 

#积存数组对象 

db.user_addr.save({‘Uid’:’169it@sohu.com’,’Al’:[‘test-1@sohu.com’,’test-2@sohu.com’]}) 

#基于query条件修改,如果未存则插入,允许修改多长长的记录 

db.foo.update({‘yy’:5},{‘$set’:{‘xx’:2}},upsert=true,multi=true) 

#删除yy=5的记录 

db.foo.remove({‘yy’:5}) 

#去除所有的记录 

db.foo.remove() 

mongodb索引命令: 

#增加索引:1(ascending),-1(descending) 

db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true}); 

#索引子对象 

db.user_addr.ensureIndex({‘Al.Em’: 1}) 

#查看索引信息 

db.deliver_status.getIndexes() 

db.deliver_status.getIndexKeys() 

#基于索引名删除索引 

db.user_addr.dropIndex(‘Al.Em_1’) 

mongodb查询命令: 

#摸所有 

db.foo.find() 

#摸一久记录 

db.foo.findOne() 

#据悉条件检索10长达记录 

db.foo.find({‘msg’:’Hello 1′}).limit(10) 

#sort排序 

db.deliver_status.find({‘From’:’169it@sina.com’}).sort({‘Dt’,-1}) 

db.deliver_status.find().sort({‘Ct’:-1}).limit(1) 

#count操作 

db.user_addr.count() 

#distinct操作 

db.foo.distinct(‘msg’) 

#>操作 

db.foo.find({“timestamp”: {“$gte” : 2}}) 

#分对象的查找 

db.foo.find({‘address.city’:’beijing’}) 

mongodb管理命令: 

#查collection数据的大小 

db.deliver_status.dataSize() 

#查看colleciont状态 

db.deliver_status.stats() 

#询问所有索引的大小 

db.deliver_status.totalIndexSize() 

#翻开时所利用的数额库 

db 

 

8. Hadoop的HBase

 

HBase(Hadoop
Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可当降价PC
Server上多建筑起大规模结构化存储集群。HBase是Google
Bigtable的开源实现,类似Google
Bigtable利用GFS作为该文件存储系统,HBase利用Hadoop
HDFS作为那个文件存储系统;Google运行MapReduce来处理Bigtable中之海量数据,HBase同样采用Hadoop
MapReduce来处理HBase中的海量数据。

虽说大部分人犹觉得Hadoop及其所有的家伙都是用作管理大规模集群的平种体制,其实不然,Hadoop也囊括数据库,在HBase中呢是经节点来传播数据。Hadoop的Map
/Reduce的架构是非常适合于复杂的计算任务要询问工作。领土在不停的壮大,新的数据库像Accumulo就是Hadoop平台的一个拉开。(Apache
Accumulo是一个保险的、可伸缩的、高性能的排序分布式的Key-Value存储解决方案,基于单元访问控制以及可定制的劳务器端处理。使用Google
BigTable设计思路,基于Apache Hadoop、Zookeeper和Thrift构建)

9. BigTable/ Accumulo/ Hypertable

 

BigTable是休关系的数据库,是一个疏散的、分布式的、持久化存储的多维度排序Map。Bigtable的计划目的是十拿九稳的处理PB级别的数量,并且能够部署至上千令机械及。Bigtable已经落实了底的几乎独对象:适用性广泛、可扩大、高性能与高可用性。Bigtable已经在跨60单Google的产品和花色落得获了用,包括Google
Analytics、GoogleFinance、Orkut、Personalized
Search、Writely和GoogleEarth。

谷歌的BigTable开启了NoSQL的热潮,现在众柜都效仿谷歌的架搭建了投机之平台。谷歌的AppEngine用户可以把键/值对存储于数据库中,而Hadoop的用户可以把它放在Accumulo上,其他的好行使Hypertable。所有的这些大多还属于键/值存储,只不过添加了部分外加的功力,增加了搜寻的速度而已。

10. DynamoDB

 

DynamoDB举凡亚马逊的key-value模式的贮存平台,可用性和扩展性都十分好,性能为对:读写访问中99.9%底应时间都以300ms内。DynamoDB的NoSQL解决方案,也是行使键/值对存储的模式,平且通过服务器将持有的多寡存储在SSD上之老三个不等之区域。如果发生再次强的传导需求,DynamoDB也得于后台添加更多的服务器。(编译/@CSDN王鹏,审校/包研)

原文链接:InfoWorld

 

网站地图xml地图