wangzhongyang / books

存储电子书,以供平时看看
0 stars 0 forks source link

分布式文件存储、NoSQL #8

Open wangzhongyang opened 2 years ago

wangzhongyang commented 2 years ago

分布式文件存储

对比

分布式文件存储对比

HDFS 架构图

image

HDFS 名词解释

  1. HDFS集群分为两大角色:NameNode、DataNode
  2. NameNode负责管理整个文件系统的元数据(元数据就是文件数据块放置在DataNode位置和数量等信息)
  3. DataNode 负责管理用户的文件数据块
  4. 文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
  5. 每一个文件块可以有多个副本,并存放在不同的datanode上
  6. Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量
  7. HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

HDFS 写入

  1. Client向Namenode通信请求上传文件,Namenode检查目标文件是否已存在,父目录是否存在
  2. Namenode返回是否可以上传
  3. Client请求第一个 block该传输到哪些Datanode服务器上
  4. Namenode返回3个Datanode服务器ABC
  5. Client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端
  6. Client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
  7. 当一个block传输完成之后,Client再次请求Namenode上传第二个block的datanode服务器

HDFS 读取

  1. 跟namenode通信查询元数据,找到文件块所在的datanode服务器
  2. 挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
  3. datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
  4. 客户端以packet为单位接收,现在本地缓存,然后写入目标文件

NOSQL (非关系型数据库)

关系型数据库使用范围

  1. 这些数据通常需要做结构化查询,比如join,这时候,关系型数据库就要胜出一筹
  2. 这些数据的规模、增长的速度通常是可以预期的
  3. 保证数据的事务性、一致性要求

列式数据库

  1. 对应的nosql: HBase、ClickHouse、BigTable等
  2. 典型应用场景:按列存储,针对某一列或者某几列的查询有非常大的IO优势
  3. 优点:查找速度快,可扩展性强,更容易进行分布式扩展
  4. 缺点:功能相对局限

文档数据库

  1. 应的nosql:CouchDB, MongoDb
  2. 型应用场景:存储类似JSON格式的内容,可对某些字段建立索引功能,是最像关系型的数据库。
  3. 点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构。
  4. 点:查询性能不高,而且缺乏统一的查询语法

内存键值数据库

  1. 对应的nosql:Redis,Memcached等
  2. 典型应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
  3. 优点:查找速度快。

图数据库

。。。

KV数据库 LevelDB

image

它最早由google开发并且开源,Facebook在此基础上进行优化,推出了更普及的RocksDB,后来包括TiDB等多种分布式noSQL数据库的底层都是基于leveldb。适用于写多读少的场景

LMM(Log Structured Merge),lsm_tree对索引变更进行延迟及批量处理,并通过一种类似于归并排序的方式高效地将更新迁移到磁盘,降低索引插入开销。