NoSQL数据库

NoSQL数据库

NoSQL 特点

NoSQL是指非关系型数据库,相对于传统的关系型数据库,它具有以下特点:

  1. 非结构化数据存储:NoSQL数据库不需要预定义数据模型和表结构,可以存储非结构化和半结构化的数据,如JSON、XML、文本、图像等。
  2. 分布式数据存储:NoSQL数据库采用分布式数据存储架构,可以水平扩展,支持大规模数据存储和处理。
  3. 高可用性和容错性:NoSQL数据库具有高可用性和容错性,可以自动复制数据,保证数据的可靠性和可用性。
  4. 高性能数据访问:NoSQL数据库通常使用基于键值或文档的数据访问模型,能够实现高性能的数据读取和写入。
  5. 适合大数据和高并发场景:NoSQL数据库适合处理海量数据和高并发场景,如社交媒体、物联网、云计算等应用场景。
  6. 灵活性和扩展性:NoSQL数据库可以根据业务需求进行定制和扩展,可以通过添加新节点、增加存储空间等方式来扩展系统。

总的来说,NoSQL数据库具有非常高的可扩展性、可用性、灵活性和性能,适合处理大数据和高并发场景下的数据管理和分析需求。

大数据

大数据是指数据量非常庞大、复杂多变的数据集合,这些数据可以来自各种不同的来源,如社交媒体、传感器、设备、传统企业数据等。

特征

  1. Volume(数据量大):大数据的主要特征是其数据量巨大,以至于传统的数据处理工具无法处理它们。
  2. Velocity(数据处理速度快):大数据的产生速度非常快,因此需要快速处理和分析数据,以便及时做出决策。
  3. Variety(数据多样性):大数据来源广泛,包括结构化数据、半结构化数据和非结构化数据,因此需要能够处理和分析多种不同类型的数据。
  4. Veracity(数据准确性):大数据往往包含大量的噪音和错误,因此需要采取措施保证数据的准确性。

三种外部存储形式(DAS、SAN、NAS)

DAS、SAN、NAS都是存储领域的术语,它们分别表示:

  1. DAS(Direct Attached Storage):直接连接式存储,是一种将存储设备直接连接到服务器上的存储架构。DAS常见的形式是将硬盘或SSD通过SATA或SAS接口直接连接到服务器的内部或外部。DAS的特点是延迟低、吞吐量大、成本低,但可扩展性较差,不能满足大规模数据的存储和处理需求。
  2. SAN(Storage Area Network):存储区域网络,是一种通过网络连接存储设备和服务器的存储架构。SAN通常采用光纤通道(Fiber Channel)或iSCSI等网络技术连接服务器和存储设备,具有高可靠性、高可扩展性、高带宽等特点。SAN适用于大规模数据中心和企业级应用。
  3. NAS(Network Attached Storage):网络附属存储,是一种通过网络连接存储设备和服务器的存储架构。NAS通常采用以太网连接服务器和存储设备,具有易于管理、易于扩展等特点,适用于小型和中型企业以及个人用户。

总体而言,DAS适用于小规模数据存储需求,SAN适用于大规模数据中心和企业级应用,而NAS适用于小型和中型企业以及个人用户的数据存储需求。选择适合自己需求的存储架构可以提高数据的处理效率和准确性。

管理和查询方式

大数据的列管理和原格式存储通常采用的查询方式有以下两种:

  1. 扫描整个表格查询:在这种方式下,数据分布在多个列中,需要查询整个表格才能找到需要的数据。这种方式的查询速度较慢,但对于需要查询多个列的情况比较有效。这种方式的代表是传统的关系型数据库查询方式。
  2. 列存储查询:在这种方式下,数据按列存储,每个列都有一个独立的存储文件,因此只需读取需要的列即可找到需要的数据。这种方式的查询速度较快,尤其适合需要查询单独列的情况。这种方式的代表包括Hadoop中的列式存储、Apache Cassandra等。

