NoSQL&MongoDB
MongoDB:
Is NoSQL(技术的实现,并非是一个特定的技术,与RMDS对立):Not only SQL
大数据问题:BigData,eg:同时访问几个页面,代码实现几个页面访问量的大小?
Four Systems:1、并行数据库:水平切分,分区查询
2、NoSQL数据库管理系统:非关系模型、分布式、不支持ACID数据库设计模式(ACID:指数据库事务正确执行的四个基本要素缩写,即 原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)
NoSQL特点:简单数据模型;元数据和数据分离;弱一致性;高吞吐量;高水平扩展能力和低端硬件集群
3.NewSQL数据库管理系统【include Nosql & ACID & SQL】
代理产品:Clustrix、GenieDB、ScalArc、ScaleDB、NimbusDB、Drizzle等
4.云数据管理
|
ACID |
BASE |
|
Strong consistency |
Weak consistency |
|
Isolation |
Availability first |
|
Focus on “commit” |
Best effort |
|
Nested transactions |
Approximate answer |
|
Availability |
Aggressive(optimistic) |
|
Conservative |
Simpler |
|
Difficult evolution(schema) |
Faster 、 Easier evolution |
大数据的分析处理:MapReduce
CAP[分布式领域CAP
(Consistency一致性、
Availability可用性、
Partition tolerance分区容错性)理论]
—注:任何分布式系统只可同时满足两点,没法三点兼顾。
(弱一致性/)最终一致性划分:因果一致性;(read your own wiriting)读 自己写一致性;会话一致性;单调(数学上单一方向)读一致性;时间轴一致性;
ACID:强一致性、隔离性、采用悲观保守的方法、难以变化;
BASE:弱一致性、可用性优先、采用乐观的方法、适应变化、更简单、更快
数据一致性的实现技术:NRW 2PC Paxos Vector Clock
数据存储模型:www.nosql.databases.org
列式存储模型Wide Column Store/Column Families
文档数据模型Document Store
镜像数据模型Key Value/Tuple Store(hash表)
图式数据模型Graph Databases
多维数据模型Multimodel Databases
列式模型:
应用场景:在分布式文件系统之上提供支持随机读写的分布式数据存储
典型产品:HBase、HyperTable、Cassandra
数据模型:以“列”为中心进行存储,将同一列数据存储在一起
优点:快速查询、高可扩展性、易于实现分布式扩展
文档模型:
应用场景:非强事务需求的web应用
典型产品:MongoDB、ElasticSearch、CouchDB、CouchBase Server
数据模型:键值模型、存储为文档
优点:数据模型无需事先定义
键值模型:
应用场景:内容缓存,用于大量并行数据访问高负载场景
典型产品:DynamoDB、Riak、Redis
数据模型:基于哈希表实现的key-value
优点:查询迅速
图式模型:
应用场景:社交网络、推荐系统、关系图谱
典型产品:Neo4j。Infinite Graph
数据模型:图式结构
优点:适用于图式计算场景
MongoDB:NoSQL、文档存储。Json
Database:支持多个database
常用命令:
Help
db.help();
db.stats()
db.serverStatus()数据库状态;mongodb数据库服务器状态
show dbs
show collections
db.getCollectionNames()
CRUD(数据库操作):
DDL,DML
JSON:JavaScript Object Notation
名称/值对象的集合
值的有序列表
find()的高级用法:
比较操作:
$gt,语法格式(filed:{$gt:VALUE})
$gte
$lt
$lte
$ne
$in,语法格式{filed:{[<value>]}}
$nin
组合条件:逻辑运算
$or:或运算,语法格式{$or:[{<expression1>},…]}
$and:与运算
$not:非运算
$nor:反运算,返回不符指定条件的所有文档
元素查询:根据文档中是否存在指定的字段进行的查询
db.mycoll.find().limit();
count()
skip()
$exists:语法格式{$filed:{exists:<boolean>}}
$mod:
$type:返回指定字段的值的类型为指定类型的文档,语法格式{filed:{$type:<BSON type>}}
1.Double,2.String,3.Object,Array,Binary data, Undefined, Boolean, Data, Null, Regular Expression, JavaScript, Timestamp
更新操作:
db.mycoll.update()
$set:修改字段的值为新指定的值;语法格式({field:value},{$set:{filed:new_value}})
$unset:删除指定字段:语法格式({filed:value},{$unset:{field1,field2,…}})
$rename:更新字段名:语法格式({$rename:{oldname:newname,oldname:newname}})
$inc
删除操作:
db.mycoll.remove(<cquery>,<justOne>)
删除collection:
db.mycoll.drop()
删除database
db.dropDatabase()
db.mycoll.drop()
php+mongodb:
php的mongodb扩展
索引:
类型:B+ Tree hash 空间索引 全文索引
MongoDB索引类型:
单字段索引
组合索引(多字段索引)
多键索引
空间索引
文本索引
Hash索引
MongoDB与索引相关的方法:
db.mycoll.ensureIndex(field[,options])
name,unique,dropDups,sparse
db.mycoll.dropIndex(index_name)
db.mycoll.dropIndexes()
db.mycoll.getIndexes()
db.mycoll.reIndex()
Mongod的常用选项:
Fork=(true|false):mongod是否运行在后台
Bind_ip=IP:指定监听的地址
port=PORT:指定监听的端口
maxConns:并发最大连接数
MongoDB的复制功能:
两种类型:
master/slave
replice set:复制集、副本集
服务于同一数据集的多个mongodb实例
主节点将数据修改操作保存至oplog中
Arbiter:仲裁者
工作特性:至少三个,且应该为奇数个节点;可以使用arbiter来参与选举;
Heartbeat(2s),自动失效转移(通过选举方式实现)
复制集的中节点分类:
0优先级的节点:冷备节点,不会被选举成为主节点,但可以参与选举;
被隐藏从节点:首先是一个0优先 级的从节点,且对客户端不可见;
延迟复制的从节点:首先是一个0优先级的从节点,且复制时间落后于主节点一个固定时长;
Arbiter:
MongoDB的复制架构:
Oplog
Heartbeat
Oplog:大小固定的文件,存储在local数据库
初始同步(initial sync)
回滚后追赶(post-rollback catch-up)
切分块迁移(sharding chunk migration)
Local:存放了副本集的所有元数据和oplog;用于存储oplog的是一个名为oplog.rs的collection;
Oplog.rs的大小依赖于OS及文件系统;但可以自定义其大小oplogSize
Mongo的数据同步类型:
初始同步:节点没有任何数据时
节点丢失副本复制历史
复制
初始同步的步骤:
- 克隆所有数据库
- 应用数据集的所有改变;复制oplog并应用于本地
- 为所有collection构建索引
副本集的重新选举的影响条件:
心跳信息
优先级
Optime:
网络连接
网络分区
选举机制:
触发选举的事件
新副本集初始化时
从节点联系不到主从点时
主节点“下台“时
主节点收到stepDown()命令时
某从节点有更高的优先级且已经满足或主节点其他所有条件
主节点无法联系到副本集的“多数方
MongoDB的分片:CPU Memory IO
MySQL:Ginzard,HiveDB,MySQL Proxy + HSACLE,Hibernate Shard,Pyshards“
分片架构中成都角色:
Mongos:Router
Config server:元数据服务器
Shard:数据节点,也称mongod实例
Zookeeper
基于范围切片:range
基于列表切片:list
基于hash切片:hash
写离散,读集中
Db.enableSharding(“testdb”)
NoSQL&MongoDB的更多相关文章
- NOSQL -- Mongodb的简单操作与使用(win10)
NOSQL -- Mongodb的简单操作与使用(wins) MongoDB 创建集合: db.createCollection(name, options) use huhu db.createCo ...
- NOSQL -- Mongodb的简单操作与使用(wins)
NOSQL -- Mongodb的简单操作与使用(wins) 启动mongodb: 1.首先启动服务 dos命令下:net start Mongndb 也可以查询服务,手动开启服务: 完成后: 2.启 ...
- NOSQL -- mongoDB的了解与安装(Wins10)
NOSQL -- mongoDB的了解与安装 首先看看什么是nosql: 我的理解:非关系型数据库,大多是以map形式存储,map<key,value>,适合存储,查询.redis也是no ...
- PCB NOSQL MongoDb MI流程指示数据存储结构
一.MI流程指示结构 二.产品型号树结构(即盲埋孔板型号结构) 三.MI流程指示UI 小结:1.MI流程指示使用的表非常之多(30多张表),存储的数据分散到各个表中,而NOSQL 一个产品型号一条记录 ...
- NOSQL—MongoDB之外的新选择
MongoDB之外的新选择 MongoDB拥有灵活的文档型数据结构和方便的操作语法,在新兴的互联网应用中得到了广泛的部署,但对于其底层的存储引擎一直未对外开放,虽说开源却有失完整.Mongo版本3中开 ...
- [你必须知道的NOSQL系列]专题一:MongoDB快速入门
一.前言 现在越来越多的公司开始采用非关系数据库了,并且很多公司的面试都要求面试者有MongoDB的使用经验,至于非关系数据库与关系型数据库之间的区别大家可以自行百度.但是作为程序员的我们,既然大部分 ...
- NoSQL高级培训课程-HBase&&MongoDB(两天版)
课程大纲 主题 时间 主题 列数据库 (第1天) 上午 HBase发展简史-Google BigTable的开源实现 HBase基础:安装部署.管理命令.运行监控和开发接口: HBase专题:服务组件 ...
- “NOSQL” 杂谈
引言: nosql 的兴起和革命,在我看来已经开始逐渐影响到了传统的sql的地位,但是仅仅是影响而已,取代是不太可能的. 正文: 两年前,一个偶然的机会开始接触到 nosql ( mongodb ). ...
- MongoDB 存储引擎和数据模型设计
标签: MongoDB NoSQL MongoDB 存储引擎和数据模型设计 1. 存储引擎 1.1 存储引擎是什么 1.2 MongoDB中的默认存储引擎 2. 数据模型设计 2.1 内嵌和引用 2. ...
随机推荐
- 三大家族,offset,scroll,client
1.client 1.1主要成员 1.clientWidth 获取网页可视区域宽度(两种用法) clientHeight 获取网页可视区域高度 (两张用法) 盒子调用: 指盒子本省 浏览器调用: ...
- Vuex 教程案例:计数器以及列表展示
本案例github:https://github.com/axel10/Vuex_demo-Counter-and-list 本篇教程将以计数器及列表展示两个例子来讲解Vuex的简单用法. 从安装到启 ...
- html学习第一弹の常用标签的归类
HTML初步学习: 行内元素:只占据他对应标签的边框所包含的空间,默认横向排布. 块级元素:块级元素占据其父元素(容器)的整个空间,因此创建了一个块,通常浏览器会在块级元素前后另起一行,默认竖向排布. ...
- Java反射总结
一. 获取Class对象的3种方法: 1. Class.forName("");例如:Class.forName("java.lang.String"); 2. ...
- 负载均衡,会话保持,session同步(转)
转自:http://bbs.linuxtone.org/thread-18212-1-1.html 一,什么负载均衡一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但 ...
- WordPress缓存插件WP Super Cache的使用及常见问题解决
WP Super Cache是一款很好的WordPress优化插件,是我用过最好的一款缓存插件.打开WordPress后台搜索插件页面,第一个就是这个插件,可想而知他的地位有多厉害了. 什么是WP S ...
- 学习python之路_入门篇A
偶尔经同事的介绍进入了金角大王的博客里,看到大王编写的文章都是关于python编程的,由于自己一直也是做软件测试方面的工作,也一直想往自动化测试方面发展,了解到利用python可以进行自动化测试操作, ...
- BAT脚本/Dos 改ip地址
BAT脚本/Dos 改ip 经常换地方上网,总改这些很麻烦,直接写三个bat,点一下就换了.需要管理员权限.之前用python的wmi写过,但是没起作用. ip:10.10.41.15 子网掩码:25 ...
- IT连创业系列:产品设计之答题模块
前言: 距上篇写完:IT连创业系列:新的一年,先淫文一篇! 转眼又两个星期了,今天不写文,估计大伙又得等两周了. 所以啊~~ 只能再努力一点了,花一天半天的,继续和大伙分享这让人心碎的创业历程. 这两 ...
- redhat7.2静默安装Oracle11.2.0.4
redhat7.2静默安装Oracle11.2.0.4我们将oracle安装到/opt/oracle目录下,后面的环境变量则以此为基础.一.设置主机hosts映射vi /etc/hosts[plain ...