海量数据的解决方案

来源:互联网 发布:数据挖掘最优算法 编辑:程序博客网 时间:2024/05/21 10:34

现在无论是企业的业务系统还是互联网上的网站程序都面临着数据量大的问题,这个问题如果解决不好将严重影响系统的运行的速度。

(1) 缓存和页面静态化

      数据量大的问题最直接的解决方案就是使用缓存,缓存就是将从数据库中获取的结果占时保存起来,在下次使用的时候无需要重新到数据中获取,这样可以大大降低数据库的压力。缓存的使用方式可以分为通过程序直接保存到内存中和使用缓存框架两种方式。程序直接操作主要是使用Map,尤其是ConcurrentMap,而常用的缓存框架有Ehcache、Memcache和Redis等。

(2)数据库的优化

       要解决数据量大的问题,是避不开数据库的优化的。数据库的优化可以在不增加硬件的情况下提高处理效率,这是一种用技术换金钱的方式。数据库的优化有很多种方法,常用的有表结构优化、SQL语句优化、分区和分表、索引优化、使用存储过程代替直接操作等。

表结构优化:表结构的优化是数据库中最基础也是最重要的,如果表结构优化的不合理,就可能导致严重的性能问题,具体怎么设计更合理,需要根据实际情况具体处理。

SQL语句优化:基础的SQL优化是语法层面的优化,不过更重要的是处理逻辑的优化。这也需要根据实际情况具体处理,而且也要和索引缓存等配合使用。

分区:当数据量变多的时候,如果可以分区或者分表,那将起到非常好的效果。分区就是将一张表中的数据按照一定的规则分到不同的区来保存,这样在查询数据时如果数据的范围在同一个区内那么可以只对一个区的数据进行操作,这样操作的数据量更少,速度更快,而且这种方法对程序时透明的,程序不需要做任何改动。

分表:如果一张表中的数据可以分为几种固定不变的类型,而且如果同时对多种类型共同操作的情况不多,那么都可以通过分表来处理,这也需要具体情况具体对待。

索引优化:索引的大致原理是在数据发生变化的时候预先按指定字段的顺序排列后保存到一个类似表中,这样在查找索引字段为条件的记录时就可以很快地从索引中找到对应记录的指针并从表中获取到记录,这样速度就快多了。不过索引也是一把双刃剑,它在提高查询速度的同时也降低了增删改的速度,因为每次数据的变化都需要更新相应的索引。

使用存储过程代替直接操作:在操作复杂而且调用概率高的业务中,可以通过使用存储过程代替直接操作来提高效率,因为存储过程只需要编译一次,而且可以再一个存储过程里面做一些复杂的操作。

(3)分离活跃数据

虽然有些数据总数量非常大,但是活跃数据并不多,这种情况就可以将活跃数据单独保存起来从而提高处理效率。比如,对网站来说,用户很多时候就是这种数据,注册用户很多,但是活跃用户却不多,而不活跃的用户中有的偶尔也会登录网站,因此不能删除。

(4) 批量读取和延迟修改

      批量读取和延迟修改的原理是通过减少操作的次数来提高效率,如果使用恰当,效率将会呈数量级提升。  延迟修改主要是针对高并发而且频繁修改的数据,如一些统计数据。

(5)读写分离

      读写分离的本质是对数据库进行集群,这样就可以在高并发的情况下将数据库的操作分配到多个数据库服务器去处理从而降低单台服务器的压力,不过由于数据库的特殊性,每台服务器所保存的数据需要一致,所以一般情况下是将写操作交给专门的一台服务器处理,这台专门负责写的服务器叫做主服务器。

(6)分布式数据库

分布式数据库是将不同的表存放到不同的数据库中然后再放到不同的服务器。这样在处理请求时,如果需要调用多个表,则可以让多台服务器同时处理,从而提高效率。

(7) Nosql和Hadoop

0 0