总的来说,列存储适合读取较少的列,但对于读取整个表格的情况可能不如行式存储快速,需要权衡存储成本、数据量以及查询性能等因素来选择合适的存储方式和查询方式。

关系型数据库

关系模型

关系模型的特点包括:

  1. 表格化的数据结构:关系型数据库采用表格化的数据结构,每个表格包含若干行数据和若干列属性。
  2. 关系的概念:关系型数据库中的数据存储为若干个关系,每个关系由一张表格表示,通过主键和外键建立关系。
  3. SQL语言:关系型数据库使用SQL语言进行数据的操作和查询。
  4. 事务支持:关系型数据库支持ACID事务,保证数据的一致性、隔离性、持久性和原子性。

完整性约束

完整性约束是关系型数据库中的一个重要特性,它用于保证数据的一致性和完整性,包括:

  1. 实体完整性:保证每个表格中的每一行数据都有一个唯一的主键值,以便能够准确地找到和修改每一行数据。
  2. 参照完整性:保证外键引用的关系必须存在,以便能够建立关系和维护数据的一致性。
  3. 域完整性:保证数据在插入或更新时满足指定的数据类型、长度、格式、精度等规定,以便能够准确地存储和查询数据。

ACID要求

ACID是关系型数据库的一个重要特性,表示原子性、一致性、隔离性和持久性。

  1. 原子性:事务操作是一个不可分割的整体,要么全部执行成功,要么全部失败,保证数据的完整性和一致性。
  2. 一致性:事务执行前后数据库中的数据必须保持一致性,不会出现数据损坏或丢失。
  3. 隔离性:并发的事务之间相互隔离,不会相互影响,保证数据的独立性和安全性。
  4. 持久性:事务执行成功后,数据必须永久保存在数据库中,即使发生系统故障也不会丢失。

CAP原理和BASE原理

CAP原理是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个特性无法同时满足,必须舍弃其中一个或多个。具体来说:

  • 一致性(Consistency):指在分布式系统中,数据在多个节点上的副本必须保持一致,即任何时刻任何节点读取到的数据都是最新的数据。
  • 可用性(Availability):指在分布式系统中,任何时刻都能够读写数据,即系统具有高可用性。
  • 分区容错性(Partition Tolerance):指在分布式系统中,系统在遇到节点故障、网络故障等情况时仍然能够正常工作,即系统具有分区容错性。

在CAP原理中,由于分布式系统的不可避免的网络分区问题,必须选择放弃一项,以保证系统的正常运行。在实际应用中,根据不同的需求和场景,可以选择不同的权衡策略。

而BASE原则是对CAP原则的一种补充,它认为在分布式系统中,不同的应用场景对一致性的要求是不同的,因此不必追求强一致性,而应该追求基本可用性(Basically Available)、软状态(Soft state)和最终一致性(Eventually Consistent):

  • 基本可用性(Basically Available):指系统在出现故障或异常情况时,仍能够保证核心功能的正常使用。
  • 软状态(Soft state):指系统的状态可以在不同的节点之间进行传输和同步,因此系统的状态不需要全局一致。
  • 最终一致性(Eventually Consistent):指系统在一定时间内会达到一致状态,即数据在多个节点之间会在一定时间内保持一致。

BASE原则强调的是在分布式系统中,系统的可用性和性能至关重要,因此在数据的一致性和可用性之间需要进行权衡。相比CAP原则追求强一致性,BASE原则追求最终一致性,更加符合实际需求。

Hadoop

架构

Hadoop是一个由Apache开发的分布式计算框架,其架构包含以下几个组件:

  1. HDFS(Hadoop Distributed File System):Hadoop分布式文件系统,用于存储和管理大规模数据。HDFS将文件分割成多个块并存储在多个节点上,实现数据的可靠存储和高可用性。
  2. YARN(Yet Another Resource Negotiator):Hadoop资源管理器,用于分配和管理集群中的计算资源,包括内存、CPU等。
  3. MapReduce:分布式计算框架,用于实现分布式计算任务。MapReduce将大规模数据分割成多个小数据块,然后将这些小数据块分配给不同的节点进行处理,最后将结果合并。
  4. Hadoop Common:提供各个Hadoop组件所需的基础库和工具。

