mongodb
mongoDB
下载程序地址:
#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
NoSQL:键值型、文档型
特点:
简单数据模型
元数据和应用数据分离
弱一致性
优势:
避免不必要的复杂性
高吞吐量
较高的水平扩展能力和低端硬件集群
不使用对象-关系映射
劣势:
不支持ACID
功能简单
没有统一的数据查询模型
NewSQL:兼有以下功能;两种模式:将sql机制引入分布式环境、将分布式机制引入SQL
NoSQL<—>SQL(日志、锁、缓冲区管理)
代表:将sql机制引入分布式环境
NoSQL:
键值存储
列式数据库
文档数据库
图存数据库,即离散型的数据关系
SQL:
商业
开源
缓存数据库系统:Memched,实际不具有存储能力,只具有缓存能力
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算法
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信息网站:
#MongoDB
mongoDB数据结构:
实例:json, bason
#二进制安装、配置文件、建立启动脚本:
#以下为rpm安装方式
#建立数据存放目录;修改配置文件
#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默认安装使用没有用户名和密码,当然可以自己建立,一般多为内网使用,不建议公网使用
#增删改查
#查看数据目录下的文件情况:
cd /mongodb/data
ls
#与SQL的区别:
#查询
#插入 insert
#修改 update
#删除
#SQL与mongidb相关词汇的对应关系
#mondo语法举例:
#查询
#CRUD用法小结:
比较操作、逻辑操作、元素操作:
比较操作:
$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 平衡树,是一种顺序索引。
顺序索引的特点:
全值匹配:Name = “user12”
匹配最左匹配前缀:Name LIKE “user1%”,无效:Name LIKE “%user1%”
匹配列前缀:Name LIKE “user1%”,无效:Name LIKE “%user1%”
匹配范围值:
精确匹配某一列并范围匹配另外一列:
只访问索引的查询:
组合索引:(Age,Name),Age > 80 and Name = “user12”
散列索引:
散列函数:
分布随机
分布均匀
适应场景:
精准匹配:= , IN( ) , <=>
#mongodb索引CRUD
#索引类别:
#创建索引:
#查询索引: