mongodb

mongoDB

下载程序地址:

https://robomongo.org

#mongoDB 安装:mongodb是C/S架构的,有服务端和客户端

官网下载:

https://www.mongodb.com/download-center#ops-manager

github下载:

https://github.com/mongodb/mongo/tree/v2.6

rpm包下载:

    http://downloads-distro.mongodb.org/

分布式系统只能完成以下三个中的两个:

一致性、

可用性、

分区容错性

ACID:原子性、事务性、隔离性、一致性、持久性

NoSQL

mongodb

NoSQL:键值型、文档型

特点:

简单数据模型

元数据和应用数据分离

弱一致性

优势:

避免不必要的复杂性

高吞吐量

较高的水平扩展能力和低端硬件集群

不使用对象-关系映射

 劣势:

不支持ACID

功能简单

没有统一的数据查询模型

NewSQL:兼有以下功能;两种模式:将sql机制引入分布式环境、将分布式机制引入SQL

NoSQL<—>SQL(日志、锁、缓冲区管理)

代表:将sql机制引入分布式环境

mongodb

NoSQL:

键值存储

列式数据库

文档数据库

图存数据库,即离散型的数据关系

SQL:

商业

开源

缓存数据库系统:Memched,实际不具有存储能力,只具有缓存能力

mongodb

CAP:

Consistency    一致性

Availability    可用性

Tolerance to network Partitions    容忍性(对分区网络的容忍性)

满足C,A机制的:    SQL

满足C,P:    悲观枷锁(本处的一致性C指的是最终一致性,不是mysql的悲观锁)

满足A,P:    DNS

数据一致性模型:    强一致性,弱一致性,最终一致性

数据一致性的实现技术:以下五种方式

1)Quorum机制:法定票数

Quorum系统NRW策略

N:总的副本数

R:完成读操作所需都去的最少副本数

W:完成写操作所需写入的最少副本数

强一致性:R+W>N

MySQL:一主两从

R+W<=N:最多只能保证最终一致性

2)两段式提交方式:2PC(two pgase commit protocol)

有两类节点(即两个进程):

一类为协调者

一类为事物参与者

两段:

第一阶段:请求阶段

第二阶段:提交阶段

3)时间戳策略方式

4)Paxos算法方式: 帕克索斯算法

5)向量时钟方式:vector clock算法

mongodb

ACID:

Atomicity    原子性

Consistency    一致性

Isolation    隔离性

Durability    持久性

BASE:

Basucally Available    基本可用

Soft state    软状态

Eventually consistent    最终一致性

NoSQL有很多种分类方式,比较通用的分类方式是数据存储模型方式,大致分四种流派:键值模型、列式模型、文档模型、图示模型

键值模型数据库:

数据模型:(key-value)

优点:查找迅速,O(1)的时间复杂度

缺点:数据无结构,通常只被当作字符串或二进制数据

应用场景:内容缓存

实例:Redis,Dynamo

列式模型数据库

数据模型:数据按列存储,将同一列数据存在一起

优点:查找迅速、可扩展性强、易于实现分布式

缺点:功能相对SQL很有限

应用场景:分布式文件系统或分布式存储

实例:Bigtable,Cassandra,Hbase,Hypertable

文档模型数据库:

数据模型:与键值模型类似,value指向结构化数据

优点:数据格式要求不严格,无需事前定义结构

缺点:查询性能一般,缺乏统一查询语法

应用场景:web应用

实例:MongoDB、CouchDB

图式模型数据库:

数据模型:图结构模型

优点:利用图结构相关算法提高性能,满足特殊场景应用需求

缺点:难以实现分布式,功能有定向性

应用场景:社交网络、推荐系统、关系图谱

实例:Neo4J

 

各种nosql信息网站:

www.nosql-database.org

#MongoDB

mongodb

mongodb

mongodb

mongodb

mongodb

mongodb

mongodb

