在服务端会经常遇到数据存储的选型问题,是选择使用关系型数据库 MySQL,还是选择内存数据库 Redis,还是选择文档数据库 MongoDB,还是选择列族数据库 HBase, 还是选择全文搜索引擎 ElasticSearch 呢?本节主要介绍如何选择合适的数据存储方案。

关系型数据库 MySQL

MySQL 是一个最流行的关系型数据库,在互联网产品中应用比较广泛。一般情况下,MySQL 数据库是选择的第一方案,基本上有 80% ~ 90% 的场景都是基于 MySQL 数据库的。因为,需要关系型数据库进行管理,此外,业务存在许多事务性的操作,需要保证事务的强一致性。同时,可能还存在一些复杂的 SQL 的查询。值得注意的是,前期尽量减少表的联合查询,便于后期数据量增大的情况下,做数据库的分库分表。

内存数据库 Redis

随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求。因此,Redis 基于内存存储数据,可以极大的提高查询性能,对产品在架构上很好的补充。例如,为了提高服务端接口的访问速度,尽可能将读频率高的热点数据存放在 Redis 中。这个是非常典型的以空间换时间的策略,使用更多的内存换取 CPU 资源,通过增加系统的内存消耗,来加快程序的运行速度。

在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。这些场景包括缓存,会话缓存,时效性,访问频率,计数器,社交列表,记录用户判定信息,交集、并集和差集,热门列表与排行榜,最新动态等。

使用 Redis 做缓存的时候,需要考虑数据不一致与脏读、缓存更新机制、缓存可用性、缓存服务降级、缓存穿透、缓存预热等缓存使用问题。

文档数据库 MongoDB

MongoDB 是对传统关系型数据库的补充,它非常适合高伸缩性的场景,它是可扩展性的表结构。基于这点,可以将预期范围内,表结构可能会不断扩展的 MySQL 表结构,通过 MongoDB 来存储,这就可以保证表结构的扩展性。

此外,日志系统数据量特别大,如果用 MongoDB 数据库存储这些数据,利用分片集群支持海量数据,同时使用聚集分析和 MapReduce 的能力,是个很好的选择。

MongoDB 还适合存储大尺寸的数据,GridFS 存储方案就是基于 MongoDB 的分布式文件存储系统。

列族数据库 HBase

HBase 适合海量数据的存储与高性能实时查询,它是运行于 HDFS 文件系统之上,并且作为 MapReduce 分布式处理的目标数据库,以支撑离线分析型应用。在数据仓库、数据集市、商业智能等领域发挥了越来越多的作用,在数以千计的企业中支撑着大量的大数据分析场景的应用。

全文搜索引擎 ElasticSearch

在一般情况下,关系型数据库的模糊查询,都是通过 like 的方式进行查询。其中,like “value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询,这在数据量小的表,不存在性能问题,但是对于海量数据,全表扫描是非常可怕的事情。ElasticSearch 作为一个建立在全文搜索引擎 Apache Lucene 基础上的实时的分布式搜索和分析引擎,适用于处理实时搜索应用场景。此外,使用 ElasticSearch 全文搜索引擎,还可以支持多词条查询、匹配度与权重、自动联想、拼写纠错等高级功能。因此,可以使用 ElasticSearch 作为关系型数据库全文搜索的功能补充,将要进行全文搜索的数据缓存一份到 ElasticSearch 上,达到处理复杂的业务与提高查询速度的目的。

ElasticSearch 不仅仅适用于搜索场景,还非常适合日志处理与分析的场景。著名的 ELK 日志处理方案,由 ElasticSearch、Logstash 和 Kibana 三个组件组成,包括了日志收集、聚合、多维度查询、可视化显示等。

