当前位置: 免费硬盘 >> 免费硬盘分类 >> 物数据库可持续性管理和维护海量数据处理
当前物数据采集站随着观测要素的增加、观测密度的增加、时间的推移,后台保存资料的数据库也越来越庞大,动辄几个G的空间大小。这就对实时数据的插入和历史数据的查询和统计操作提出了挑战,同时数据库的备份和恢复工作也越来越大。下文将从数据库的存储、数据库的设计、数据库的查询和数据库的备份等方面做出相应的处理方案。
海量数据的存取操作需要的时间比较长,软硬件要求高,并且系统资源占用率高(包括cpu,内存,I/O)。海量数据还使得存储和管理数据的成本在不断地增加。海量数据缺乏快速备份与灾难恢复机制。
现在的数据库工具厂家比较多,处理海量数据对所使用的数据库工具要求比较高,一般使用中等以上数据库软件,如Oracle、DB2、Informix、sybase、PostgreSQL,微软公司的SQLServer和开源的mysql。而不能选用对客户端连接有限制,最大支持存储空间较小的Access、VFP等数据库。当前在海量数据库的选用上Oracle和DB2用的最多。
对于海量数据的处理每个大型系统、大型网站处理方式都有点不同,但是总体还是一样的,也就是数据拆分:将数据分布在不同的地方,可以通过路由去定位到一个用户想要数据的分片上,将数据取出来。
对于数据分片位置上有以下三种方法,从效率上依次排序如下:
分布在多台服务器:就是将数据库分布在几台服务器上,使用各自的CPU、内存、硬盘等资源。
分布在磁盘阵列:将数据库分布在一台服务器上的几块硬盘上,几块硬盘组成磁盘阵列,共享CPU和内存资源。
分布在一块磁盘:将数据库分布在一块硬盘上。各个分区共享CPU、内存和硬盘资源。如果系统有多个CPU或是多个磁盘子系统,可以通过并行操作获得更好的性能。
对于数据分割方式上可以进行以下三种主要的处理:读写分离:就是通过路由的方式,将读取数据和写入数据分开在不同的服务器上,同时同步数据到读取的服务器上,这样在写入和读取的时候也就相应的加大了数据处理的速度。水平分割:就是通过将不同的数据表分开处理,如按年份分开放在不同的数据库或者数据表中,或者是按照月份分开,同时还可以按照数据的地域、种类等来分开处理。这种方法比较常用。垂直分割:就是通过将数据按列放在不同的服务器上,通过不同的用户去定位不同的服务器数据。
对海量数据进行分区操作十分必要,例如针对按年份存取的数据,我们可以按年进行分区,不同的数据库有不同的分区方式,不过处理机制大体相同。例如SQLServer的数据库分区是将不同的数据存于不同的文件组下,而不同的文件组存于不同的磁盘分区下,这样将数据分散开,减小磁盘I/O,减小了系统负荷,而且还可以将日志,索引等放于不同的分区下。
目前市场的许多数据库都具有数据库水平和垂直分片的功能,如DB2、SQLserver、Oracle、MySQL等,但是仍然有许多数据库还不支持数据库分片操作。为了解决这个问题,也有许多人设计出了分布式中间件,在应用层将数据垂直和水平拆分到多个数据库中,从而使底层的数据库能够通过分布式中间件具有分布式的特性。
虽然分区可以带来众多的好处,但也增加了运行和管理费用和复杂性。同时数据分片仍然会带来一些的问题:如随着时间的推移,各个子数据库的空间也不停的增大检索和插入效率仍然会越来越差。此时需要将各个子数据库中的数据自动迁移到一个数据仓库中,可以使用交换分区来将最旧的子数据库分区迁移到数据仓库中,也可以分别将各个子数据库中的最旧数据迁移到数据仓库中。
分片技术在自测结果中发现可以极大的提高数据检索效率并且能够降低资源的使用。一台机器上分片受IO,CPU和内存限制的情况下就可以提高性能,如果将分片子库放置在不同的硬盘上,或者不同的机器上,效果将更加明显。
一台服务器上进行海量数据查询本来就很费时间,若有大量用户的查询的请求时,服务器自然无法承受,此时需要将查询任务分担在几台服务器上。数据集群就是将相同结构的数据库保存在不同的服务器或磁盘上,通过同步操作保持数据库之间的一致性。通过集群方便的实现数据库的热备份和切换。
目前在SQLserver版本中支持集群的配置,但是在版本中集群仍然不支持负载分担特性,也只支持俩个节点的集群,浪费了硬件资源。必须要通过第三方的收费软件才能实现负载均衡和更多节点的扩展性。在Oracle中的RAP可以实现集群,它不但可以实现数据库的备份和无缝切换外,还支持64个节点的集群配置。并且在64个节点上可以进行负载分担。但是当数据库大到一定程度IO仍然会成为性能瓶颈,此时又需要借助于数据分片技术,即采用集群+分片技术。
海量数据库查询效率除了需要高配服务器做支撑,还需要考虑以下方面:
通过将海量数据库分成几个子数据库,几个服务器并行的执行单条SQL语句,可以高效快速的返回结果。在对海量数据进行查询处理过程中,
查询的SQL语句的性能对查询效率的影响是非常大的,编写高效优良的SQL脚本和存储过程,如减少关联,少用或不用游标,设计好高效的数据库表结构等都十分必要。对海量的数据处理,对大表建立索引是必行的,建立索引要考虑到具体情况,例如针对大表的分组、排序等字段,都要建立相应索引,一般还可以建立复合索引,索引的填充因子和聚集、非聚集索引都要考虑。
通常情况下,大量数据时保存在数据库中的,而应用程序访问数据库是一项很费时的操作。如果经常重复执行这些操作必然会大大增加系统的负担,降低系统的运行效率。如果先将数据库中的数据缓存到缓冲区中,当应用程序需要这些数据时,直接从缓存区中提取就可以减少这些系统开销大大调高运行效率。
海量信息的查询结果全部显示出来必然要不小的代价,但是如果按页返回逐批逐批的返回结果将一次大的查询分布到多次查询中,每次小的查询代价则可以在用户可以忍耐的范围内返回。目前常用的方法由游标,分页存储过程等。数据库备份恢复策略需要根据数据库的存储策略来定义,一般可以从数据库的备份粒度、备份时间、备份方法等来具体考虑。
集群间的数据时刻同步的,各个数据库的结构和内容是完全一致的。集群本身就自动实现了数据库的备份工作。对于数据库的分片而言,如果以后不会增加新的分片的话只需备份整个数据库或单独备份各个数据库分片即可。而如果数据库分片由于数据太大而要迁移到数据仓库中时,数据库分片的各个子库和总库都做备份,子库逐步同步到总仓库上。
海量数据的相关处理技术的选择需要考虑许多方面:
以业务需求为导向,根据需求选择合适的技术。尽管选择出的技术和方案可能有些限制,可能效率、扩展性等方面不如行业内其他先进的技术。分片技术虽然也有局限性,但是对于业务应用上,数据修改操作很少、要素分类清晰、资料时间上连续的情况很适合应用。
从成本上或跨平台上考虑,选择中型数据库还是大型数据库或者完全开源的数据库。
从架构上考虑,分片采用水平还是垂直分片,水平或垂直又按照什么内容划分。分布式存储是在各个子库数据冗余还是各个子库数据唯一。从水平上可以从时间上划分,从业务应用场合可以从垂直上进行划分。
是否采用集群,集群扩展性如何。采用集群必然会设计到部署安装成本和数据库的选择,当然也可以使用第三方或自己开发中间件技术。
容灾能力。包括故障处理,灾难恢复。根据数据存储和架构如何设计容灾保证高可用。未来的应用需求上必定需要实现主备切换,故障还原的功能,快速一致性的实现数据库的备份和同步方案可以淡定的保容灾的恢复。
如果采用分片技术,采用手工还是定时脚本去维护,分库太大后如何处理,分库需要迁移怎么处理。手工维护肯定是辅助的工作,需要让系统定时而又安全的迁移到仓库中。
海量数据存储技术的发展前展,可以归结为以下几个方面:
下一代储技术:高容量光存储技术。分布式存储与P2P存储。
数据网格:为了满足人们对高性能、大容量分布存储能力的要求所提出的概念,类似于计算网格,并行分布式协同工作。使用非关系型数据库NOSQL处理海量数据技术逐步推广。
免费Hadoop技术的逐步应用,该技术在商业巨头Google、Yahoo、Facebook、淘宝、赛门铁克等公司都有广泛的应用