mongoDB数据结构:

mongodb

mongodb

实例:json,    bason

mongodb

#二进制安装、配置文件、建立启动脚本:

mongodb

mongodb

mongodb

mongodb

mongodb

mongodb

mongodb

#以下为rpm安装方式

mongodb

#建立数据存放目录;修改配置文件

mongodb

mongodb

#centos6.+ 启动命令:

service mongod start

#centos 7+ 启动命令:

#异常问题

# systemctl start mongod.service

# Job for mongod.service failed because a timeout was exceeded. See “systemctl status mongod.service” and “journalctl -xe” for details.

sudo mongod –config /etc/mongod.conf

#默认端口:

服务端口:27017

管理端口:28017

#客户端命令:连接mongod服务端

mongo     #即可直接连到本地的mongod,mongodb默认安装使用没有用户名和密码,当然可以自己建立,一般多为内网使用,不建议公网使用

mongodb

#增删改查

mongodb

mongodb

mongodb

#查看数据目录下的文件情况:

cd /mongodb/data

ls

#与SQL的区别:

#查询

mongodb

#插入 insert

mongodb

mongodb

#修改  update

mongodb

#删除

mongodb

#SQL与mongidb相关词汇的对应关系

mongodb

#mondo语法举例:

mongodb

mongodb

#查询

mongodb

mongodb

mongodb

mongodb

mongodb

mongodb

mongodb

#CRUD用法小结:

mongodb

mongodb

比较操作、逻辑操作、元素操作:

比较操作:

$lt

$lte

$in

$nin

$gt

$gte

{Field: {$opreartor: VALUE}}

逻辑操作:

$and

$or

$not

$nor

{$operator:  [{},{},{}]}

#查询出Name为User12或Age大于80的:

db.testcoll.find({$or:[{Name: “User12”},{Age: {$gt: 80}}]})

#索引的使用

索引是一种特殊的数据结构

索引通常都是顺序存储的数据结构,也有别的类型的排序规则

#索引类别:

顺序索引:  按照顺序进行。

散列索引:将索引映射到散列桶上,映射是通过散列函数进行的

#索引特点:

#优点:

1、大大减少了服务器需要扫描的数据量

2、索引可以帮助服务器减少排序或临时表的使用

3、索引可以将随机I/O转换成顺序I/O

《关系型数据库索引设计与优化 》

#索引设计:

#索引设计能力级别:共三星

一星级索引:索引如果能将相关的记录放置在一起

二星级索引:索引中数据的存储顺序与查找标准中顺序一致

三星级索引:如果索引中包含了所需要的全部数据(覆盖索引)

#评估索引的标准:

访问类型:

访问时长:

插入时常:

删除时常:

空间开销:

#顺序索引:

聚集索引:如果某记录文件中的记录顺序是按照对应的搜索码制定的顺序排序;聚集索引也称为主索引。有聚集索引的数据文件也叫做索引顺序文件。

非聚集索引:搜索码中的指定的次序与记录文件中的记录不一致

悉数索引和稠密索引:根据索引中是否为每个记录相应的创建索引项

#多级索引:

#辅助索引

#B+tree: Banlance Tree    平衡树,是一种顺序索引。

mongodb

顺序索引的特点:

全值匹配:Name = “user12”

匹配最左匹配前缀:Name LIKE “user1%”,无效:Name LIKE “%user1%”

匹配列前缀:Name LIKE “user1%”,无效:Name LIKE “%user1%”

匹配范围值:

精确匹配某一列并范围匹配另外一列:

只访问索引的查询:

组合索引:(Age,Name),Age > 80 and Name = “user12”

散列索引:

散列函数:

分布随机

分布均匀

适应场景:

精准匹配:= , IN( ) , <=>

#mongodb索引CRUD

#索引类别:

mongodb

mongodb

#创建索引:

mongodb

#查询索引:

mongodb

mongodb

mongodb