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

更新日期: 2018-11-17阅读: 11.6k标签: 数据库

技术真的是日新月异,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 是非结构化文档数据库,扩展字段很容易且不会影响原有数据。


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

链接: https://fly63.com/article/detial/1362

数据库的常用sql操作

数据库操作,不管是服务端、前端、移动端,都或多或少的会涉及到数据的存储、查询、修改。所以作为一名开发者,数据库操作也是开发必备的一项技能。本文是对数据库中经常用到的一些写法与及函数的归纳总结

B树和哈希索引的比较

了解B树和哈希数据结构有助于预测查询在这些使用不同索引数据结构的存储引擎上的执行情况,特别是对于MEMORY存储引擎,它是允许您选择B树或哈希作为索引的存储引擎。

使用 TypeScript 访问 MySQL 数据库

TypeScript 已经成为一个强大的 Web 应用程序开发环境,在与标准 JavaScript 保持一致的同时,提供了显著的改进。在本文中,我们将深入探讨使用 TypeScript 相关的细节

MyISAM和InnoDB的比较

MyISAM:不支持事务,而且也不支持外键,但是每次查询都是原子的,支持表级锁,即每次操作是对整个表加锁;InnoDb:支持ACID的事务,支持事务的四种隔离级别;

MongoDB的特性、使用原理

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 具有高性能、易部署、易使用,存储数据非常方便等特点

传统数据库不适合现代企业架构了?

它还是我们如今看到的更广泛的技术趋势背后的统一思想,这些技术包括机器学习、物联网、无处不在的 SaaS 以及云计算。这些趋势都在用不同的方法使软件变得更丰富和功能强大,并在企业间扩大其影响范围

数据库自增ID用完了会怎样?

对DBA来说这应该是送分题吧。而我是突如其来的想法想测试下的。正常来说程序员是不会关心自增ID用完的情况的。以 Mysql 为例,它支持的最大的整型是unsigned bigint

node如何连接数据库?

node连接数据库的方法:使用命令npm install mysql --save安装mysql的软件包,在项目文档中使用client.connect()即可连接数据库。下载MySQL :MySQL Downloads,并进行安装。安装完,会引导你对数据库进行配置,设置root密码以及创建普通用户以及密码

nodejs怎么和数据库连接?

通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,下面本篇文章就来给大家介绍下如何通过NodeJS来操作 MySQL 数据库,希望对大家有所帮助。

数据库设计规范化的 5 个要求

通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!