IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Nosql复习篇(四)Mongodb和Cassandra -> 正文阅读

[大数据]Nosql复习篇(四)Mongodb和Cassandra

Chapter 6-7

MongoDB

  1. MongoDB使用基于文档型的存储模式。
  2. 和其他数据库相比,文档型存储可以描述更复杂的数据结构,例如列嵌套或文档嵌套。因此,MongoDB具有很强的数据描述能力。
  3. 在部署方式上,MongoDB可以进行单机部署,也可以实现分区和多副本,还可以实现在单机上部署多个实例。
  4. 文档型数据库采用类似JSON的方式存储数据,因此可以建立比二维表更复杂的数据结构(富数据模型),可以实现字段的嵌套和循环,这是文档型比键值对和列存储等模式的主要优势。
  5. 文档型数据库一般支持分布式架构、支持强横向扩展性、弱一致性、弱事务。
  6. 目前常见的文档型数据库有MongoDB和Apache CouchDB。
  7. MongoDB优点:功能更加丰富,支持索引(包括二级索引和地理空间索引)、支持聚合查询、支持对大文件的存储与管理。
  8. MongoDB层次
    MongoDB层次
键值对:“name”:“LJY”
文档:{“name”:“LJY”,“Age”:21}
集合:{“name”:“LJY”,“Age”:21}
      {“sport”:“Football”,“Age”:21}
一组集合可以构成数据库,一个MongoDB实例可以包含多个数据库。
  1. MongoDB采用BSON(Binary JSON)来进行数据存储与编码传输。BSON的主要优势在于改进存储结构,使检索速度更快。例如:BSON在实际存储时,会将各个字段长度存储在字段头部。

  2. BSON数据结构:
    *ObjectID:对象ID,每个文档必须有一个唯一的ID。ID一般为12字节的二进制数据。包括4个字节的时间戳、3个字节设备ID、3个字节计数器、2个字节进程ID。
    *String:utf-8编码的字符串,在文档中使用双引号引用。
    *Boolean:布尔值,true或者false,在文档中不使用引号引用。
    *Integer:整数,不用引号引用,具有32位(int)和64位(long)两种类型。
    *Double:浮点数,不用引号引用
    *Arrays:数组或者列表
    *Object:嵌入文档,一个值为一个文档
    *Null:空值
    *Timestamp:时间戳
    *Minkey/Maxkey:BSON中的最低值和最高值
    *Date:UNIX格式的日期和时间。
    *BinaryDate:二进制数据

  3. 分片机制:MongoDB将数据水平切分机制称为分片(Sharding),支持对文档的自动分片技术。分片的依据是分片键(Shard Keys)。分片键可以由文档的一个或多个字段构成,分片键决定集群中数据分布是否均衡等特性。
    *MongoDB支持三种分片策略:升序分片、哈希分片、位置分片。
    *升序分片会将片键进行升序排列,并在当前分片的数据量达到某个阈值时进行分片,此时所有新写入的数据都分片到最新的数据分片中。
    *哈希分片会将片键进行哈希运算,使数据的分布更均匀,新写入的数据可能会平均分配到所有分片中。
    *位置分片类似于对片键的前缀或字串机型判断。
    *在分片内部,数据在实际存储时还会被分为更小的块,称为chunk。一个chunk默认大小是64M,超过该大小的chunk会被分裂成两个新的chunk。如果不同服务器上chunk数量差异较大,MongoDB可以通过balancer组件将chunk的数量在各节点间平衡。

  4. 复制集:MongoDB支持多副本,多副本是以主从备份的形式实现的,这种机制称为复制集机制。
    *主节点(primary)负责数据的写入和更新,主节点在更新数据的同时,将操作写入日志(oplog)。从节点(secondary)监听主节点oplog变化,根据内容维护自身数据的更新使之和主节点保持一致。
    *由于数据写入只通过主节点进行,因此不会出现多方写入引起的数据版本冲突现象,因此写一致性更好。
    *用户既可以由主节点读取数据,也可以由从节点读取数据。如果对数据一致性要求较高,应该从主节点读取。
    *各节点之间需要相互了解、相互通信、相互检测心跳信息,当主节点宕机时,从节点会检测到该错误,并通过选举等方式,使某一从节点提升为主节点,接管对数据的更新操作。主节点选举算法成为Bully算法,从节点根据时间戳和优先级等属性进行排序,认定表中第一个为主节点。

  5. 集群架构:存在分片机制时,MongoDB集群中有三种基本角色。
    *负责存储实际数据分片的设备成为mongod。
    *mongos服务器是用户访问集群的入口,负责与客户端的交互工作,并在内存中缓存分片数据的存储和路由信息。兼具平衡存储的balancer组件功能。
    *config服务器:负责持久化存储各类元数据和配置信息,当monogos服务器启动时,会通过config服务器读取相关信息并缓存到内存。

  6. 存储引擎:
    *WiredTiger:目前推荐的存储引擎,支持文档级别的多副本和一致性管理、快照和检查点、操作日志、数据压缩等多种特性。
    *In-Memory:指将数据存储在内存中,以加速查询,但不进行持久化存储。
    *MMAPv1:MongoDB早期使用的存储引擎综合性不如WiredTiger。但由于存在时间较长,因此对一些外围组件或第三方插件的支持性可能更好。

  7. CouchDB和MongoDB的区别:
    *MongoDB不是ASF旗下的软件,遵守开源协议为GNU的AGPL3.0。couchDB是ASF旗下的软件,遵循协议Apache License2.0。
    *宏观设计较为相似,但是细节上存在一定差异。MongoDB采用C++语言编写,couchdb采用Erlang语言编写。
    *couchDB更多的采用通用技术并考虑和ASF其他模块的配合。比如其采用通用的HTTP/REST接口,使得web开发人员更容易使用。MongoDB自定了更高效的、基于TCP/IP的二进制格式协议。
    *在数据存储上,couchDB采用json合适传输和存储数据,没有集合的概念。
    *在数据查询方面,MongoDB支持动态查询,查询时不需要先建立索引,couchDB不支持动态查询,必须先为查询模式建立视图。
    *多副本和数据同步方面:couchDB支持多主节点间的数据复制,理论上多个主节点都可以支持写入操作,并且couchDB支持类似Dynamo的MVCC多版本一致性协调机制。MongoDB只支持主从复制,其一致性更容易维护。

  8. 数据库操作:查看当前连接的服务器(db.getMongo()) 查看数据库列表(show dbs)切换到某个数据库(use XX)查看数据库中的集合(show collections)删除当前数据库(db.dropDatabase())

  9. 集合操作:新建(create)删除(drop)

  10. 文档操作:插入(insert)查询(find)更新(update)删除(remove)聚合(aggregate)

  11. 索引操作:建立(createIndex)查询(getIndexes)删除(dropIndex)

