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的数据同步类型:

                        初始同步:节点没有任何数据时

                                  节点丢失副本复制历史

                        复制

 

                        初始同步的步骤:

  1. 克隆所有数据库
  2. 应用数据集的所有改变;复制oplog并应用于本地
  3. 为所有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”)

 

posted on 2017-03-14 19:44  holyqueen  阅读(612)  评论(0编辑  收藏  举报

导航