没有合适的资源?快使用搜索试试~ 我知道了~
CAP(Consistency,Availabiity,Partitiontolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。关系型数据库通过把更新操作写到事务型日志里实现了部分耐用性,但带来的是写性能的下降。MongoDB等NoSQL数据库背后蕴涵的哲学是不同的平台应该使用不同类型的数据库,MongoDB通过降低一些特性来达到性能的提高,这在很多大型站点中是可行的。因为MongoDB是非原子性的,所以如果如果应用需要事务,还是需要选择MySQL等关系数据库。NoSQL数据库,顾名思义就是打破了传统关系型数据库的范式约束。很
资源推荐
资源详情
资源评论
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/14969006/bg1.jpg)
NoSQL数据库数据库-MongoDB和和Redis
1NoSQL简述
CAP(Consistency,Availabiity,Partitiontolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错
性这三个需求,最多只能同时满足两个。关系型数据库通过把更新操作写到事务型日志里实现了部分耐用性,但带来的是写性
能的下降。MongoDB等NoSQL数据库背后蕴涵的哲学是不同的平台应该使用不同类型的数据库,MongoDB通过降低一些特
性来达到性能的提高,这在很多大型站点中是可行的。因为MongoDB是非原子性的,所以如果如果应用需要事务,还是需要
选择MySQL等关系数据库。
NoSQL数据库,顾名思义就是打破了传统关系型数据库的范式约束。很多NoSQL数据库从数据存储的角度看也不是关系型数
据库,而是key-value数据格式的hash数据库。由于放弃了关系数据库强大的SQL查询语言和事务一致性以及范式约
束,NoSQL数据库在很大程度上解决了传统关系型数据库面临的诸多挑战。
在社区中,NoSQL是指“notonly sql”,其特点是非关系型,分布式,开源,可水平扩展,模式自由,支持replication,简单的
API,最终一致性(相对于即时一致性,最终一致性允许有一个“不一致性窗口”,但能保证最终的客户都能看到最新的值)。
2MongoDB简介
mongo取自“humongous”(海量的),是开源的文档数据库──nosql数据库的一种。
MongoDB是一种面向集合(collection)的,模式自由的文档(document)数据库。
面向集合是说数据被分成集合的形式,每个集合在数据库中有惟一的名称,集合可以包含不限数目的文档。除了模式不是预先
定义好的,集合与RDBMS中的表概念类似,虽然二者并不是完全对等。数据库和集合的创建是“lazy”的,即只有在第一个
document被插入时集合和数据库才真正创建——这时在磁盘的文件系统里才能看见。
模式自由是说数据库不需要知道存放在集合中的文档的结构,完全可以在同一个集合中存放不同结构的文档,支持嵌入子文
档。
文档类似于RDBMS中的记录,以BSON的格式保存。BSON是BinaryJSON的简称,是对JSON-like文档的二进制编码序列
化。像JSON(JavaScriptObject Notation)一样,BSON支持在对象和数组内嵌入其它的对象和数组。有些数据类型在JSON
里不能表示,但可以在BSON里表示,如Date类型和BinData(二进制数据),Python原生的类型都可以表示。与
ProtocalBuffers(Google开发的用以处理对索引服务器请求/应答的协议)相比,BSON模式更自由,所以更灵活,但这样也
使得每个文档都要保存字段名,所以空间压缩上不如ProtocolBuffers。
BSON第一眼看上去像BLOB,但MongoDB理解BSON的内部机制,所以MongoDB可以深入BSON对象的内部,即使是嵌套的
对象,这样MongoDB就可以在顶层和嵌套的BSON对象上建立索引来应对各种查询了。
MongoDB可运行在Linux、Windows和OSX平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为
MongoDB为了提高性能使用了内存映射文件进行数据管理,而在32位模式运行时支持的最大文件为2GB。
MongoDB查询速度比MySQL要快,因为它cache了尽可能多的数据到RAM中,即使是non-cached数据也非常快。当前
MongoDB官方支持的客户端API语言就多达8种(C|C++|Java|Javascript|Perl|PHP|Python|Ruby),社区开发的客户端API还
有Erlang、Go、Haskell......
3术语介绍
数据库、集合、文档
每个MongoDB服务器可以有多个数据库,每个数据库都有可选的安全认证。数据库包括一个或多个集合,集合以命名空间的
形式组织在一起,用“.”隔开(类似于JAVA/Python里面的包),比如集合blog.posts和blog.authors都处于"blog"下,不会与
bbs.authors有名称上的冲突。集合里的数据由多个BSON格式的文档对象组成,document的命名有一些限定,如字段名不能
以"$"开头,不能有".",名称"_id"被保留为主键。
如果插入的文档没有提供“_id”字段,数据库会为文档自动生成一个ObjectId对象作为“_id”的值插入到集合中。字段“_id”的值可
以是任意类型,只要能够保证惟一性。BSONObjectID是一个12字节的值,包括4字节的时间戳,3字节的机器号,2字节的进
程id以及3字节的自增计数。建议用户还是使用有意义的“_id”值。
MongoDb相比于传统的SQL关系型数据库,最大的不同在于它们的模式设计(SchemaDesign)上的差别,正是由于这一层
次的差别衍生出其它各方面的不同。
如果将关系数据库简单理解为由数据库、表(table)、记录(record)三个层次概念组成,而在构建一个关系型数据库的时
候,工作重点和难点都在数据库表的划分与组织上。一般而言,为了平衡提高存取效率与减少数据冗余之间的矛盾,设计的数
据库表都会尽量满足所谓的第三范式。相应的,可以认为MongoDb由数据库、集合(collection)、文档对象(Document-
oriented、BSON)三个层次组成。MongoDb里的collection可以理解为关系型数据库里的表,虽然二者并不完全对等。当然,
不要期望collection会满足所谓的第三范式,因为它们根本就不在同一个概念讨论范围之内。类似于表由多条记录组成,集合
也包含多个文档对象,虽然说一般情况下,同一个集合内的文档对象具有相同的格式定义,但这并不是必须的,即MongoDb
的数据模式是自由的(schema-free、模式自由、无模式),collection中可以包含具有不同schema的文档记录,支持嵌入子
文档。
![](https://csdnimg.cn/release/download_crawler_static/14969006/bg2.jpg)
4MongoDB资源消耗
考虑到性能的原因,mongo做了很多预分配,包括提前在文件系统中为每个数据库分配逐渐增长大小的文件集。这样可以有
效地避免潜在的文件系统碎片,使数据库操作更高效。
一个数据库的文件集从序号0开始分配,0,1...,大小依次是64M,128M,256M,512M,1G,2G,然后就是一直2G的创建
下去(32位系统最大到512M)。所以如果上一个文件是1G,而数据量刚好超过1G,则下一个文件(大小为2G)则可能有超过
90%都是空的。
如果想使磁盘利用更有效率,下面是一些解决方法:
1. 只建立一个数据库,这样最多只会浪费2G。
2. 每个文档使用自建的“_id”值而不要使用默认的ObjectId对象。
3. 由于每个document的每个字段名都会存放,所以如果字段名越长,document的数据占用就会越大,因此把字段名缩短会大
大降低数据的占用量。如把“timeAdded”改为“tA”。
Mongo使用内存映射文件来访问数据,在执行插入等操作时,观察mongod进程的内存占用时会发现量很大,当使用内存映射
文件时是正常的。并且映射数据的大小只出现在虚拟内存那一列,常驻内存量才反应出有多少数据cached在内存中。
【按照mongodb官方的说法,mongodb完全由系统内核进行内存管理,会尽可能的占用系统空闲内存,用free可以看到,大
部分内存都是作为iocache被占用的,而这部分内存是可以释放出来给应用使用的。】
5交互式shell
mongo类似于MySQL中的mysql进程,但功能远比mysql强大,它可以使用JavaScript语法的命令从交互式shell中直接操作数
据库。如查看数据库中的内容,使用游标循环查看查询结果,创建索引,更改及删除数据等数据库管理功能。下面是一个在
mongo中使用游标的例子:
> for(var cur= db.posts.find(); cur.hasNext();) {
...print(tojson(cur.next()));
... }
输出:
{
"_id" :ObjectId("4bb311164a4a1b0d84000000"),
"date" : "Wed Mar 3117:05:23 2010",
"content" :"blablablabla",
"author" :"navygong",
"title" : "the firstblog"
}
...其它的documents。
6一般功能
6.1插入
客户端把数据序列化为BSON格式传给DB后被存储在磁盘上,在读取时数据库几乎不做什么改动直接把对象返回给客户端,
由client完成unserialized。如:
> doc ={'author': 'joe', 'created': new Date('2010, 6, 21'), 'title':'Yet another blogpost', 'text': 'Here is the text...', 'tags':
['example', 'joe'], 'comments':[{'author': 'jim', 'comment': 'I disgree'}, {'author': 'navy', 'comment': 'Goodpost'}], '_id': 'test_id'}
>db.posts.insert(doc)
6.2查询
基本上你能想到的查询种类MongoDB都支持,如等值匹
配,<,<=,>,>=,$ne,$in,$mod,$all,$size[1],$exists,$type[2],正则表达式匹配,全文搜索,......。还有
distinct(),sort(),count(),skip()[3],group()[4],......。这里列表的查询中很多用法都和一般的RDBMS不同。
[1]匹配一个有size个元素的数组。如db.things.find({a:{$size: 1}})能够匹配文档{a:["foo"]}。
[2] 根据类型匹配。db.things.find({a: {$type : 16}})能够匹配所有a为int类型的文档。BSON协议中规定了各种类型对应的枚举
值。
[3]指定跳过多少个文档后开始返回结果,可以用在分页中。如:db.students.find().skip((pageNumber-
1)*nPerPage).limit(nPerPage).forEach(function(student) { print(student.name + "<p>"); } )。
[4] 在shardedMongoDB配置环境中应该应该使用map/reduce来代替group()。
![](https://csdnimg.cn/release/download_crawler_static/14969006/bg3.jpg)
6.3删除
可以像查询一样指定条件来删除特定的文档。
6.4索引
可以像在一般的RDBMS中一样使用索引。提供了建立(一般、惟一、组合)索引、删除索引、重建索引等各种方法。索引信
息保存在集合“system.indexes”中。
6.5map/reduce
MongoDB提供了map/reduce方法来进行数据的批处理及聚集操作。和Hadoop的使用类似,从集合中接收输入,结果输出到
另一个集合。如果你需要使用group,map/reduce会是个不错的选择。但MongoDB中的索引和标准查询不是使用
map/reduce,而是与MySQL相似。
7模式设计
Mongo式的模式设计
使用Mongo有很多种方式,你本能上可能会像使用关系型数据库一样去使用。当然这样也可以工作得很好,但却没能发挥出
Mongo的真正威力。Monog是专门设计为富对象模型(richobject model)使用的。
例如:如果你建立了一个简单的在线商店并且把产品信息存储在关系型数据库中,那你可能会有两个像这样的表:
item
title
price sku
item_features
sku
feature_name feature_value
你进行了范式处理因为不同的物品有不同的特征,这样你不用建立一个包含所有特征的表了。在Mongo中你也可以像上面那
样建立两个集合,但像下面这样存储每种物品会更有效。
item : {
"title" : <title> ,
"price" : <price> ,
"sku" : <sku> ,
"features" : {
"optical zoom" : <value> ,
...
}
}
因为只要查询一个集合就能取得一件物品的所有信息,而这些信息都保存在磁盘上同一个地方,因此大大提高了查询的速度。
如果你想插入或更新一种特征,如db.items.update({ sku : 123 } , { "$set" : { "features.zoom" :"5" } } ),也不必在磁盘上移动整
个对象,因为Mongo为每个对象在磁盘上预留了空间来适应对象的增长。
8嵌入与引用
以一实例来说,假设需要设计一个小型数据库来存储“学生、地址、科目、成绩”这些信息,那么关系型数据库的设计如图1所
示,而key-value型数据库的设计则可能如图2所示。
图1关系型的数据库设计
剩余14页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38651273
- 粉丝: 0
- 资源: 969
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- Dui list排序,Dui list排序
- Biblioteca de Processamento e Visualização de Dados IoT em Tempo
- A personal budget tracker in Python is a software or application
- CWebPage类,用于VC和JS混合编程
- 电脑必装神器:验证码识别v2.0-便携版.rar
- home assistant安装相关资料
- springboot305基于Java的银行账目账户管理系统的设计与实现
- S3C2410X英文技术手册
- 基于html5的网上团购系统设计与实现
- yaml-cpp包,用于导入
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)