数据库减压--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. 高效的存储访问需求
同时为那些不方便在现有环境下安装新的应用扩展,或权限较低的情况提供一种解决方案和想法.
在这里只是简单的说了一下我的想法,至于具体如何实现对不同的项目会有不同的需求和具体的解决方案.后面会跟大家分享我的实际使用中的各种问题和经验的^~^
数据库减压--php+mysql+memcached模拟nosql相关推荐
- mysql nosql 游戏开发_数据库减压--php+mysql+memcached模拟nosql
随着数据量的不断增加,数据库的压力会逐渐增加,打开的速度会越来越慢,甚至出现数据库的slow-query,即使已经建立了完善的索引. 这个时候我们通常会采取几种方法来减轻数据库的压力: 读写分离,采取 ...
- 数据库概述(了解数据库,当前数据库介绍,mysql数据库介绍,安装mysql数据库)
文章目录 数据库概述 什么是数据库(数据,表,数据库) 数据库有什么作用? 关系数据库详解 非关系数据库详解 数据库系统发展史 数据库管理系统(DBMS) 当今主流数据库介绍 MySQL数据库 MyS ...
- 【数据库基础】01_数据库概述与MySQL语法基础
1. 数据库应用 1.1 概述 1.1.1 什么是数据库 简而言之,就是存储数据,管理数据的仓库. 数据库的好处 持久化数据到本地. 可以实现结构化查询,方便管理. DB:数据库(database): ...
- MySQL下的NoSQL解决方案HandlerSocket
目前使用MySQL的网站,多半同时使用Memcache作为键值缓存.虽然这样的架构极其流行,有众多成功的案例,但过于依赖Memcache,无形中让Memcache成为故障的根源: Memcache数据 ...
- mysql 多线程_数据库选型之MySQL(多线程并发)
本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库task部分占用机器较多,为节省成本,调研数据库或缓存.在 ...
- 计算机二级mysql模拟_2017年计算机二级MySQL考前模拟练习
每日一小练,有助于对自己能力的提升.下面是小编为大家搜集整理出来的有关于2017年计算机二级MySQL考前模拟练习,希望可以帮助到大家! 选择题 1.数据库系统的核心是___A_____. A.数据模 ...
- 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...
使用批处理命令初始化和开启mysql服务,移植数据库之后可以直接运行访问,对于学习数据库的人来说特别的方便哦. 我们可以从mysql官网下载官方社区版本的mysql: 这里使用之前下载的8.0.15来 ...
- 数据库简介与 Mysql 服务基础
文章目录 前言 一.数据库系统发展史 二.数据库基本概念 三.主流数据库介绍 四.数据库类型 1. 关系型数据库 2. 非关系型数据库 3. 时序数据库 TSD 五.Mysql 数据库 1. MySQ ...
- 三款开源关系型数据库对比:MySQL、PostgreSQL、SQLite
在这篇DigitalOcean文章中,我们将尝试理解一些最常用.最流行的关系型数据库管理系统(RDBMS)的内核区别.我们将会探索最底层的区别--特性与功能,它们如何工作,在哪方面更出色,以帮助程序员 ...
最新文章
- 牛客网多校第4场 D Another Distinct Values 【构造】
- UNIX环境高级编程 文件I/O
- C#设计模式(9)——装饰者模式(Decorator Pattern)
- 微软服务器离线补丁工具包,wsus offline update
- error Microsoft Visual C++ 14.0 is required 解决方案
- 可变集合和不可变集合
- mysql root拿shell_mysql的几种获取shell和提权的方式
- PHP预定义变量 PHP_EOL
- 如何关闭迅雷频繁自动弹出更新到新版本的提示
- Edge浏览器启用ie模式,并且打开调试面板
- leaflet怎么获取矩形的中心点位 getCenter()
- 压缩包里面是html文件怎么打开方式,解决电脑rar压缩包文件怎么打开?教你正确打开方式...
- matlab怎么画函数线,请问matlab怎么画常数函数,比如同时画x=300和x=400这两条线...
- 基于端口号的虚拟主机配置
- thingsboard2.4.3 api接口调用简单说明
- 强大的嗅探工具--ettercap
- 中序遍历解决二叉搜索树问题
- studio3T import a SQL Database to Mongodb(从mysql中导入数据到mongodb)
- GSMA移动360会议首次亮相马来西亚
- 寻迹避障小车系统的组成
热门文章
- grid安装前检查报PRVE-0426:/dev/shm less than the require
- 8月7日科技联播:人民日报发推欢迎Google回归,李彦宏回应非常有信心再赢一次...
- js进阶 14-6 $.ajax()方法如何使用
- Linux系统管理——系统启动和内核管理
- Java IO流简介
- 使用这个,自定义AlertDialog在你手里都不是问题
- JSON与localStorage的爱恨情仇
- 「管理数学基础」1.3 矩阵理论:特征值与特征向量
- mysql存储过程详解 mysql存储过程和函数
- Android开发实践:Java层与Jni层的数组传递