MongoDB基本知识(补充)

NoSQL: Not only SQL
    非关系型数据库,不是一种特定的技术,分类多种
    而关系型数据库,就是一种特定的技术

    大数据问题:BigData
        并行数据库系统:关系型数据库,采用SQL,水平切分
        NoSQL 数据库管理系统:非关系型,分布式,不支持ACID数据设计范式
            简单数据模型
            元数据和数据分离的模式
            弱一致性
            高吞吐量
            高水平扩展能力,低端硬件集群

        NewSQL数据库管理系统:
            代表:Clustrix, GenieDB, ScaleBase,MinbusDB,Drizzle

        云数据管理
    大数据的分析处理:
        MapReduce

    CAP:分布式满足两者就很不错了
        C:一致性(强)
            因果一致性
            读自写一致性
            会话一致性
        A: 可用性(随时都可以返回)
        P:分区容错性

    ACID:强一致性,隔离性,采用悲观保守方法,难以变化
    BASE:弱一致性,可用性优先,采用乐观的方法,适应变化,更加单,更快

数据存储模型:
    列式存储模型:看到跟关系型数据库样子一样,但是无法按行查(一般用于查某些字段有用)
    文档存储:MongoDB
    键值数据模型
    图式数据模型(不是图片的意思)

        列式模型:
            应用场景:在分布式文件系统之上提供支持随机读写的分布式数据存储
            典型产品:HBase、Hypertable、Cassandra
            数据模型:以“列”为中心进行存储,将同一列数据存储在一起
            优点:快速查询、高可扩展性、易于实现分布式扩展

        文档模型:
            应用场景:非强事务需求的web应用
            典型产品:MongoDB、ElasticSearch、CouchDB、CouchBase Server
            数据模型:键值模型,存储为文档
            优点:数据模型无须事先定义

        键值模型:
            应用场景:内容缓存,用于大量并行数据访问高负载场景
            典型产品:DynamoDB、Riak、Redis
            数据模型:基于哈希表实现的key-value
            优点:查询迅速

        图式模型:
            应用场景:社交网络、推荐系统、关系图谱
            典型产品:Neo4j、Infinite Graph
            数据模型:图式结构
            优点:适应于图式计算场景

    Mongod的常用选项:
        fork={true|false}: mongod是否运行在后台
        bind_ip=IP:指定监听的地址
        port=PORT: 指定监听的端口

        maxConns=: 并发最大连接数

    MongoDB的复制功能:
        两种类型:
            master/slave
            replica set: 复制集、副本集
                服务于同一数据集的多个mongodb实例

                主节点将数据修改操作保存至oplog中
                    arbiter: 仲裁者

            工作特性:至少三个,且应该为奇数个节点;可以使用arbiter来参与选举;
                heartbeat(2s), 自动失效转移(通过选举方式实现)

            复制集的中特殊类型的节点:
                0优先级的节点:冷备节点,不会被选举成为主节点,但可以参与选举;
                被隐藏的从节点:首先是一个0优先级的从节点,且对客户端不可见;
                延迟复制的从节点:首先是一个0优先级的从节点,且复制时间落后于主节点一个固定时长;
                arbiter: 

            MongoDB的复制架构:
                oplog:安装数据库后默认的数据量local 中存放
                heartbeat

                oplog: 大小固定的文件,存储在local数据库,幂等性,运行多少次,都是同一个结果

                    主节点才会写 oplog,同步给从节点,且是一个空间大小固定,所在文件系统的5%

                一个从节点加入后需要:
                    初始同步(initial sync)
                    回滚后追赶(post-rollback catch-up)
                    切分块迁移(sharding chunk migrations)

                local 数据库:
                    放了副本集的所有元数据和oplog;
                    用于存储oplog的是一个名为oplog.rs的collection;
                    oplog.rs的大小依赖于OS及文件系统,自动生成;
                    但可以自定义其大小oplogSize,

            Mongo的数据同步类型:
                初始同步:
                    节点没有任何数据时
                    节点丢失副本复制历史
                复制

                初始同步的步骤:
                    1、克隆所有数据库
                    2、应用数据集的所有改变:复制oplog并应用于本地
                    3、为所有collection构建索引

        副本集的重新选举的影响条件:
            心跳信息
            优先级
            optime
            网络连接
            网络分区

        选举机制:
            触发选举的事件:
                新副本集初始化时
                从节点联系不到主节点时
                主节点“下台”时
                    主节点收到stepDown()命令时
                    某从节点有更高的优先级且已经满足成主节点其它所有条件
                    主节点无法联系到副本集的“多数方”


    MongoDB的分片:
            CPU
            Memory
            IO

        MySQL分片需要借助: Gizzard, HiveDB, MySQL Proxy + HSACLE, Hibernate Shard, Pyshards

    MongoDB:默认就支持分片

        分片架构中的三种角色:
            mongos: Router
                将用户的强求路由到响应的分片上请求,可以认为是MongoDB的代理
            config server: 元数据服务器,哪个结点,存放了那些数据,类似分布式
                也需要多个,但是并不是副本集,所以需要第三方zookeper
            shard: 数据节点,也称mongod实例(每个结点都要有副本集,以防挂了)

        基于范围切片
            range
        基于列表切片
            list
        基于hash切片
            hash

            写离散,读集中

