按楼主的经验和知识,本文总结了应用开发中的各种存储架构,从易到难,从起步到起飞。如有不对之处,欢迎留言。

1、单库

最简单的初始架构,适用于千万级以下的数据,并发量低的场景。

  • 单库、单表
  • 或单库、多个分表:之所以分表是为了给后续分库做预留准备

2、分库分表、读写分离

最常见的存储架构,适用于十亿级别以下的数据(单表控制在千万级别或以下),并发量较大、主备高可用的场景。

  • 分库分表:对业务id(如用户id、商户id)取模,散列到各个分库的分表中
  • 读写分离:适用于读多写少的场景,利用数据库一主多从的方式,提高并发量,对主库读写,对从库只读

此时还需要分片中间件来实现对分库分表的读写分离访问,有2种类型:

  • client侧分片:较为常见,以jar包库的方式内嵌在服务中,需要与所有的数据库实例,各自建立和维护连接池,性能好
  • proxy侧分片:proxy是一个数据库访问中间层服务,应用与proxy建立少量连接,proxy与所有的数据库实例建立连接,优点是对应用开发简单透明,缺点是有性能损耗、需要专门的团队维护

client侧分片

proxy侧分片

3、引入缓存

高并发标配,当QPS高到只靠mysql扛不住流量时引入,适用于高并发、流量尖峰的场景

  • 本地缓存(堆内缓存、或堆外缓存):如caffeine、ehcache、guava等
  • 分布式缓存:如Redis集群

缓存查询:先查本地缓存,如果查不到再查Redis并写入本地缓存和Redis,如果Redis也查不到再查数据库并写入本地缓存和Redis
缓存更新:数据库更新后,触发变更消息,通过消息驱动更新Redis

4、冷热数据分离

引入多级存储,保证热数据量可控、读写迅速,冷数据全量储存,适用于数据量巨大、增长迅速,且分库分表已经不能解决的场景。

  • MySQL热数据:优先读写mysql,预期能覆盖绝大部分QPS
  • Hbase冷数据:从mysql查询不到数据时,才查询hbase,hbase可支持海量数据的存储和查询,预期只有少量QPS
  • 归档:定期把数据从mysql归档至hbase,mysql只保留最新的热数据,hbase存储全量数据

5、引入搜索引擎、离线查询

适用于复杂条件的查询、或对运营类统计有需求的场景,此时mysql索引已不能满足高效查询,且会影响在线业务。

  • 引入ElasticSearch:可支持各种条件的灵活查询,再也不用担心mysql因为缺少合适索引而造成慢查询的问题了
  • 大数据分析:引入hive数仓做离线查询,需要把mysql的数据同步至hive

最终架构图

从单库,逐步演化成各种存储紧密配合,满足不同的需求和场景。切勿为了架构而架构,选择适合自己的、能解决实际问题的架构,才最重要。

新人如何快速上手新项目?相关推荐

  1. 如何快速上手新项目?

    如何快速上手新项目? 我觉得可以遵循以下几个步骤: 1. 获取项目相关信息 进入一家新公司后,如果遇到不负责任的同事呢,可能直接甩给你项目地址,然后就让你自己研究了.这就好比产品经理直接甩给你一个需求 ...

  2. 研发新人如何快速熟悉新项目和业务

    进入一家新公司后,最头疼的就是如何快速了解公司的业务和项目架构. 如果碰到一个特别热心的老员工,事无巨细地给你讲,随时在你身边答疑解惑,那可能还好.但很可惜,我没有碰到这样的人,在加入新公司后,带我的 ...

  3. 快速上手Springboot项目(登录注册保姆级教程)

    本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...

  4. HTML5游戏引擎(二)02-egret引擎之hello world——快速上手-清理项目 程序入口 绘制单色背景 调整屏幕的适配模式 添加文字 响应用户操作-让文字变色

    HTML5游戏引擎(二)02-egret引擎之hello world--快速上手-清理项目 & 程序入口 & 绘制单色背景 & 调整屏幕的适配模式 & 添加文字 &am ...

  5. 测试工程师如何快速上手新工作

    测试工程师如何快速上手新工作 测试工程师换到一份新工作,如何快速进入状态呢,自己最近换了新工作,踩过了很多坑才度过了适应期.为此分享一些自己的心得,供大家借鉴,主要有以下几点: 1.在新工作的第一天, ...

  6. iOS runtime实用篇:让你快速上手一个项目

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 对于一个大项目而言,最烦恼的就是在众多界面难以找到对应的viewController,要改个东西都要花好长的时间去找对 ...

  7. 程序员快速熟悉新项目和业务逻辑的技巧

    很多新人进入一家新公司后或进入一个新的项目组,最头疼的就是如何快速了解公司的业务和项目架构,或者说不要求快速,即便有足够的时间,也很难在庞大的业务中整理出思绪.当然,如果你碰到一个特别热心的老员工,事 ...

  8. 如何快速上手一个项目

    作者:Jim Jin 链接:https://www.zhihu.com/question/38865497/answer/108163546 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 不 ...

  9. 前端工程化: 脚手架+物料库快速生成新项目

    零.前言 美团有乐高, 京东有通天塔,阿里有飞冰,大厂都在尝试用自动化工具减少人工,看完这一篇,考虑给你的团队搭建一套自动化开发工具吧! 一.背景 笔者所在公司并非大厂, 发现一些痛点. 1.前端研发 ...

最新文章

  1. C语言基础之--scanf函数
  2. 远程办公难?实战经验为你打消4大顾虑
  3. 业务代码解构利器--SWAK
  4. 重庆事业单位计算机职称评定,看效果 | 重庆事业单位改革 职称评定不再“终身制”...
  5. 用什么来代替switch_一根转动的圆筒能有什么用?可以用它来代替机翼、船帆
  6. linux 环境安装Flutter
  7. MZOJ 1134: 二叉苹果树
  8. 使用 SAP Business Application Studio 搭建 CAP Java 开发环境
  9. Oracle函数初探
  10. 解读神经网络十大误解,再也不会弄错它的工作原理
  11. ​以数据科学家的眼光投资,你可能会一夜暴富
  12. uni-app框架、微信小程序项目
  13. HDMI 调试之输出RGB888
  14. 蓝桥ROS机器人之C++基础开发第一个程序
  15. VUE仿知乎网站(三)首页主体部分开发
  16. matlab中最好用的滤波函数,谁有matlab滤波器设计实例,想找个参考,最好是hamming窗,低通 fir滤波器。...
  17. 在世界读书日之后,重温与好书相遇的时光 | O'Reilly赠书活动
  18. 旷视科技经典文字检测EAST
  19. 人活着最重要的是开心,理财最重要的是回本
  20. GIT代码管理-SourceTree工具

热门文章

  1. c语言 #define dpath .exe是什么意思,C语言宏定义#define
  2. mandatory oracle 字段,Oracle 数据库需要在2019年April之前Mandatory升级的说明
  3. C指针原理(9)-C内嵌汇编
  4. 温州大学《机器学习》课程课件(八、集成学习)
  5. 【NLP】10000亿参数!英伟达用3072块A100训出史上最大最贵GPT!
  6. 【论文导读】浅谈胶囊网络与动态路由算法
  7. 【职场】程序员摆地摊都能月入过万,是真的吗?
  8. 【Python入门】Python之OS模块39个常用函数详解
  9. 截断骨干用于检测,YOLO-ReT开源:边缘GPU设备上的高性能检测器
  10. 网易互客敏捷交付实践