`

数据库减压--php+mysql+memcached模拟nosql

阅读更多

http://blog.sina.com.cn/s/blog_015350630100u45e.html

 

随着数据量的不断增加,数据库的压力会逐渐增加,打开的速度会越来越慢,甚至出现数据库的slow-query,即使已经建立了完善的索引.
这个时候我们通常会采取几种方法来减轻数据库的压力:
读写分离,采取mysql的master,slaver方式将数据库的读写操作分离开,以达到数据库的减压.
另外一种是添加一张中间表,所有写入的数据都直接写入这张中间表,之后再通过定时程序或其它方法在系统闲时将数据导入相应的数据表,以达到减压的效果.
今天我们要说到的方法与第二种中间表的形式类似,只不过是用memcached替换中间表,将每一个个体的所有相关属性,内容组合成数组,存入到memcached中,在此个体没有被完整存储的时候,所有的对于它的读取,修改,删除,添加内容等等操作都将在memcached中进行,充分利用memcached快速读写特性.
由于memcached不是永久性存储,在我们使用memcached做中间存储介质时需要考虑数据的安全性,防止memcached出现意外造成数据丢失,需要多台memcached服务器,参考mysql的master,slaver模式,对数据的写入,修改,删除要同时保证所有服务器同时操作,读取可以随机从其中一台读取.
需要注意的是在每个memcached中的完整数组需要有一个lock的值,标记它的状态,当我们的定时程序读取的时候要标记所有服务器里相同key的lock值为锁定状态,此时即使前台命中这个缓存也只能是只读状态,保证数据的一致性.
数据的转存,可以采用php模拟daemon的方式或cron定时的方式将memcache中的缓存存储到mysql中,实现永久保存,当数据被存储到数据库中剩下的就是常规的读取缓存,缓存命中与未命中的常规逻辑了.
大概的思想就是这样了,先说一下这样做的优点:
1.    使用memcache做中间存贮,速度快,效率高,充分利用memcached的优点
2.    读写方便,不需要修改原有的数据模型,不用修改数据库结构
3.    不用改变现有的生产环境,不需要添加额外的功能支持,通过现有的LAMP即可实现
不足,缺点:
1.    对于成型的项目来说,修改量可能比较大,需要对业务的流程有非常熟悉的了解
2.    memcached并非持久存储,有一定的数据丢失风险,可以通过master,slaver的方式增加可靠性
3.    由于memcache的没有不提供搜索功能,当数据量较大时搜索的效率会比较低.可以通过对存入的key进行哈希索引的方式创建php搜索功能,提高效率
4.    对内存的需求量比较高,可以通过修改转存程序的频率和速度来维持内存使用量在一个可控范围内

现在nosql的概念很流行,例如:mongodb,couchdb等.这个想法其实也是借鉴了nosql的方式,通过php+mysql+memcached来模拟一个非关系型数据库,以解决前面提到的数据量增加,传统数据库难以解决的
1.    高并发读写的需求
2.    高效的存储访问需求
同时为那些不方便在现有环境下安装新的应用扩展,或权限较低的情况提供一种解决方案和想法.
在这里只是简单的说了一下我的想法,至于具体如何实现对不同的项目会有不同的需求和具体的解决方案.后面会跟大家分享我的实际使用中的各种问题和经验的^~^

分享到:
评论

相关推荐

    memcached-session-manager+tomcat8.5_memcached-1.9.6.zip

    memcached-1.9.6,libevent-2.1.12-stable.tar memcached-session-manager-1.9.6,msm-kryo-serializer-1.9.6.jar,tomcat8.5,实现会话共享

    fish原创--linux+apache+php+mysql源代码安装.pdf

    配置PHP以包含Apache模块和其他必要的扩展,如`--with-apxs2=/usr/local/apache/bin/apxs`,`--with-mysql=/usr/local/mysql`等,然后进行编译和安装。 3. **安装memcached和php-memcache扩展** 为了提高性能,...

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    ### Nginx+Apache+MySQL+PHP+Memcached+Squid 搭建门户网站 #### 一、前言与架构概述 随着互联网技术的发展,如何构建一个高效、稳定且能够应对高并发访问的Web服务器成为了许多企业和开发者关注的重点。本文将...

    《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件

    《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件 APMServ 5.2.6 绿色服务器 PHP服务器 ASP服务器 APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9、PHP 5.2.6...

    apache-tomcat-7.0.54+memcached+nginx

    在这个场景中,我们关注的是如何在Tomcat 7集群中配置和使用memcached以及配合Nginx进行负载均衡。Memcached是一种分布式内存对象缓存系统,可以提高Web应用的性能,而Nginx则是一个高性能的HTTP和反向代理服务器,...

    Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】

    在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...

    CentOS6.5+mysql+nginx+php+memcached安装指南

    Windows8上安装虚拟机VirtualBox,然后新建虚拟电脑,搭建CentOS6.5 + mysql + nginx + php + memcached平台环境,部署网站。文档中记录了部分FAQ。

    数据库--NoSQL精粹

    《数据库--NoSQL精粹》是一本专注于NoSQL数据库领域的电子书,旨在深入探讨这个非关系型数据库模型的精髓和应用。NoSQL,全称"Not Only SQL",它并不是拒绝SQL,而是指一类不采用传统关系型数据库模型,而是适应大...

    nginx+tomcat7+memcached所需jar.zip

    nginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zip

    nginx+tomcat7+memcached session会话保持

    本文将详细介绍如何在Nginx、Tomcat7和Memcached的环境下实现会话保持,确保用户在多台服务器之间切换时仍能保持其会话状态。 首先,我们要理解会话保持的重要性。在分布式系统中,用户可能与集群中的任何一台...

    JAVA+MYSQL+Memcached

    在实际应用中,Java应用会先尝试从Memcached获取数据,如果数据不存在,则向MySQL数据库查询,并将查询结果存入Memcached。这种架构被称为“缓存优先”策略,可以显著提高系统的整体性能。 总的来说,Java、MySQL和...

    memcached-win32-1.4.4-14+Enyim.Caching.2.12

    memcached 是一个高性能的分布式内存对象缓存系统,广泛用于Web应用中,以减轻数据库负载。Enyim.Caching 是针对.NET Framework 的一个 memcached 客户端库,版本号为2.12。 **描述解析:** 描述中提到的链接是一个...

    memcached-win64-1.4.4-14+php_memcache.dll文件

    压缩包里有memcached-win64-1.4.4-14和php_memcache-3.0.8-5.6-ts-vc11-x64版本的php_memcache.dll文件 亲测自己电脑Win8.1 64,可用

    nginx+apache+mysql+php+memcached+squid搭建集群web环境(一)

    【吐血推荐】nginx+apache+mysql+php+memcached+squid搭建集群web环境(一) 此乃本人N次服务器真机实验所得,所以分数高点,望体谅.. 按教程来做,你也可以搭建linux服务器... 注:此乃分卷一,

    nginx+apache+mysql+php+memcached+squid搭建集群web环境

    本篇文章将详细阐述如何使用nginx、apache、mysql、php、memcached和squid来搭建这样一个集群。 **一、前言与准备** 首先,我们需要了解集群Web环境的基本架构,通常包括客户端、负载均衡器、反向代理/缓存、Web...

    nginx+apache+mysql+php+memcached+squid搭建集群web环境(二)

    【吐血推荐】nginx+apache+mysql+php+memcached+squid搭建集群web环境(二) 此乃本人N次服务器真机实验所得,所以分数高点,望体谅.. 按教程来做,你也可以搭建linux服务器... 注:此乃分卷二,

    PHP+mysql 网站源码

    - 缓存技术:如使用 memcached 或 Redis 缓存频繁查询的结果,减少数据库压力。 - 查询优化:合理设计索引,避免全表扫描,使用 JOIN 时注意性能影响。 10. 开发工具与框架 - IDE:如 PhpStorm、Eclipse 等提供...

    PHP+Mysql实现的电子商务源码(含数据库)

    在本资源中,我们主要探讨的是使用PHP编程语言与MySQL数据库构建的一个电子商务网站的源代码。这个项目提供了从后台管理到前端用户界面的完整功能,是学习和实践PHP web开发,特别是电商应用的理想实例。 首先,PHP...

    搭建nginx+apache+mysql+php+memcached+squid服务器集群.zip_nginx正向代理

    在本场景中,我们讨论的是基于Nginx、Apache、MySQL、PHP、Memcached和Squid构建的服务器集群。下面将详细解释这些组件及其在集群中的作用。 1. **Nginx**:Nginx是一个高性能的HTTP和反向代理服务器,以其轻量级和...

Global site tag (gtag.js) - Google Analytics