目前随着观测元素的增加,观测密度的增加,时间的推移,后台存储数据的数据库越来越大,动辄几个g 空的规模。这对实时数据的插入、历史数据的查询和统计操作提出了挑战,同时数据库的备份和恢复也变得越来越重要。下面我们将从数据库存储、数据库设计、数据库查询、数据库备份等方面做出相应的解决方案。
海量数据的访问操作耗时长,软硬件要求高,系统资源利用率高。海量数据也增加了存储和管理数据的成本。海量数据缺乏快速备份和灾难恢复机制。

现在数据库工具的厂商很多,用来处理海量数据的数据库工具要求很高。一般都是使用中级以上的数据库软件,比如Oracle,DB2,Informix,sybase,PostgreSQL,微软的SQL Server和开源的mysql。但是不能选择Access、VFP等对客户端连接有限制,最大可以支持较小存储空的数据库。目前使用最广泛的数据库是Oracle和DB2。
对于海量数据的处理,每个大型系统、大型网站都有不同的处理方式,但总体情况还是一样的,那就是数据拆分:数据可以分布在不同的地方,通过路由定位到用户想要的一块数据上,就可以把数据取出来。
有以下三种定位数据碎片的方法,按效率排序:
分布在多台服务器上:数据库分布在几台服务器上,使用各自的CPU、内存、硬盘等资源。
分布式磁盘阵列:数据库分布在一个服务器中的几个硬盘上,几个硬盘组成一个磁盘阵列,共享CPU和内存资源。
分布在一个磁盘上:将数据库分布在一个硬盘上。每个分区共享CPU、内存和硬盘资源。如果系统有多个CPU或多个磁盘子系统,可以通过并行操作获得更好的性能。
数据分段可以采用以下三种主要的处理方法:读写分离:即通过路由将读数据和写数据分离在不同的服务器上,同时将数据同步到读服务器上,这样读写时数据处理速度也相应提高。横向分段:是指不同的数据表分别处理,比如按年份在不同的数据库或数据表中打开,或者按月份分开。同时,可以根据地区和数据类型分别进行处理。这种方法相当普遍。垂直分段:即通过将数据放在不同服务器上的列中,不同的用户可以定位不同的服务器数据。
需要对海量数据进行分区。例如,对于按年份访问的数据,我们可以按年份进行分区。不同的数据库有不同的分区方法,但是处理机制一般是一样的。比如SQL Server的数据库分区将不同的数据存放在不同的文件组中,而不同的文件组存放在不同的磁盘分区中,这样分散了数据,减少了磁盘I/O,降低了系统负载,还可以放置日志、索引等。在不同的分区。
目前市面上很多数据库都有横向和纵向数据库分片的功能,如DB2、SQLserver、Oracle、MySQL等。,但仍有许多数据库不支持数据库碎片。为了解决这个问题,很多人设计了分布式中间件,在应用层将数据纵向和横向拆分到多个数据库中,通过分布式中间件使底层数据库可以具有分布式的特点。
虽然分区可以带来许多好处,但它也增加了运营和管理的成本和复杂性。同时,数据碎片化还是会带来一些问题:比如随着时间的推移,各个子数据库的空不断增加,检索和插入的效率会越来越差。此时,需要将每个子数据库中的数据自动迁移到数据仓库中。可以使用exchange分区将最旧的子数据库分区迁移到数据仓库,也可以将每个子数据库中最旧的数据分别迁移到数据仓库。
自检结果表明,分片技术可以大大提高数据检索的效率,减少资源的使用。当一台机器上的切片受到IO、CPU和内存的限制时,可以提高性能。如果切片库放在不同的硬盘或者不同的机器上,效果会更明显。
在一台服务器上查询海量数据本身就非常耗时。如果有大量用户的查询请求,服务器自然会承受不了。此时,查询任务需要在几个服务器之间共享。数据集群是将结构相同的数据库保存在不同的服务器或磁盘上,通过同步操作保持数据库之间的一致性。通过集群可以方便地实现数据库的热备份和切换。
目前SQLserver版本支持集群配置,但是在2008版本中,集群仍然不支持负载分担,只支持双节点集群,浪费了硬件资源。只有通过第三方计费软件才能实现负载均衡和更多节点的可扩展性。Oracle中的RAP可以实现集群化,不仅可以实现数据库备份和无缝切换,还可以支持64个节点的集群配置。并且可以在64个节点上分担负载。但是,当数据库足够大时,IO仍然会成为性能瓶颈。这时候就需要数据分片技术,即采用集群+分片技术。