选择合适的数据存储方案相关推荐

  1. 服务端指南 数据存储篇 | 选择合适的数据存储方案

    在服务端会经常遇到数据存储的选型问题,是选择使用关系型数据库 MySQL,还是选择内存数据库 Redis,还是选择文档数据库 MongoDB,还是选择列族数据库 HBase, 还是选择全文搜索引擎 E ...

  2. 如何选择一个合适的Web存储方案

    Web客户端存储是一个现代Web应用必不可少的功能,常见的有Cookie.WebStorage和IndexedDB等,如何选择一个合适的Web存储方案呢? 一. Cookie 1. 为什么要有Cook ...

  3. HBase实战 | 从MySQL到HBase:数据存储方案转型的演进

    作者介绍 杨宏志,知乎首页架构负责人,主要负责首页工程化建设.工程架构优化.性能提升等工作.知乎专栏:https://zhuanlan.zhihu.com/c_195355141 本文转载自dbapl ...

  4. 从MySQL到HBase:数据存储方案转型的演进

    一.集群化方案 1.MySQL应用的演化 MySQL与HBase说到最核心的点,是一种数据存储方案.方案本身没有对错.没有好坏,只有合适与否.相信多数公司都与MySQL有着不解之缘,部分学校的课程甚至 ...

  5. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  6. 篇1:如何为FPGA选择合适的电源管理方案

                                        如何为FPGA选择合适的电源管理方案 0    背景 当项目中FPGA选型已确定,开始设计电路原理图时,硬件工程师面临的首要问题 ...

  7. 分布式医疗大数据存储方案研究综述

    摘要 医疗数据属于大数据的一种,具有数据量大.增长迅速.多模态.高价值.重隐私等特点.针对医疗数据特点,如何对其进行统一.高效的组织管理是目前重要的研究方向.为此,通过阐述医疗数据特点,分析其存储需求 ...

  8. tinyFlash:一种超轻量级的嵌入式单片机flash KV 数据存储方案

    tinyFlash 一种超轻量级的flash KV数据存储方案 Github 地址:https://github.com/ospanic/tinyFlash 设计原理 本方案采用两个扇区轮流使用的方法 ...

  9. 简单爬虫设计(六)——原始网页数据存储方案选择

    文章目录 为什么要存原始数据 保存原始数据是提高数据质量的前提 原始数据存储方案 题外话 小结 为什么要存原始数据 在实现一个生产环境可用的网络爬虫时,有一个问题几乎是无法绕过的,那就是网页原始数据的 ...

最新文章

  1. iOS-项目打包为ipa文件
  2. java web 心跳机制实现,基于javax的websocket服务端实现,含心跳机制
  3. 推荐15款响应式的 jQuery Lightbox 插件
  4. 成功解决pandas\core\generic.py:3660: SettingWithCopyWarning:  A value is trying to be set on a copy of a
  5. 奖客富翁系统python_作业 2018-12-28 20.1 奖客富翁
  6. php点菜系统开题报告,点餐管理系统的设计与实现-开题报告
  7. Mybatis中mapper文件中的两层循环
  8. Nginx常用命令有哪些?
  9. 三月提示:提防挂马网站 关注账号安全
  10. c++对象的生命周期
  11. mysql 5.0卸载_卸载MySQL 5.0
  12. 2020年全球石英晶振行业现状、竞争格局及未来发展趋势分析,5G推动万物互联,带动行业需求「图」
  13. 单选按钮、字体的设置、沿着y轴旋转、面向用户的这一面不可见、三维效果、背景线性渐变、将背景剪切至文本
  14. iptables 删除规则
  15. PLSQL的JOB启动与停止(可视化操作)
  16. Openlayers笔记之图片偏移的完整解决方案
  17. 复制文本到word中时产生底色的去除方法
  18. tomcat+eclipse +mysql搭建JSP开发环境
  19. GitHub Repo
  20. Unity3d--飞碟游戏

热门文章

  1. 个性化推荐真的是“恶魔”吗?
  2. python爬虫--URL部分加密破解
  3. XSS-labs通关
  4. 系统补丁分发服务器,如何让服务器分发补丁
  5. 正则表达式括号的使用
  6. 无线数据采集、环境监控、气体监测、温湿度远程监控,化工环保监控方案
  7. 密大安娜堡计算机硕士,2020年密歇根大学安娜堡分校一年制硕士含金量
  8. "北京成功故事"系列报道之四:巴伐利亚啤酒酿造师在北京
  9. 深度学习-MATLAB数据增广
  10. C# HttpWebRequest详解