什么叫海量数据:
1. 数据量函数过千万,或者过亿,必须用程序处理;
2. 数据量达到TB,普通机器无法处理,必须借助特殊的工具和程序。
海量数据处理的软硬件要求:
3. 合理使用工具;
4. 合理分配系统资源;
5. 利用适当的方法。
对程序员的要求:没有通用方法,有通用原则和原理。
1. 丰富的经验;
2. 灵活的处理方式。

海量数据处理的技巧

##  一、选择优秀的数据库 ##
 可以选择hadoop的HDFS,hbase、mysql。
 ##  二、编写优良的程序代码 ##
 优良的程序代码关于数据处理的正确率和效率问题。
 ##  三、对海量数据进行分区处理 ##
 ##  四、对数据表建立索引 ##
 ##  五、建立缓存机制 ##
 如果读取2亿行的数据,建立100,000行的buffer,在经验上是可行的。
 缓存是避免频繁访问数据库或者磁盘而建立的一种临时快速存储器的。它是利用内存等比磁盘和数据库访问速度更快的设备,临时存储需要多次访问的数据,加快访问速度。对于某些需要多次从磁盘和数据库访问的数据,可以通过Map来缓存数据。也可以对某些中间计算结果,但计算耗时的,缓存下来。
 缓存的更细和过期:如果缓存的实践超过某一时间间隔,则设定其过期,必须重新从数据库或磁盘读取数据,放入缓存。
 也可通过缓存数据的版本比较得出是否过期,是否需要重新到磁盘或数据库读取新数据缓存。
 ##  六、加大虚拟内存 ##
 内存不够时,可以增加虚拟内存。
 虚拟内存是一种内存管理技术,是物理内存不够时的一种弥补措施。将磁盘的一部分闲散空间作为内存来用。
 但RAM不够时,系统会将内存中优先级较低的任务交换到虚拟内存,腾出更多的物理内存供更多优先级更高的任务进行处理。
 虚拟内存是windows操作系统的内存管理技术,linux没有这个讲法。
 现在有了hadoop集群、虚拟内存的技术应该不怎么用了。
 ##  七、分批处理 ##
 将海量数据分层小块,对小块进行处理后,再将处理结果进行合并,得到最终处理结果。这种实现类似于hadoop的mapreduce计算过程。
 ##  八、使用临时表和中间表 ##
 实现类似于分批处理,也是将大表变成小表,然后在汇总。
 ##  九、优化SQL查询语句 ##
 SQL查询语句对数据库的查询效率影响很大,编写并优化SQL查询语句,能够带来查询效率的极大提升。
 ##  十、使用文本格式进行处理 ##
 如果对数据处理在数据库和文本之间选择,一定优先选择文本。
 除了文本操作比数据库快,还因为文本处理不容易出错。
 文本的存储也不受限制。
 ##  十一、制定强大的清洗规则和出错处理机制 ##
 对于缺省值,必须制定规则给定平均值或者默认值,或者专家制定的值,避免后期处理影响效率,或者出现错误和死机问题。
 ##  十二、使用采用数据,而非原始数据 ##
 但数据量比较大时,可以通过采用数据进行分析,结果是一样的。
 采样可以是平均采样,也可以是分层采样。

海量数据查询优化SQL

减少or、in、groupby、orderby、whereis、not、exists、select *