[置顶] 第八课 MongoDB GridFS

1.课程大纲
   
         
       
       本次课将分三个课时来介绍 GridFS 的相关内容,看一下本次课的主要内容,在介绍 GridFS 之前,首先会简单介绍一下分布式文件系统,然后会详细介绍 MongoDB 文件存储使用的 GridFS,最后将代码演示 GridFS 的使用。
         1.分布式文件系统简介
         2.GridFS 存储介绍
         3.GridFS 使用演示

2.课程简介
   
            传统的文件系统,将全部数据存储在本地的磁盘上,当存储容量不足时,通过单纯增加硬盘数量的方式来纵向扩展系统的存储容量,这种扩展方式不但不可持续,而且维护成本很高。
       这类典型的系统包括UFS,EXT以及NTFS等。UFS是UNIX文件系统的简称,是FFS的演化版本。UFS几乎是大部分UNIX类操作系统默认的基于磁盘的文件系统。EXT(Extended file system) 扩展文件系统,是专门为Linux系统设计的,它拥有最快的速度和最小的CPU占用率,是第一个利用虚拟内存实现的文件系统。
       NTFS (New Technology File System),是 WindowsNT 环境的文件系统,它取代了老式的FAT文件系统,与老式系统相比在性能、可靠性和磁盘空间利用率等方面都有很大的提升。
       以上的这些操作系统都是单机文件系统,也称本地文件系统,它们将数据存储在本地磁盘上,处理器通过数据总线就可以直接访问。
       而近年来,随着移动互联网以及物联网的快速发展,应用产生的数据量成指数级的增长,传统的数据存储方式在存储容量、数据备份、运维成本、数据安全等方面已经都无法很好的满足新应用环境的需求。这时人们开始寻找新的数据存储方式,分布式文件系统出现了。
       分布式文件系统可以有效解决数据的存储和管理难题,与传统的数据存储采用纵向方式扩展数据存储容量不同。分布式文件系统,将固定存储于单台服务器上的文件系统,扩展到多台机器上,每个节点负责存储部分数据,众多的存储节点组成一个文件系统网络,各个节点之间通过网络进行通信和数据传输。
       分布式文件系统通过简单的增加机器就可以扩展存储容量,实现了存储能力的水平扩展,而且分布式文件系统一般会存储数据的多个副本,这样不但保证了数据的安全而且还可以提高数据的读取效率。在使用分布式文件系统时,整个系统对于用户来说透明的,用户无需关心数据具体是存储在哪个节点上、从哪个节点来获取数据,他们只需要像使用本地文件系统一样来管理和存储系统中的数据。与传统的文件系统相比,分布式文件系统在扩展性、高可用性、运维成本方面都有很大的优势。
      下面来介绍几种比较有名的分布式文件系统,这些分布式文件系统有,NFS、HDFS、TFS、FastDFS以及下个课时要讲解的GridFS。
       NFS(Network File System),即网络文件系统,它是SUN公司于1984年推出。NFS是一个RPC Service,当使用者想用远程文件时,只要使用mount命令就可把远程文件系统安装在自己的本地文件系统之下,这时本地的NFS客户端应用就可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
       HDFS (Hadoop File System), 是Apache基金会下的一个开源项目,它是 Hadoop项目的核心子项目,系统使用JAVA语言开发,使得HDFS可以部署到多种类型的机器上。HDFS可以看作是 Google 文件系统 GFS 的开源实现,它的设计结构、理念和GFS一脉相承,都采用了主从结构的架构设计,一个HDFS集群是由一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的名字空间以及客户端对文件的访问。集群中的Datanode 负责管理它所在节点上存储的数据。HDFS 运行于廉价的普通硬件之上,可以提供容错功能,能够为用户提供高性能数据访问服务。而且在HDFS之上,开发了 MapReduce 并行编程模型,用于大数据的批处理操作,所以Hadoop 既解决了海量数据的存储问题,同时又解决了大量数据的处理问题。
       TFS(Taobao File System)是阿里巴巴的一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统。TFS 主要为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。TFS的整体架构与HDFS相同,与HDFS不同的是,它是使用c++来开发,而且它的数据组织结构采用扁平化的方式,文件名可以直接映射到文件的物理地址,这样就极大的简化了文件的访问流程,在一定程度提高了 TFS 读写性能。  yongshiyng   ci__  
       FastDFS 是一个开源的轻量级分布式文件系统,整个系统由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个角色组成,可以对文件进行存储、同步、文件访问(文件上传、文件下载)等管理操作,解决了大数据量存储和负载均衡问题,特别适合以文件为载体的在线服务,如相册网站、视频网站等。它使用纯C语言开发。与前面三种分布式系统的主从架构设计不同,FastDFS 的 Tracker server和Storage server均采用对等的架构设计,和主从结构相比,对等结构中所有结点的地位是相同的,每个结点都是Master,不存在单点问题。除此之外,FastDFS 不会对文件进行分块存储,使得存储更加简洁高效,能满足绝大多数互联网应用的实际需要。在FastDFS中,客户端上传文件时,文件ID不是由客户端指定,而是由Storage server生成后返回给客户端。文件ID中包含了组名、文件相对路径和文件名,Storage server可以根据文件ID直接定位到文件。因此FastDFS集群中根本不需要存储文件索引信息。
      GridFS 是MongoDB 针对大数据格式进行存储提供的一个解决方案,严格的说它算不上一个分布式文件系统,只是可以使用它来实现与分布式文件系统等同的功能,下个课时讲 GridFS 时会详细介绍。
       以上这些分布式文件系统的共性都是将元数据与数据的存储相分离,元数据一般存储在一个主控节点上,用于转发路由请求,数据节点负责存储分割后的数据块。其实在分布式系统中,将元数据与数据分离存储的方式是普遍存在的,这样的好处是增加了系统的扩展性。

3.详细课程视频
    视频课程链接如下:[MongoDB GridFS]

你可能感兴趣的:(mongodb)