目录
什么是数据库
数据库(Database)的基本概念
为什么用数据库存储数据
为什么大多数程序员更喜欢使用MySQL?
关系数据库和MySQL的缺点是什么?
是什么让MongoDB如此吸引人?
可扩展性
MongoDB的缺点
什么时候选择MongoDB
数据库的类型
RDBMS(关系型数据库)
Nosql (非关系型数据库)
NewSql
首页 数据库 mysql教程 从MongoDB开始浅谈数据库的知识

从MongoDB开始浅谈数据库的知识

Jan 07, 2019 am 10:14 AM
mongodb mysql

本篇文章给大家带来的内容是关于从MongoDB开始浅谈数据库的知识,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

今天的主题是从MongoDB漫谈数据库,在日常的项目中,我们一般都是使用的mysql作为数据库,但是一旦有问题,又常常会听到类似“要不换成MongoDB试试”的声音,因此就让我们这些小白来随便聊聊数据库

什么是数据库

我们就用最简单的话来说,数据库,就是保存数据的一个仓库

数据库(Database)的基本概念

  • 数据库就是按照一定的数据结构来组织,储存和管理数据的仓库

  • 我们写的程序都是在内存中运行的,一旦程序运行结束或者计算机断点,程序运行中的数据就会全部丢失;所以我们就需要将一些程序的数据持久化到键盘之中,以确保数据的安全性。

  • 数据库则是大批量数据持久化的普遍选择,1.文件 2. 数据库

为什么用数据库存储数据

  • 数据库是有结构的

  • 数据库可以提供各种接口,让数据处理(增删改查)快捷方便

  • 各种语言(PHP、jsp、.net..)提供了完善的接口

