本文仅概述对海量数据的解决方案,适宜观众:小白,大白请绕道。后续文章 高并发的解决方案
1、缓存和页面静态化
缓存主要使用于不频繁发生变化、实时性要求不高 的情况。
缓存分为两种方式:直接程序保存和缓存框架。
- 直接程序保存即使用Map来对数据进行保存。
- 缓存框架,如Memcache、redis等。
缓存的创建:1. 第一次获取的时候;2. 程序启动;3. 缓存失效之后。
缓存的失效:1. 定期失效;2. 数据发生变化时失效;3. LRU(less recently used);4. LFU(Least Frequently Used)。
缓存中空数据的管理方法:对于部分数据,缓存中为空,数据库也为空,但是在每次访问该信息时,都会走缓存,走数据库。如文章的评论为空,则其缓存、数据库都是null。此时缓存就没有起到原本的作用。可以新建一个类(如NoCommet)来保存没有评论的缓存,这是系统就知道这是空缓存了。
页面静态化:将程序生成的页面保存起来。只对部分需要改变的数据进行请求。
2、数据库优化
3、批量读取和延迟修改
Hibernate的做法。
4、读写分离
其本质是数据库集群,对一个服务器写(也叫主服务器),写完之后同步到其他服务器,其他服务器(从服务器)只管读取。在同步的过程中,可以分批同步,也可以一次同步。
5、分布式数据库
将不同的表存放在不同的数据库,放在多台服务器。这样在处理时,若需要调用多个表,则可以多台服务器同时处理。
6、NoSQL和Hadoop
Hadoop是将同一表中的数据分成多块并保存到多个节点(分布式),而且每一块数据都有多个节点保存(集群)。分布式可以加快处理,集群可以保障数据的安全(一个坏了还有别的)。
采用归并算法来处理数据,先对每一块的节点进行处理,然后处理其处理结果,最后合并。好处是将统一个查询分配到多个服务器,速度快。