暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NoSQL学习笔记--数据存储模式(2)

张春光的一亩三分地 2018-06-22
1325

这里说的数据存储模式(Data Storage Schema),也就是数据库分类。通过:http://www.nosql-database.org可以查询到现在的NoSQL种类和数量。

NoSQL数据库存储模式主要涉及数据库建立的存放数据的逻辑结构,通俗的说就是数据结构。基本的数据查插删改等操作,数据处理对象,及在分布式状态下的一些处理模式。

键值(Key-Vaule)数据存储模式:

 

文档(Document)数据存储模式:

文档数据库(Document Store)和关系型数据库类似,也是建立在对磁盘读写的基础上,但因为首先考虑的是读写性能,因此需要去掉各种传统数据库规则约束,甚至无需事先定义数据存储结构。

文档数据库的基本要素:

键值对(Key-Value Pair):文档数据库数据存储结构的基本形式为键值对形式,具体由数据和格式组成。数据分建和值两部分,格式根据数据种类的不同有所区别,如JSON,XML等。

键一般用字符串表示;值可以用各种数据类型表示,如数字,字符串,日期,布尔值,也可以是更复杂的结构,如数组,文档。

键值对根据数据和格式的复杂程度,可以分为:基本键值对,带结构键值对,多形结构键值对。

基本键值对:键和值都是基本数据类型,例如:

{customer_id2000000,

nameMicky

}

带结构键值对:这里把值带数组或嵌入文档的叫做带结构键值对,例如:

数组:{customer_id2000000,

nameMicky

goods:[100001,100002,100003,100004]

}

子文档:{name:"<c语言>",

 bookprice:33.2,

 adddate:2017-10-1,

 allow:true,

 baseinf:{ISBN:183838388,press:"清华大学出版社"}//子文档

 }

多形结构键值对:又可以称为不规则键值对文档。

 

文档(Document):文档是由键值对构成的有续集。


图一

上述代码中,每个{}中代表一个文档,总共3个文档,每个文档里的键值对必须唯一。

集合(Collection):集合是由若干条文档构成的对象。一个集合对应的文档应该具有相关性。

在图一中,就是一个集合,我们可以围着个集合取个名字:books

 

数据库(Database):文档数据库中包含若干个集合,在进行数据操作之前,必须指定数据库名。例如

db.goodsbaseinf.insert(

[

{ item: "小学生教材",name:"《小学一年级语文(上册)",price:12},

{ item: "初中生教材",name:"《初中一年级语文(上册)",price:15},

{ item: "高中生教材",name:"《高中一年级语文(上册)",price:20},

{ item: "外语教材",name:"《英语全解\nABC五年级上",price:30}

]

)

db为数据库名称,goodsbaseinf为集合名称,insert为插入操作。

基本数据操作方式

Insert写入操作

db.goodsbaseinf.insert(

[

{ item: "小学生教材",name:"《小学一年级语文(上册)",price:12}

]

)

该操作有个特点:db存在用之不存在建之集合goodsbaseinf亦如此。

 

Select:读取查询操作。文档数据库允许进行范围查询。

db.goodsbaseinf.find(

{name:"《C语言编程》"},

{name:1,price:1,_id:0})

 

Update:修改更新操作

use goodsdb

db.order.insert(

{title:"商品购物单1"

,amount:35,

detail:[{name:"苹果",price:22},{name:"面粉",price:18}]

}

)

db.order.update({title:"商品购物单1"},{$set:{title:"商品购物单2"}})  //改订单名称

db.order.find().pretty()

 

Remove删除操作

DB.Books.Remove({"Book_ID":"100004"})

 

文档存储的优缺点:

优点:

简单:没有数据存储结构定义,不用考虑数据写入时检查各种约束,也不用考虑集合与集合对象之间的关系检查约束。

相对高效: 相对传统关系型数据库。

文档格式处理:遵循文档数据库的格式约束。

查询功能强大:相对键值数据库,其查询接近SQL数据库。

分布式处理:分布式处理能力使其具有很强的可伸缩性。

缺点:

缺少约束容易出错。

数据出现冗余。

相对键值数据库低效

根据其缺点可以看出来,很多查询,排序,统计等功能需要程序员在业务代码进行编程约束。

 

总结:

面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。

产品:MongoDB、CouchDB、RavenDB

有谁在使用:SAP (MongoDB)、Codecademy (MongoDB)、Foursquare(MongoDB)、NBC News (RavenDB)

适用的场景

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

2. 分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。

不适用场景

在不同的文档上添加事务。Document-Oriented数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。

 

 

 

 

待续......

 

列族(Column Families)数据存储模式:

 

图(Graph)数据存储模式:

 

 

 

资料来源:《NoSQL数据库入门与实践》

                    网络资源

 


文章转载自张春光的一亩三分地,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论