前些日子,一个悠闲又不悠闲的下午,我还在用 Node.js 写着某个移动互联网应用的 API 服务端。那时还是用 MySQL 作为数据库,一切都很好,所有功能正常运行。可是有很多问题让人不安:

  1. 频繁的产品功能变化让MySQL跟不上 产品初期功能变化很频繁,其中很多变化都不得不对数据库结构做出更改。对于MySQL来说,也许是改一个字段名方便SELECT,也许是把一个字段移到另一个表方便索引,也许是要对多个表重新设计来达到修改要求(这种情况最惨烈,但开发过程中遇到过不止一次<char_group class="biaodian cjk">)。

  2. 符合范式的设计让JOIN在SELECT语句中大行其道

    尽管在设计时已经做好规划,保证在多数查询时不会用到JOIN,但是在其它不少地方仍然很难回避两表甚至多表联查,一些模块中SQL语句的复杂度甚至能达到大学数据库原理考试时考查的SQL语句题目的水平。写起来烦,想想实际运行情况,也不禁为MySQL同学捏一把汗。于是后来对复杂的MySQL语句增加了Cache,Redis第一次在这个项目登场就是干这个的,当时Cache的设计思路是:

    Redis存储两份数据,一份是数据缓存,一份是数据的最新版本号,执行复杂SQL查询时先检查这个查询在Redis里有没有数据缓存且对比数据的最新的版本号看当前数据缓存是不是最新的,是的话就读出来直接返回,不是的话查询MySQL得出结果并保存在Redis数据缓存中。如果更新了会影响这个查询结果的数据的话则简单地将Redis里该数据的最新版本号加1即可。

    这个设计很简单实用,但很快问题就暴露出来了:因为缓存的加入导致整个系统更复杂,而且随着MySQL数据库结构的不断复杂,单纯加入缓存无法根本上解决这一问题。更重要的是,由于读写频率基本保持在1:1,导致缓存命中率极低,不如不用。

  3. 一切问题的解决方案都是NoSQL 上述问题让我重新考虑是否用NoSQL替换MySQL。关于NoSQL数据库我接触过的为MongoDB和Redis,最后选择Redis的原因是因为系统中已经使用了Redis做Cache,对Redis了解更多。

    现在的API服务端代码已经从Node.js(JavaScript) + C + MySQL迁移到Node.js(CoffeeScript) + C + Redis。通过实践,使用Redis后的代码更易维护,更加整洁,性能也更高。同时在迁移时写了一个简单的Redis ORM模块,用起来十分方便。

MySQL 迁移到 Redis 记的更多相关文章

  1. Redis-port安装使用实现redis迁移codis,以及简单redis pipe实现将mysql迁移redis

    (0)Redis-port原理: 首先是看到下面这篇文档开始研究的redis-port http://www.itnpc.com/news/web/146085373656602.html  简要截图 ...

  2. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  3. 【菜鸟玩Linux开发】通过MySQL自动同步刷新Redis

    在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家 ...

  4. Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

    大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程.也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB.往下看我们告诉你为什么这样做.为什么要用Mari ...

  5. 数据库 SQL Server 到 MySQL 迁移方法总结

    最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 ...

  6. MySQL迁移[转]

    http://dbarobin.com/2015/09/15/migration-of-mysql-on-different-scenes/ MySQL 迁移方案概览 MySQL 迁移无非是围绕着数据 ...

  7. 在 Linux 中怎样将 MySQL 迁移到 MariaDB 上

    自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了 MySQL.在社区驱动下,促使更多人移到 MySQL 的另一个叫 M ...

  8. 聊聊Mysql索引和redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  9. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

随机推荐

  1. Mac 搭建后端PHP+Go环境

    准备工作 1. 安装brew命令 #很慢很慢.. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...

  2. windows端口占用处理方法

    (1)输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是8081,首先找到它.C:\Users\Administrator>netstat -ano活动 ...

  3. RISCV 入门 (学习笔记)

    文章目录 1. risv 相关背景 1.1 arm 授权费 1.2 riscv 发展历史 1.3 riscv 风险 2. 指令集 2.1 可配置的通用寄存器组 2.2 规整的指令编码 2.3 简洁的存 ...

  4. 解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

    本文图文讲解如何解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件. 默认打开IDEA的Plugins会加载很久,最后什么也没加载出来. 这时我们可以给插件市场设置 ...

  5. 15-Transfer Learning

    介绍 迁移学习指的就是,假设你手上有一些跟你现在要进行的task没有直接相关的data,那你能不能用这些没有直接相关的data来帮助我们做一些什么事情.比如说:你现在做的是猫跟狗的classifer, ...

  6. python实现模板匹配

    目录: (一)原理 (二)代码实现和几种常见的模板匹配算法 正文: (一)原理 在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大. 作用有局限性, ...

  7. 【JavaSE】Java基础·疑难点汇集

    Java基础·疑难点 2019-08-03  19:51:39  by冲冲 1. 部分Java关键字 instanceof:用来测试一个对象是否是指定类型的实例. native:用来声明一个方法是由与 ...

  8. spring boot 动态生成接口实现类

    目录 一: 定义注解 二: 建立动态代理类 三: 注入spring容器 四: 编写拦截器 五: 新建测试类 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应的注解,并不需要实现对应的逻辑. ...

  9. python 配置pip镜像源

    在本地用户下新建pip文件夹,新建pip.ini [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trust ...

  10. appScan安全软件的使用

    1.点击文件,新建 2.常规扫描 3.点击下一步 4.输入需要扫描的网站 5.下一步,如果有账号 密码可以使用记录. 6.选择缺省值,下一步 7.启动全面扫描.