cassandra

  1. cassandra开源分布式SQL数据库,是亚马逊经典分布式大数据云服务Dynamo的一个开源实现。

  2. Cassandra的特色之处:(1)无中心、对等的环形拓扑结构,而非主从式结构,这种结构使得Cassandra在多副本管理、一致性、伸缩性、拓扑管理等方面有自己的特色。集群中所有的节点都是对等的。彻底解决单点失效问题。(2)支持cql语言,可以利用类似SQL语句的方式操作数据库,因而提高整个系统的易用性。

  3. Cassandra采用分布式对等网络结构。

  4. Dynamo是一个基于点对点模型的分布式键值对存储系统。设计原则:
    *节点对称。各个节点角色类似,权重基本相同,从而简化整个集群系统的配置和维护。
    *去中心化。节点对称的基础上,避免通过主节点对集群进行集中控制。
    *水平扩展性。以主机为单位实现横向扩展,扩展方式较为简单,扩展对集群的整体影响较小。
    *支持异构设备。在扩展节点时,可以使用和源节点配置不同的主机,即集群中可以存在多种配置的主机。
    *采用多副本数据机制。强调弱一致性和高可用性。
    *采用基于键值对和列族等概念的数据模式。

  5. 基于一致性哈希的拓扑划分
    在这里插入图片描述

  6. 数据读写和一致性
    *任何节点都可以接受客户端对key的任意读写操作,并将数据最终转发存储到协调器节点,读写请求通过HTTP实现。
    *客户端选择节点有两种策略。一是客户端通过一个负载均衡器请求读写,负载均衡器根据负载信息选择一个节点接收客户端的读写请求。客户端不需要存储集群的拓扑信息。二是客户端直接根据分区信息将请求发向负责数据副本的N个节点之一,这样会少一次转发,但客户端实现较为复杂。

键空间:C(create)U(alter)R(describe)D(drop)
数据表:C(use-create)U(alter)R(desctable)D(truncate)
数据:C(insert)U(update)R(select)D(delete)

couchDB支持多主节点间的数据复制?
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:05:45  更:2021-12-07 12:06:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:49:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码