原文地址:https://www.cnblogs.com/JerryZao/p/9949302.html

时间: 2024-10-29 11:35:09

MongoDB基本知识(补充)的相关文章

SQL语句之 知识补充

SQL语句之 知识补充 一.存储过程 运用SQL语句,写出一个像函数的模块,这就是存储过程. 需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELIMITER $ CREATE PROCEDURE pro_test() BEGIN SELECT * FROM student; END $ CALL pro_test     -- 调用存储过程 创建存储语句: delimiter 结束符号 create procedure 存储过程名称( 参数列

iOS开发之oc(八)--小知识补充 init方法补充

小知识补充 一. id 1. 简介 万能指针,能指向任何OC对象,相当于NSObject * id类型的定义 typedef struct objc_object { Class isa; } *id; 2. 使用 // 注意:id后面不要加上* id p = [Person new]; 3. 局限性 调用一个不存在的方法,编译器会马上报错 二. .h和.m文件的抽取 1)每个类分布在不同文件中 2)类的声明放在.h文件,类的实现放在.m文件 3)若想使用某个类,就包含某个类的.h声明文件 三.

MongoDB基础知识

一.基本操作 1)创建 > post={"title":"MyBlog Post", "content":"Here's my blog post.", "date":new Date()} > db.blog.insert(post) 2)查看 > db.blog.find()或者 db.blog.findOne() 3)更新 > post.comments = [] > d

MongoDB基础知识 01

MongoDB基础知识  1. 文档  文档是MongoDB中的数据的基本单元,类似于关系型数据库管理系统的行. 文档是键值对的一个有序集.通常包含一个或者多个键值对. 例如: {”greeting" : "Hello, world!", "foo", 3} 2. 集合(collection) 集合就是一组文档,类似关系型数据库中的一张表. 3. 数据库(database) 多个文档组成集合,多个集合组成数据库.一个MongoDB实例可以承载多个数据库.

DataBase MongoDB高级知识

MongoDB高级知识 一.mongodb适合场景: 1.读写分离:MongoDB服务采用三节点副本集的高可用架构,三个数据节点位于不同的物理服务器上,自动同步数据.Primary和Secondary节点提供服务.两个节点分别提供独立域名,配合MongoDB Driver可自行实现读取压力分配. 2.业务灵活多变:由于MongoDB采用No-Schema的方式,对于初创型的业务非常适用,免去变更表结构的痛苦.用户可以将模式固定的结构化数据存储在RDS中,模式灵活的业务存储在 MongoDB中,高

DataBase MongoDB高级知识-扩展

MongoDB高级知识-易扩展 应用程序数据集的大小正在以不可思议的速度增长.随着可用宽带的增长和存储器价格的下跌,即使是一个小规模的应用程序,需要存储的数据也可能大的惊人,甚至超出了很多数据库的处理能力.过去非常罕见的T级别数据,现在已是司空见惯了. 由于需要存储的数据不断增长,开发者面临一个困难:应该如何扩展数据库?接下来完我们就来讲讲. 一.mongodb如何扩展? 1.纵向:纵向扩展就是使用计算能力更强的机器. 提升计算机的配置,但是配置高价格也随之上升,当上升到一定的程度就无法提升了.

CRM中QueryDict和模型表知识补充

1.QueryDict的用法 request.GET的用法:1.在页面上输入:http://127.0.0.1:8000/index/print(request.GET,type(request.GET))<QueryDict: {}> <class 'django.http.request.QueryDict'>在收到GET请求后,Django会将后面的参数以字典的形式接收.如果无参数就显示空字典2.在页面上输入:http://127.0.0.1:8000/index/?page

Python学习---django知识补充之CBV

Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    -->  类           CBV[function based view]  用类和URL进行匹配 POSTMAN插件 http://blog.csdn.net/zzy1078689276/article/details/77528249 基于CBV的登录实例: settings.py INSTALLED_

Python入门基础(第5天):基本数据知识补充和深浅拷贝

1.基本类型知识补充 (1)join( )  使用方法 # 将列表转换成字符串,每个元素之间用_拼接(可自定拼接字符) lst="-".join(["何东洋","he","5225"]) print(lst) # 字符串转换成列表用:split("分隔符") # 列表转换成字符串用:join("[内容]") ss="小何**晓东**假如" #字符串 print(ss.