前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库种类那么多,该如何选择?

数据库种类那么多,该如何选择?

作者头像
猴哥yuri
发布2018-08-16 16:31:52
3.5K0
发布2018-08-16 16:31:52
举报
文章被收录于专栏:极客猴

题图:by _seo_hanbit from Instagram

技术真的是日新月异,Web 网站已经脱离之前的静态网站的体系,转而使用动态语言搭建的动态网站。这也衍生出一个问题:该如何存储数据了?数据库就应运而生,它的作用是提供存储数据的容器。方便 web 网站进行存储、查询、更新等。

数据库种类也很多,有成熟且稳定的 MySql 数据库,有后起之秀的 MongoDB 数据库,也有新时代宠儿 Redis 数据库。除此之外,还有其他一些数据库,例如 Sqlite、Oracle 等。

那么问题来了,面对多种类型的数据库,自己该如何选择?

或许你因个人比较喜欢 MySql 数据库,所以选择它。也许你在网络上查了一下资料,发现别人都推荐使用 MongoDB,所以就选择它。

这两种想法都是不能正确地选择。任何脱离业务来谈架构都是在瞎扯。因此,要根据项目业务的场景需求来决定选择哪种数据库。每种数据库都各有优缺点,而选取标准是选择最优,最适合。

我个人的理解是结合以下几个方面来考虑:

1 读写速度

这存储数据方式往往决定读写的速度。

  • Mysql 无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。
  • MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。然后,MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。
  • Redis 所有数据都是放在内存中的。但是它也支持数据持久化到硬盘中。

我们都知道磁盘读取数据的效率远远低于内存。所以在一般情况下,这三者的读写数据的速度排序是:Redis > MongoDB > Mysql

2 是否支持事务以及复杂查询

MySql 是关系型数据库,支持事务操作以及 join 方式的复结构化查询。而 MongoDB 是非关系型数据库, 既不支持事务操作,也不支持 join 操作。Redis 同样不支持。

因此,针对以下场景应考虑使用 MySql: 1)业务数据中有大量结构化数据,如用户账号、地址等。因为这些数据通常需要做结构化查询。 2)业务存在许多事务性操作,需要保证事务的强一致性。

3 业务数据量增长速度

在一到两年内,业务数据的增长量不在预测范围内,优先考虑使用 MongoDB。

因为 MongoDB 内建了sharding、很多数据分片的特性,容易水平扩展,比较好的适应大数据量增长的需求。而 MySql 在这方面表现要逊色些,MySql 单表数据量达到 5-10 G 时会出现明细的性能降级,需要做数据的水平和垂直拆分、库的拆分完成扩展。

Redis 由于内存容量限制,不会用来存储大量数据。一般拿它做缓存。

4 表结构是否明确

如果在业务场景中,数据库表接口不明确,数据还在不断增加。例如以下场景,内容管理平台(如 BBS 论坛中帖子场景),用户社交平台(如贴吧中的帖子以及用户评论),优先考虑使用 MangDB 。

因为 MongoDB 是非结构化文档数据库,扩展字段很容易且不会影响原有数据。

写在最后,数据库作为存储数据的容器, 在架构选择上,应多花点时间考虑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客猴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 读写速度
  • 2 是否支持事务以及复杂查询
  • 3 业务数据量增长速度
  • 4 表结构是否明确
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档