随着数据量的不断增加,数据库的压力会逐渐增加,打开的速度会越来越慢,甚至出现数据库的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.    高效的存储访问需求

同时为那些不方便在现有环境下安装新的应用扩展,或权限较低的情况提供一种解决方案和想法.

在这里只是简单的说了一下我的想法,至于具体如何实现对不同的项目会有不同的需求和具体的解决方案.后面会跟大家分享我的实际使用中的各种问题和经验的^~^

分享到:

2012-11-24 09:48

浏览 808

分类:数据库

评论

mysql nosql 游戏开发_数据库减压--php+mysql+memcached模拟nosql相关推荐

  1. MySQL有几部分_数据库部分(MySql)_4

    约束 约束:给表的字段名添加限制条件; 非空约束(not null):添加非空约束后,字段值不能为null: 唯一约束(unique):添加唯一约束后,字段值不能重复: 主键约束(primary ke ...

  2. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  3. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  4. MySQL删除空值语句_数据库语句sql 删除空记录

    最简单删除SQL Server中所有数据的方法 原文:最简单删除SQL Server中所有数据的方法 最简单删除SQL Server中所有数据的方法   编写人:CC阿爸   2014-3-14 其实 ...

  5. 【MySQL 第10章_数据库的设计规范】

    第10章_数据库的设计规范 1. 为什么需要数据库设计 2.范式 2.1范式简介 2.2范式都包括哪些 2.3 键和相关属性的概念 2.4第一范式(1st NF) 2.5 第二范式(2nd NF) 2 ...

  6. mysql数据去重语句_数据库 mysql 语句

    LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言 mysql:常用代码 create table CeShi1 ( Uid varchar(50) primary key, P ...

  7. 顶尖科技棋牌游戏开发_如何接受顶尖科技公司的采访

    顶尖科技棋牌游戏开发 If you've ever wondered how to land an interview with top tech companies or know someone ...

  8. mysql dbms是什么_数据库管理系统(DBMS)是用来做什么的?

    展开全部 数据库管理系统(database management system)是一种操纵和32313133353236313431303231363533e58685e5aeb93133326235 ...

  9. mysql 查询编码转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

最新文章

  1. Java中的goto实现
  2. 如何使用fio模拟线上环境
  3. 简单而不平凡的杨辉三角
  4. JEPLUS之特殊字段类型的使用——JEPLUS软件快速开发平台
  5. 10个python数据可视化库_这10个python数据可视化库,通吃任何领域
  6. centos 修改root密码_Vultr 修改 Root 密码的方法
  7. 用户反馈小程序模板源码
  8. 渗透开发-XSS扫描器
  9. OpenAI怎么写作「谷歌小发猫写作」
  10. pdf、epub、awz3、mobi电子书下载网站推荐!
  11. 英特尔®以太网700系列的动态设备个性化
  12. 2021CSP-J题解整合
  13. 基于高德地图实现Marker聚合效果
  14. tpshop安装及问题记录
  15. mysql 减去一月_sql – 如何从日期列中减去一个月
  16. 启动virtualbox虚拟机显示Attempted to kill the idle task错误
  17. 每个程序员都应该读的非编程书
  18. 《小狗钱钱》良句收录和读后感想
  19. TypeScript 入门教程
  20. excel简单操作学习记录1-2021/2/6

热门文章

  1. vue+jquery自定义滚动条
  2. 技术贴:如何跟刚认识的女孩发短信[精]
  3. 游戏党最佳吃鸡低延时蓝牙耳机,高续航随时随地驰骋战场
  4. Android百度地图SDK最新详细使用(包含demo)
  5. WAR3 天地劫技能代码节选
  6. 安装免费Linux版本:Flash P2P流媒体服务器(安装指导)
  7. 谈谈我对画面撕裂,垂直同步,Freesync以及G-sync的理解
  8. CSS Float nine rules
  9. HTML阅读是可加的,读书.html
  10. 在PostgreSQL中实现按拼音、汉字、拼音首字母搜索的例子