海量数据的理想存储方案

随着信息化建设的不断深刻,企业级的信息管理平台已经完成了从信息化建设到数据积累的职能转变,在一些信息化起步较早、系统建设较规范的行业,如通讯、金融、大型生产制造等领域,海量数据的存储、分析需求的迫切性日益明显。java

    以移动通讯运营商为例,随着移动业务和用户规模的不断扩大,天天都产生海量的业务、计费以及网管数据,然而庞大的数据量使得传统的数据库存储已经没法知足存储和分析需求。主要面临的问题包括:linux

  1. 数据库容量有限:关系型数据库并非为海量数据而设计,设计之初并无考虑到数据量可以庞大到PB级。为了继续支撑系统,不得不进行服务器升级和扩容,成本高昂,难以接受。
  2. 并行取数困难:除了分区表能够并行取数外,其它状况都要对数据进行检索才能将数据分块,并行读数效果不明显,甚至增长了数据检索的消耗。虽然能够经过索引来提高性能,但实际业务证实,数据库索引做用有限。
  3. 针对J2EE应用来讲,JDBC的访问效率过低,因为java的对象机制,读取的数据都须要序列化,致使读数速度很慢。
  4. 数据库并发访问数太多,会致使I/O瓶颈和数据库的计算负担过重两个问题,甚至出现内存溢出崩溃等现象,但数据库扩容成本过高。

    理想的解决方案是把大数据存储到分布式文件系统中:数据库

  1. 只要增长机器和硬盘,则容量不限,理论上数据能够无限扩大;
  2. 并行取数容易,因为文件能够根据字节数来访问,能够直接定位从第n字节开始读取,到第m字节读取结束,不存在检索划分数据块的问题;
  3. 不存在IO瓶颈。因为分布式文件系统是把数据存储到不一样机器上,并行/并发 读数时,分别从不一样的机器读数,有效规避了IO瓶颈问题;
  4. 用java读数时,虽然一样存在序列化的问题,可是避开了JDBC,避免了JDBC带来的性能问题;
  5. 数据计算可使用单独的计算引擎,计算引擎可部署于廉价的PC上,能够以很低的成本较为容易的实现并行,增长并行节点成本比数据库扩容成本低不少。

    当前比较流行的分布式文件系统包括:Lustre、HDFS、MogileFS、FastDFS、NFS等。缓存

    Lustre是由SUN公司开发、在linux下运行的以C/C++开发的集群并行文件系统,采用分布式的锁管理机制来实现并发控制,元数据和文件数据的通信链路分开。虽然在性能、可用性和扩展性上有一些优势,但其缺点也一样明显:须要特殊设备的支持,并且分布式的元数据服务器管理尚未实现。服务器

    MogileFS是一个开源的分布式文件系统,主要特色包括:应用层组件、无单点故障、自动文件复制、具备比RAID更好的可靠性、无需RAID nigukefs支持等,缺点包括:用Perl编写,有依赖模块的问题,安装过程当中须要其余库和模块的支持,对于不懂perl的人,安装和使用很困难。MogileFS不支持对一个文件内部的随机或顺序读写,不支持视频拖动,所以只适合作一部分应用,如图片服务、静态HTML服务等。另外,MogileFS过分依赖数据库,包括它的高可用性也须要靠数据库的HA实现,官方文档也比较缺少,没有详细的使用说明。并发

    FastDFS是一个专用的文件系统,和MogileFS比较相似,须要使用专门的API来访问,不是通用的文件系统,不能mount成path的形式使用。只使用于一些特定的应用领域,好比网站存储图片、视频文件等。负载均衡

    NFS。优势是:Linux直接在内核予以支持,使用方便,发展多年,比较成熟。缺点:可扩展性差,难以应用于大量存储节点和客户端的集群式(cluster)系统;文件服务器的定位(location)对客户端不透明,维护困难;缓存管理机制采用按期刷新机制,可能会产生文件不一致;不支持数据复制、负载均衡等分布式文件系统的高级特性,很容易出现系统的性能瓶颈;另外,NFS服务器的更换须要系统暂停服务,对于异地服务的支持能力不够。总的来讲,NFS太老了,对于追求海量数据吞吐量、存在成千上万个客户端和存储节点的互联网应用来讲有点力不从心。分布式

    HDFS是Hadoop的文件系统,其目的是向应用数据提供高吞吐量访问的分布式文件系统,是GFS的开源实现。
其最大的优势包括:无需替换现有系统,而是利用该分布式文件系统加强现有系统的处理能力。一方面,HDFS能够从已有系统上接手海量数据的处理,使已有系统能够专一于其设计目的,如实时交易数据处理、交互式商业智能,这些海量数据处理包括但不限于同步数据吞吐、处理、交换大规模数据等。另外一方面,HDFS能够从任意多的数据源吞入任何类型的数据,来自多个数据源的数据能够按任何须要的方式合并或聚合,从而实现任意单一系统没法实现的深度分析。oop

    HDFS不处理索引和关系,因此在HDFS中存储数据时不用考虑未来如何分析这些数据。在和数据库交互方面,HDFS支持JDBC,而大部分数据库都支持数据的批量导入/导出。因此不管哪一种状况,将整个数据库中的数据常常性的或者以增量的方式导入到HDFS中很容易实现。大多数时候,HDFS能够被设计为存储海量数据以及按须要向任意系统传递数据,数据能够常常性地从关系型数据库系统导入到HDFS中,通过这样的调整,关系型数据库能够专门用来处理交互式任务,而复杂的分析工做就能够按离线的方式交由HDFS来完成,对实施系统没有任何影响。
综上所述,海量数据比较理想的存储方案是分布式文件系统,而分布式文件系统中,HDFS是比较理想的一款。性能

相关文章
相关标签/搜索