三个节点

在Hadoop分布式文件系统(HDFS)中,NN、DN和2NN的作用分别如下:

  1. NameNode(NN):是HDFS的主服务器,负责管理文件系统的命名空间、文件的目录树和文件的访问权限等。同时也记录着每个文件块的副本位置信息,以及块所属的DataNode的信息等。当客户端请求读取或写入文件时,它将与NameNode通信以获取所需的信息,NameNode返回对应的DataNode位置信息给客户端。同时,它也定期地向所有DataNode发送心跳信号以检查数据块的可靠性。
  2. DataNode(DN):是HDFS的工作节点,存储文件数据块以及它们的副本,并向NameNode汇报这些信息。同时,它也负责接收来自客户端和其他DataNode的写入请求,以及向其他DataNode传输数据块。DataNode定期向NameNode发送心跳信号,告知自身的存储容量和数据块的状态。
  3. Secondary NameNode(2NN):它的作用是帮助NN进行checkpoint操作,即定期将NN的元数据信息写入磁盘并保存一份最新的文件系统状态,以避免NN的元数据信息过于庞大而导致的性能问题。在Hadoop 2.x及以上版本中,2NN已经不再承担checkpoint操作,而是由NameNode自身执行。

总之,NN、DN和2NN是Hadoop集群中非常重要的组件,它们共同协作,保证了HDFS的高可用性和可靠性。

HDFS 基本配置参数

在Hadoop集群中,HDFS的配置参数对于数据的性能和可靠性具有重要影响。以下是HDFS的几个基本配置参数:

  1. dfs.replication:表示数据块的副本数。默认值为3,建议根据集群规模和数据的重要性进行调整。增加副本数可以提高数据的可靠性,但会占用更多的存储空间和网络带宽。
  2. dfs.blocksize:表示HDFS中数据块的大小,默认为128MB。可以根据文件大小、I/O并发性等因素进行调整,一般建议为128MB~256MB。
  3. dfs.namenode.name.dir:表示NameNode的数据存储目录,默认为${hadoop.tmp.dir}/dfs/name。建议将该目录设置为多个磁盘或磁盘阵列,以提高可靠性和性能。
  4. dfs.datanode.data.dir:表示DataNode的数据存储目录,默认为${hadoop.tmp.dir}/dfs/data。建议将该目录设置为多个磁盘或磁盘阵列,以提高性能和可靠性。
  5. dfs.permissions.enabled:表示是否启用HDFS的权限控制,默认为true。可以根据实际需求进行调整。

这些配置参数可以通过修改Hadoop的配置文件(如hdfs-site.xml)来进行修改。

hbase

数据模型

  1. 数据模型:HBase采用的是列族(Column Family)的数据模型,它类似于关系型数据库的表格模型,但是一个列族可以包含多个列,每个列可以在不同的行中存储不同的值。数据按照行键(Row Key)排序存储,每个行键可以对应多个列族和列,但是只能有一个版本号。在HBase中,每个表格都由一个或多个列族组成,而每个列族可以包含任意数量的列,每个列可以存储一个或多个值。HBase的数据模型是灵活的,支持动态列族的创建和删除,因此可以方便地存储半结构化和非结构化数据。

拓扑结构

  1. 拓扑结构:HBase采用的是Master-Slave结构,其中Master节点负责管理集群中的各个RegionServer,包括Region的划分、负载均衡、故障转移等工作。RegionServer是HBase中的工作节点,负责存储和管理一组Region,每个Region负责管理表格中的一部分数据。一个RegionServer可以管理多个Region,而一个Region可以存储多个行键的数据。HBase采用了ZooKeeper来维护集群的状态信息和配置信息,包括Master的选举、RegionServer的注册、故障检测等工作。