数据库流行度(来源:https://db-engines.com/en/ranking)

3866557452-5c323f793fa4e_articlex.png

从统计的数据中可以看出,最受欢迎的DBMS是“关系型”,前五名中占据了四位,把数据扩大到前十,关系型数据库也占到了七位之多。

为什么大多数程序员更喜欢使用MySQL?

  • 开源,只有企业才需要购买许可证

  • 具有广泛的用途:可广泛用于大多数平台,如Linux,Windows,Ubuntu,Mac OS X等

  • 易于使用

  • 可靠的:多年来一直经过试验和测试

  • 适用于PHP(PHP天下第一),也可以与其他编程语言一起使用,如JAVA,PERL,C,C ++等

  • 适用于小型和大型应用

那么关系型数据库这么好为什么前五名中还会出现MongoDB的身影呢,我们来看一下

关系数据库和MySQL的缺点是什么?

  • 可伸缩性:向特定记录添加更多数据可能涉及扩展到多个表,列和行,而因为数据是按行存储,即使只针对其中某一列进行运算,关系型数据库也会将整行数据从存储设备中读入内存,导致I/O较高

  • 由第一条产生而来的一个缺陷就是无法存储数据结构

  • 速度:由于数据结构的问题倒是分析数据时需要一定的时间,另外只能够进行子字符串的匹配查询,当表的数据逐渐变大的时候,like查询的匹配会非常慢,即使在有索引的情况下

  • 在使用之前,需要先编写架构以定义表,同时表结构schema扩展不方便 如要需要修改表结构,需要执行执行DDL(data definition language),语句修改,修改期间会导致锁表

是什么让MongoDB如此吸引人?

  • 灵活性:文档结构更符合开发人员在各自编程语言中的编码方式,这些编程语言在键值对中是清晰且结构化的,这样可以随时轻松添加和编辑数据/文档

  • 支持各种查询:字段,表达式,范围查询,JavaScript函数等

  • 更快的周转时间:因为存储在MySQL数据库中的多个表中的相关数据存储在MongoDB中的同一文档中

  • 没有严格的模式:可以在定义文档结构之前先创建文档

  • MongoDB的功能使它更适合处理大量数据

先让我们来比较一下两者再来详细说明


MySQL MongoDB
版本 1995- 2018(mysql 8.0) 2009
结构 关系型 非关系型
灵活性 弱,需要在使用之前先定义数据库模式 与MySQL相比具有相当大的灵活性 - 定义不需要的模式
可扩展性 可以,但是比较困难,MySQL数据库可以垂直扩展,可以向单个服务器添加更多资源 比MySQL更具可扩展性。MongoDB可水平扩展,可以添加更多服务器来扩展您的数据库
需要DB管理员 否 - 开发人员和管理员都可以使用
适用场景 会计师事务所和银行,以及需要具有清晰架构的结构化数据的其他公司。非常适合具有或多或少固定要求的企业(twitter例外) 具有实时数据,物联网,内容管理,移动应用,社交网络,面向大数据/网络分析的系统以及不需要具有清晰架构或其架构的结构化数据的业务的理想选择不断变化

灵活性

首先说说灵活性,举个列子,一个商城里面会有许多的商品,而这些商品都是有自己独特的属性的,比如电视有屏幕尺寸、屏幕分辨率,而空调有制冷类型、外机噪音等属性,要把它们放到产品表里是非常困难的,额外增加了程序员对于数据表设计的工作,而MongoDB没有Schema(模式、数据模型)就会显得很简单。

MongoDB 的灵活还体现在非结构化和半结构化的数据上。MongoDB 提供全文索引,也支持地理位置查询和索引。例如一位用户想知道方圆五公里哪里有公共卫生间,这是「地理范围查询」。然后他搜索最近的单车。摩拜单车正是使用 MongoDB 完成这样的「距离排序查询」。

可扩展性

数据一台机器放不下了,就需要sharding(分片)把它放到好几台机器上去。分片是MongoDB多年以来的原生功能,与MongoDB其他功能高效整合。

例如,分片集群中一个复杂的聚合查询会自动地根据 Shard Key(片键)分配到多个结点上运行,尽可能将计算任务下推到数据结点上,最后在一个结点上聚合所有结点的结果。分片还可以在各个结点间自动迁移数据,均衡其数据量。同时配合着MongoDB的复制(副本集)技术,可以有效的避免数据的丢失(在测试的时候发现mongo会自动发现副本集的所有机器地址,当一台Mongo被停掉时,连接的Server不会报错)

MongoDB中使用分片集群结构分布:

2216628631-5c323f9a3ac68_articlex.png

MongoDB的缺点

  • 众所周知,MongoDB占用了大量的服务器内存

  • MongoDB在安全性上略微会差一点

  • 过于自由灵活的文件存储格式带来的数据错误(。。。。。。)

  • 单个文档大小限制为16 M

  • 对于数组型的数据操作不够丰富

什么时候选择MongoDB

说了这么多狗屎一样总结的话,最重要的就是我们在什么时候选择使用MongoDB

  • 日志系统,系统运行过程中产生的日志信息,一般种类较多、范围较大、内容也比较杂乱。通过MongoDB可以将这些杂乱的日志进行收集管理

  • 地理位置存储,MongoDB支持地理位置、二维空间索引,可以存储经纬度,因此可以很快的计算出两点之间的距离,等位置信息

  • 数据规模增长很快(比如供给的关注信息)

  • 需要保证高可用的环境

  • 文件存储需求

  • 其他场景,如游戏开发中可以通过MongoDB存储用户信息、装备、积分等,除此之外物流系统、社交系统、甚至物联网系统

数据库的类型

说了这么多,为什么我们会把mysql和MongoDB放在一起比较进行选择,就是因为它们是不同类型的数据库,从数据库发展至今,大致上分为三种类型

RDBMS(关系型数据库)

首先要提到的一定是我们最熟悉的mysql数据库所属于的关系型数据库。

关系型数据库的特点:

  • 比如MySql 、sql server Oracle 等

  • 特点 通过一张张表来建立关联

  • 基本都使用SQL语言来管理数据库

Nosql (非关系型数据库)

NoSql,也就是MongoDB的数据库类型,源自2009年在San Francisco举办的一次Meetup,在该Meetup上出现了NoSql技术的描述:open source, distributed, non relational databases

非关系型数据库的特点:

  • 没有行 、列的概念 用json类储存数据

  • 集合相当于“表”,文档相当于“行”

  • 标准化和非标准化的摩擦。

  • 标准化限制创新,非标准话不能统一

NoSql在刚提出的时候被解释成Non-Relational,也有No-sql的意思,但是随着近些年的快速发展,SQL已经逐步被应用在了更广泛的领域,因此,SQL已不再是RDBMS的专属特征,NoSql技术体系中也引入了SQL能力,因此而演变出来了Not-Only-SQL的概念

大多数NoSql技术,弱化了对ACID语义以及复杂关联查询的支持,采用了更加简洁或更加专业的数据模型,优化了读写路径,从而能够换取更高的读写性能

NewSql

根据wiki中的定义

NewSQL is a class of modern relational database management systems that seek to provide the same scalable performance of NoSQL systems for online transaction processing (OLTP) read-write workloads while still maintaining the ACID guarantees of a traditional database system.

NewSql可以说是传统的RDBMS与NoSql技术结合之下的产物,因此,可以将典型NewSql技术理解成分布式关系型数据库,能够支持分布式事务是一个基本前提。NoSQL与NewSQL在技术栈上有很多重叠,但在是否支持关系型模型及对复杂事务的支持力度上是存在明显区别的。因为本人不了解,所以这里不做多说。

这里我只是简单的介绍一下数据库的类型,对于一种存储技术属于NoSql或者NewSql,亦或是RDBMS是不能简单归类的,毕竟技术是在不断进步的,比如MySQL现在也兼容了nosql的特性:

5c3214e0368f7.png

或者有的人会奇怪为什么在介绍MongoDB的缺点时没有提事务的事,这是因为在2018年夏季的MongoDB4.0版本中,MongoDB引入了事务功能,支持多文档ACID特性,例如使用mongo shell进行事务操作

2775986330-5b51a68e90c7d_articlex.png

具体压测数据后期补上

以上是从MongoDB开始浅谈数据库的知识的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

MySQL的位置:数据库和编程 MySQL的位置:数据库和编程 Apr 13, 2025 am 12:18 AM

MySQL在数据库和编程中的地位非常重要,它是一个开源的关系型数据库管理系统,广泛应用于各种应用场景。1)MySQL提供高效的数据存储、组织和检索功能,支持Web、移动和企业级系统。2)它使用客户端-服务器架构,支持多种存储引擎和索引优化。3)基本用法包括创建表和插入数据,高级用法涉及多表JOIN和复杂查询。4)常见问题如SQL语法错误和性能问题可以通过EXPLAIN命令和慢查询日志调试。5)性能优化方法包括合理使用索引、优化查询和使用缓存,最佳实践包括使用事务和PreparedStatemen

