初窥NoSQL世界 开源CouchDB新手入门--转
什么是NoSQL
NoSQL(是not only SQL的缩写,也有说法认为是non-relational,即非关系型数据库)其实是不使用传统的关系数据库模型,而是使用如key-value存储、文档型的、列存储、图型数据库、xml等方式存储数据的模型统称。之所以不使用传统的范式,主要是在于它们存储数据的方式发生了变化。例如,当你需要存储发票的数据时,在传统的关系数据模型中,需要设计表的结构,然后使用服务器端语言将其转化为实体对象,再传递到用户端(这就是所谓的ORM对象关系映射),而在NoSQL中,你只要保存发票数据就可以了。 NoSQL不需要预先设计表和结构就可以储存新的数值。当然,请记住,NoSQL不是银弹。如果你的项目中要保存的数据的确需要关系型数据库模型才能完成,那么应该坚持使用关系型数据库。
NoSQL的特点
NoSQL的出现主要是为了解决数据库读写性能的问题,随着越来越庞大的Web应用系统的出现,如SNS,微博等应用需要大量对数据进行读和写,并且要求进行分布式的部署,而传统的关系数据模型在大数据访问量和分布式环境下,由于关系模型中经常要对多表进行连接操作,因此性能有时会有所降低,所以NoSQL的强调的是非关系型数据,NoSQL 数据存储不需要固定的表结构,通常也不存在连接 操作。在大数据存取上具备关系型数据库无法比拟的性能优势。
在http://nosql-database.org/中,对NoSQL的描述是:非关系的,分布式的,开源的而且可以垂直扩展的。并且大多数NoSQL数据库具有以下特点:Schema-free,方便的支持数据冗余,简单的API,基于最终一致性(eventually consistent)和BASE原则(而非ACID原则)。目前,Google 的 BigTable 与 Amazon 的 Dynamo 是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的 Cassandra , Apache 的 HBase ,也得到了广泛认同。
CouchDB介绍
CouchDB是Apache组织发布的一款NoSQL开源数据库项目,是面向文档类型的Nosql。它由Erlang编写而成,使用JSON格式去保存数据。所谓文档数据库,并不是说它只能存储文本。CouchDB的字段只有三个:文档ID、文档版本号和内容。内容字段可以看到是一个text类型的文本,里面可以随意定义数据,而不用关注数据类型,但数据必须以json的形式表示并存放。CouchDB以RESTful API的格式提供服务,可以很方便地开发各种语言的客户端。
而CouchDB目前的优势在于:它的数据存储格式是JSON,而JSON为广大程序员所熟悉,便于学习,而且CouchDB还可以移值到移动设备上去,当用户不能联网时,可以在客户端保存数据,当能联网时,可以自动把数据同步到各个分布式结点上去;CouchDB还支持分布式结点的精确复制同步,可以在一个庞大的应用中,随意增加分布式的CouchDB结点,以支持数据的均衡。
作为初学者,本文指导在Windows下安装和初步使用CouchDB。因此本文并没有选择以Apache组织下的CouchDB作为介绍,因为该版本的CouchDB比较适合在Linux下进行编译安装,步骤比较复杂,因此本文选择了使用CouchOne
(http://www.couchone.com/)发布的CouchDB服务器社区版本。CouchOne公司今年与同样从事NoSQL产品的Membase公司合拼,推出了CouchBase产品(分为社区免费版和商业版),将结合Membase、Memcached和CouchDB。并实现高性能缓存,弹性集群和数据库功能等技术。而我们发现,couchone的社区版更适合于我们初学者学习。
下载安装CouchDB
首先到http://www.couchone.com/get下载couchbase的服务器版本,选择Couchbase Server的社区版本,如下图:
在下载后,直接点安装文件就会进行自动安装。在安装后,我们要启动Couchbase,启动方法为:
1)到安装目录Couchbase\Server\bin下,双击erl.exe,启动erlang环境;
2) 双击Couchbase\Server\bin下的couchdb.bat ,启动couchdb。
接着,我们通过FireFox浏览器(注意,目前只支持FireFox等浏览器,最好不要用IE),访问http://127.0.0.1:5984/_utils,就可以看到couchdb的控制台页面了,如下所示,为了更好看到couchdb的交互过程,我们可以同时打开Firebug,如下图:
顺便提醒一下,couchdb大量使用了jQuery插件机制,可以通过http://127.0.0.1:5984/_utils/script/jquery.couch.js看到代码的详细情况,有兴趣的可以查阅。
创建数据库用户
couchdb默认的用户都是admin,这其实不大安全,因此我们可以先创建一个数据库用户,我们在页面的右下角会发现如下图描述的有Welcome to Admin Party! Everyone is admin! Fix this的字样,点Fix this,然后在弹出的窗口中,可以输入自己要设置的用户名和密码,保存即可。
同时,couchdb还支持使用jQuery中的$.couch.signup()方法去创建用户,这样,你就可以按照自己的需要去为couchdb去创建用户了,比如增加一些字段属性如email等,还可以设置更详细的couchdb的权限。
开始创建一个文档数据
下面我们开始使用couchdb的控制面板去创建一个文档数据,步骤如下:
1)点Create Database,在弹出的窗口中输入文档的名称,这里我们命名为mycouchshop,点确定按钮后,可以看到在控制面板中出现了我们刚建立的文档,如下图:
2)点mycouchshop,将打开这个文档;
3) 点New Document,这将新建一个文档;
4) 在打开的文档中,点Add Field去增加字段,首先,id是默认的字段,我们不需要修改它,我们增加一个字段的名称name,然后在其value字段中写入:Nettuts CouchDB Tutorial One,注意在每输入完一个字段的值的时候,可以双击输入的文本框,让鼠标离开文本框,以方便输入下一个字段的值,最后点Save Document保存我们的输入,系统会自动增加一个rev的字段,这个是表示文档的版本号,如下图:
如何更新一个文档
要注意的是,couchdb只一个只允许增加数据的数据库,当要对数据库更新时,只是向其中增加新的更新后的版本,而保留原始的版本。下面我们要对刚才新建立的文档修改一下结构,步骤为:
1)继续打开mycouchsho数据库;
2)选择增加字段,增加一个名称为type的字段,值设置为product;
3) 选择保存该文档。
此时留意,当保存该文档后,会发现如下图所示,最下方couchdb会显示出目前这个是第几个版本:
可以看到,目前的是第2个版本了,可以点Previous Version回到上一个版本。
通过Curl去创建文档
在couchdb中,还可以使用支持使用curl的方式去新建一个文档,而通过curl向couchdb创建文档时,couchdb是通过REST的接口进行接收数据的。步骤如下,注意下面的方法需要在linux下运行创建。
1)首先创建一个json格式的文件,代码如下,将其保存为person.json:
"forename": "Gavin",
"surname": "Cooper",
"type": "person"
2) 在linux 下打开终端管理器,并且输入:curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type: application/json",而couchdb会返回如下所示的json格式响应:
...{"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c",
"rev":"1-abadd48a09c270047658dbc38dc8a892"}
可以,couchdb返回的json格式响应中,返回了id和版本号。用户可以通过curl或者其他开发语言,向couchdb提交符合RESTFUL格式的文档,基本规则为:
Post:新创建一个文档
Get:读取文档
PUT:更新一个文档
DELETE:删除一个文档
下面的例子,是通过curl去查看我们已经建立过的文档:
curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs
小结
本文简单向大家介绍了NoSQL的特点以及介绍了NoSQL家族中的一员CouchDB的安装和简单使用,NoSQL是比较新的热点技术,内容十分丰富,在以后的文章中,将教大家逐步深入学习NoSQL相关知识。