META表 寻址

  1. META表寻址:在HBase中,META表存储了所有表格的元数据信息,包括表格名称、列族名称、行键范围等,通过META表可以快速定位到指定行键所在的RegionServer。当客户端需要查询或写入一条数据时,它首先会向ZooKeeper请求获取META表的位置,然后根据行键范围查询META表中对应的RegionServer,最后通过RPC协议与RegionServer通信完成数据操作。

数据读写机制

  1. 数据读写机制:HBase采用了基于LSM树(Log-Structured Merge Tree)的数据存储和读写机制,即将数据写入MemStore内存缓存,当缓存达到一定大小时,将数据写入HDFS的HFile文件中,然后进行数据合并和压缩,生成新的HFile文件,并删除旧的HFile文件,最终形成一个包含多个HFile文件的Store文件夹。当需要查询一条数据时,先从MemStore中查找,如果找不到,则从HFile文件中查找,如果存在多个版本,则取最新的版本。

分区方式

  1. 分区方式:在HBase中,数据按照行键进行范围划分,每个Region负责管理一个或多个连续的行键范围,Region的大小可以通过表格的预分区数或自动分区机制进行控制。预分区数是指在创建表格时指定的Region数,可以根据数据大小和查询负载进行调整。自动分区机制是指在写入数据时,如果一个Region的大小超过了指定阈值,就会自动将其拆分为两个Region,以保持Region的大小均衡和数据的负载均衡。

数据表基本设计原则(常见原则2个)

  • 行键设计原则:行键应该尽量短小、有意义、易于分片和查询,避免使用随机数和复杂结构,如时间戳、哈希值等。
  • 列族设计原则:列族应该按照业务和查询需求进行划分和命名,避免列族数量过多或命名不规范的情况,同时可以根据需要进行动态创建和删除。

Cassdndra

三个特点

  • 基于列的存储结构:Cassandra的数据模型采用了列式存储结构,数据按列族存储在表中,列族可以动态创建和删除,并且支持列级别的索引和查询。
  • 高可用和容错性:Cassandra采用了分布式的架构和数据复制机制,数据被自动复制到多个节点上,保证数据的高可用性和容错性。
  • 线性可扩展性:Cassandra的节点可以随时增加和删除,支持线性的水平扩展,以满足不断增长的数据需求。

Dynamo数据一致性原理

  1. Dynamo数据一致性原理:Cassandra的设计灵感来自Amazon的Dynamo系统,它采用了Dynamo的数据一致性原理,即最终一致性。最终一致性是指在数据写入后,不保证立即在所有节点上同步,但最终所有节点的数据会达到一致状态。Cassandra通过复制机制和数据版本控制来实现最终一致性。

矢量时钟的设计目的

  1. 矢量时钟的设计目的:矢量时钟(Vector Clock)是Cassandra用来维护数据版本的机制,它是一个由节点ID和时间戳组成的向量,每次数据更新时都会增加对应节点的时间戳,用于判断不同节点的数据版本是否一致。矢量时钟的设计目的是解决分布式系统中的数据一致性问题,因为在分布式系统中,不同节点的时间戳可能不一致,所以不能单纯依靠时间戳来判断数据版本。

闲话(Gossip)

  1. 闲话(Gossip):Cassandra使用Gossip协议来实现节点间的信息交换和状态同步。Gossip协议是一种去中心化、基于事件驱动的协议,节点之间定期向周围节点发送消息,用于广播自身状态和接收其他节点的状态,通过交换状态信息来实现节点状态的同步。Cassandra使用Gossip协议来实现节点的发现、拓扑结构的维护和数据复制机制的实现。

CQL的数据类型

原生类型
  • ASCII:一个ASCII字符组成的字符串。
  • Bigint:64位有符号整数。
  • Blob:二进制数据,最大长度为2GB。
  • Boolean:布尔类型,true或false。
  • Counter:计数器类型,支持自增和自减操作。
  • Date:日期类型,支持日期相关的操作。
  • Decimal:高精度的十进制类型。
  • Double:双精度浮点类型。
  • Float:单精度浮点类型。
  • Int:32位有符号整数。
  • Text:一个UTF-8字符组成的字符串。
  • Time:时间类型,支持时间相关的操作。
  • Timestamp:时间戳类型,表示从1970年1月1日至今的毫秒数。
  • UUID:通用唯一标识符类型。
  • Varchar:一个可变长度的字符串类型。
  • Varint:任意大小的整数类型。
