海量数据库(详解缓存处理方法)

来源:互联网 发布:ubuntu的nat和桥接 编辑:程序博客网 时间:2024/06/13 12:56

缓存处理大数据

缓存就是将从数据库中获取的结果暂时保存起来在下次使用的时候无需重新到数据库中获取,从而降低数据库的压力。
缓存的使用方式可以分为通过程序直接将数据库数据保存到内存中和使用缓存框架两种方式
它主要用于数据变化不是很频繁的情况。而且如果是定期失效( 数据修改时不失效)的失效机制,实时性要求也不能太高,因为这样缓存中的数据和真实数据可能会不一致。而memcache就是提供缓存的一种缓存框架,可适用多台服务器,也可单服务器

Memcache介绍

MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。 MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

大概框架如下图:
Memcache框架模型

同时基于这张图,理一下MemCache一次写缓存的流程:
1、应用程序输入需要写缓存的数据
2、API将Key输入路由算法模块,路由算法根据Key和MemCache集群服务器列表得到一台服务器编号
3、由服务器编号得到MemCache及其的ip地址和端口号
4、API调用通信模块和指定编号的服务器通信,将数据写入该服务器,完成一次分布式缓存的写操作

使用memcache框架大概流程

首先安装memcache 服务到指定的服务器上,后启动memcached缓存服务。(memcache服务端的配置本机已实践过,成功后可通过telnet到指定端口,后客户端即可通过该端口交互数据)
有需要可通过下面连接下载tar包或者直接到官网去下载
memcache服务端所需的tar包
安装过程网上有很多可本人参考liunx上安装memcached步骤
再客户端通过memcache提供的相关库函数访问对应部署了memcache服务的服务器,将数据以缓存的形式存到服务器的缓存中。下次取数据同样通过memcache客户端提供的相关库到指定的缓存服务器上去获取缓存数据。(memcache的客户端的实现网上有很多相关java实现实例,win7电脑未装eclipse没有去尝试)

MemCache的高性能源自于两阶段哈希结构:第一阶段在客户端,通过Hash算法根据Key值算出一个节点;第二阶段在服务端,通过一个内部的Hash算法,查找真正的item并返回给客户端。从实现的角度看,MemCache是一个非阻塞的、基于事件的服务器程序

个人理解

最后个人对大数据的理解,要想对海量大数据高效,并发处理。不外乎一个是服务器对数据库的处理,另一个是数据库本身设计的优化,再就是客户端对数据库处理

(1)而服务器对海量数据库的处理,比较好的优化是多台服务器分别管理不同的数据库(分布式管理),当一个请求需要调用多个表,则可以让多台服务器同时处理,从而减轻一台服务器的压力,提高效率。或者多个请求时,可以读写分离,一般情况下一台主服务器负责写,另外服务器负责读,当主服务器写入操作后可以将写后的数据同步给另外服务器。从而可以到达将多个请求分配给多台服务器处理,减轻一台服务器压力。

(2)数据库本身优化,这主要考虑到存储过程,建表分区的优化处理,等等。还得跟相关业务挂上钩。再或者分离活的数据,虽然有些数据总数据量非常大,但是活跃数据并不多,这种情况就可以将活跃数据单独保存到一张数据库表中,查询时优先查询这张表,从而提高处理效率。

(3)客户端对数据库的处理,其实总的来说就是减少对数据库的操作,比较查询数据通过数据库查询,IO操作都是很耗时的,效率不高。所以客户端的优化处理都是针对查询数据库这块,就如上的memcached增加缓存处理,只需要把第一次查询下数据库,之后保存到缓存,获取数据可直接从缓存获取。又或者批量读取和延迟修改,将要读取查询的数据合并到一次进行,或者高并发情况下将3-5秒的数据先保存起来,延迟特定时间定时将数据保存到数据中,从而减少对数据库的操作。

原创粉丝点击