海量数据库查询的效率需要高服务器支持,需要考虑以下几个方面:
通过将海量数据库划分为若干个子数据库,几个服务器并行执行一条SQL语句,可以高效快速地返回结果。在查询海量数据的过程中,
查询SQL语句的性能对查询效率有很大影响,因此需要编写高效优秀的SQL脚本和存储过程,如减少关联、少用或不用游标、设计高效的数据库表结构等。对于海量数据处理,需要为大表建立索引。在设置索引时,需要考虑具体情况,比如大表的分组和排序字段,要设置相应的索引。一般来说,也可以建立综合指数。应该考虑索引、聚集索引和非聚集索引的填充因子。
通常情况下,大量的数据存储在数据库中,应用程序访问数据库是一个非常耗时的操作。如果频繁重复这些操作,会大大增加系统的负担,降低系统的运行效率。如果先将数据库中的数据缓存在缓冲区中,当应用程序需要这些数据时,直接从缓冲区中提取,可以减少系统开销,大大提高运行效率。
将海量信息的查询结果全部显示出来,必然会耗费大量成本。但如果逐批按页返回结果,一个大的查询分布在多个查询中,那么每次的小查询开销是可以在用户的容忍范围内返回的。目前常用的方法有游标、分页存储过程等。数据库备份和恢复策略需要根据数据库的存储策略来定义,一般可以从数据库的备份粒度、备份时间、备份方式来具体考虑。
集群之间的数据一直是同步的,各个数据库的结构和内容完全一致。集群本身自动实现数据库的备份。对于数据库碎片,如果以后不再增加新的碎片,只需要备份整个数据库或者单独备份每个数据库碎片。但如果因为数据量大而不得不将数据库碎片迁移到数据仓库,则会备份数据库碎片的所有子数据库和总数据库,并将子数据库逐步同步到总仓库。
海量数据相关处理技术的选择需要考虑很多方面:
以业务需求为导向,根据需求选择合适的技术。虽然所选择的技术和方案可能有一些局限性,但它们可能不如业内其他先进技术那样高效和可扩展。虽然分片技术有其局限性,但它非常适合数据修改操作少、元素分类清晰、数据时间连续的业务应用。
考虑到成本或者跨平台,选择中型数据库或者大型数据库或者完全开源的数据库。
架构方面,切片是横向还是纵向,根据什么内容。分布式存储在每个子存储库中是冗余的还是唯一的。在时间上可以横向划分,在业务应用上可以纵向划分。
是否采用集群,集群的可扩展性如何。集群的采用必然导致部署安装成本和数据库的选择。当然,你也可以使用第三方或者自己开发中间件技术。
容灾。包括故障处理和灾难恢复。如何根据数据存储和架构设计容灾,保证高可用性?在未来的应用需求中,需要实现主备切换和故障恢复的功能,并快速一致地实现数据库备份和同步方案,从而从容地实现灾难恢复。

如果采用碎片化技术,是用手动还是调度脚本维护,子数据库太大怎么办,子数据库需要迁移怎么办。人工维护肯定是辅助工作,系统需要定期安全的迁移到仓库。
海量数据存储技术的发展可以概括如下:
下一代存储技术:高容量光存储技术。分布式存储和P2P存储。
数据网格(Data Grid):为满足人们对高性能、大容量分布式存储能力的要求而提出的概念,类似于计算网格,并行、分布式协作工作。使用非关系数据库NoSQL处理海量数据的技术逐渐普及。
免费Hadoop技术的逐步应用,该技术广泛应用于谷歌、雅虎、脸书、淘宝和赛门铁克等商业巨头。