apache怎么连接数据库 apache怎么连接数据库 Apr 13, 2025 pm 01:03 PM

Apache 连接数据库需要以下步骤:安装数据库驱动程序。配置 web.xml 文件以创建连接池。创建 JDBC 数据源,指定连接设置。从 Java 代码中使用 JDBC API 访问数据库,包括获取连接、创建语句、绑定参数、执行查询或更新以及处理结果。

docker怎么启动mysql docker怎么启动mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中启动 MySQL 的过程包含以下步骤:拉取 MySQL 镜像创建并启动容器,设置根用户密码并映射端口验证连接创建数据库和用户授予对数据库的所有权限

MySQL的角色:Web应用程序中的数据库 MySQL的角色:Web应用程序中的数据库 Apr 17, 2025 am 12:23 AM

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

centos7如何安装mysql centos7如何安装mysql Apr 14, 2025 pm 08:30 PM

优雅安装 MySQL 的关键在于添加 MySQL 官方仓库。具体步骤如下:下载 MySQL 官方 GPG 密钥,防止钓鱼攻击。添加 MySQL 仓库文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 仓库缓存:yum update安装 MySQL:yum install mysql-server启动 MySQL 服务:systemctl start mysqld设置开机自启动

laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

centos安装mysql centos安装mysql Apr 14, 2025 pm 08:09 PM

在 CentOS 上安装 MySQL 涉及以下步骤:添加合适的 MySQL yum 源。执行 yum install mysql-server 命令以安装 MySQL 服务器。使用 mysql_secure_installation 命令进行安全设置,例如设置 root 用户密码。根据需要自定义 MySQL 配置文件。调整 MySQL 参数和优化数据库以提升性能。

CentOS MongoDB备份策略是什么 CentOS MongoDB备份策略是什么 Apr 14, 2025 pm 04:51 PM

CentOS系统下MongoDB高效备份策略详解本文将详细介绍在CentOS系统上实施MongoDB备份的多种策略,以确保数据安全和业务连续性。我们将涵盖手动备份、定时备份、自动化脚本备份以及Docker容器环境下的备份方法,并提供备份文件管理的最佳实践。手动备份:利用mongodump命令进行手动全量备份,例如:mongodump-hlocalhost:27017-u用户名-p密码-d数据库名称-o/备份目录此命令会将指定数据库的数据及元数据导出到指定的备份目录。

See all articles