集合类型
  • List:有序列表,可以包含任何数据类型。
  • Set:无序集合,可以包含任何数据类型。
  • Map:键值对,可以包含任何数据类型。
用户自定义类型

可以定义自己的数据类型,并将其作为表的一部分使用。自定义类型可以包含原生类型、集合类型和其他自定义类型。

mongoDB

概述

MongoDB以BSON(二进制JSON)格式存储数据,具有高性能、易扩展、高可用性等特点。它支持动态查询、索引、负载均衡、分片和事务等功能。

配置文件重要参数

MongoDB的配置文件中包含了一些重要的参数,如:

  • bindIp:MongoDB绑定的IP地址。
  • port:MongoDB的端口号。
  • dbpath:MongoDB存储数据的路径。
  • logpath:MongoDB日志文件的路径。
  • replSetName:MongoDB副本集的名称。
  • shardName:MongoDB分片集的名称。
  • maxConns:MongoDB最大连接数。

管道和聚合

MongoDB的管道(pipeline)是一种数据聚合方法,它通过一系列的操作将多个文档组合成一个结果集。管道操作可以用于聚合数据、筛选数据、排序数据、转换数据等多种场景。

MongoDB提供了丰富的管道操作符,如 m a t c h 、 match、 matchgroup、 s o r t 、 sort、 sortproject、 l i m i t 、 limit、 limitskip等,它们可以用于构建复杂的聚合操作。

索引操作(索引类型)

MongoDB是一个基于文档的分布式数据库管理系统,以下是其相关内容:

概述

MongoDB以BSON(二进制JSON)格式存储数据,具有高性能、易扩展、高可用性等特点。它支持动态查询、索引、负载均衡、分片和事务等功能。

配置文件重要参数

MongoDB的配置文件中包含了一些重要的参数,如:

  • bindIp:MongoDB绑定的IP地址。
  • port:MongoDB的端口号。
  • dbpath:MongoDB存储数据的路径。
  • logpath:MongoDB日志文件的路径。
  • replSetName:MongoDB副本集的名称。
  • shardName:MongoDB分片集的名称。
  • maxConns:MongoDB最大连接数。

管道和聚合

MongoDB的管道(pipeline)是一种数据聚合方法,它通过一系列的操作将多个文档组合成一个结果集。管道操作可以用于聚合数据、筛选数据、排序数据、转换数据等多种场景。

MongoDB提供了丰富的管道操作符,如 m a t c h 、 match、 matchgroup、 s o r t 、 sort、 sortproject、 l i m i t 、 limit、 limitskip等,它们可以用于构建复杂的聚合操作。

索引操作(索引类型)

MongoDB支持多种类型的索引,包括:

  • 单字段索引:对单个字段进行索引。
  • 复合索引:对多个字段进行联合索引。
  • 文本索引:对文本进行全文索引。
  • 地理位置索引:对地理位置信息进行索引。
  • 散列索引:对数据进行散列,并对散列结果进行索引。

MongoDB的索引操作可以使用createIndex、ensureIndex、dropIndex等命令进行管理。

部署分片集

MongoDB支持分片(sharding)技术,可以将数据划分为多个分片(shard)存储在不同的服务器上。要部署MongoDB分片集,需要进行以下步骤:

  1. 部署config服务器:config服务器用于存储集群的配置信息。
  2. 部署mongos路由:mongos路由用于将请求路由到正确的分片上。
  3. 部署多个shard服务器:每个shard服务器存储部分数据。

在分片集群中,可以使用sh.shardCollection命令将数据分片存储,也可以使用mongos提供的自动分片功能。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值