MongoDB【使用场景简介体系结构数据模型特点】

目录

1:MongoDB相关概念

1.1:业务应用场景

1.2:MongoDB简介

1.3:体系结构

1.4:数据模型

1.5:MongoDB的特点


1:MongoDB相关概念

1.1:业务应用场景

传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。

解释:“三高”需求:

• High performance - 对数据库高并发读写的需求。

• Huge Storage - 对海量数据的高效率存储和访问的需求。

• High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。

而MongoDB可应对“三高”需求。

具体的应用场景如:

1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。

3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将 订单所有的变更读取出来。

4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

这些应用场景中,数据操作方面的共同特点是:

(1)数据量大

(2)写入操作频繁(读写都很频繁)

(3)价值较低的数据,对事务性要求不高

对于这样的数据,我们更适合使用MongoDB来实现数据的存储。

什么时候选择MongoDB 在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:

应用不需要事务及复杂 join 支持

新应用,需求会变,数据模型无法确定,想快速迭代开发

应用需要2000-3000以上的读写QPS(更高也可以)

应用需要TB甚至 PB 级别数据存储

应用发展迅速,需要能快速水平扩展

应用要求存储的数据不丢失

应用需要99.999%高可用

应用需要大量的地理位置查询、文本查询

如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。

思考:如果用MySQL呢? 答:相对MySQL,可以以更低的成本解决问题(包括学习、开发、运维等成本) 

1.2:MongoDB简介

MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最 像关系型数据库(MySQL)的非关系型数据库。

它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。

MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认 为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。

1.3:体系结构

MySQL和MongoDB对比

SQL术语/概念SQL术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
嵌入文档MongoDB通过嵌入式文档来替代多表连接
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

1.4:数据模型

MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以 BSON(Binary-JSON)文档的格式存储在磁盘上。

BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON。BSON和JSON一样,支持 内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可 以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。

Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date,object id,binary data,regular expression 和code。

每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详 细信息。

BSON数据类型参考列表

数据类型描述举例
字符串UTF-8字符串都可表示为字符串类型的数据{"x" : "foobar"}
对象id对象id是文档的12字节的唯一 ID{"X" :ObjectId() }
布尔值真或者假:true或者false{"x":true}+
数组值的集合或者列表可以表示成数组{"x" : ["a", "b", "c"]}
32位整数类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被 自动转换。shell是不支持该类型的,shell中默认会转换成64 位浮点数
64位整数不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位 整数shell是不支持该类型的,shell中默认会转换成64 位浮点数
64位浮点数shell中的数字就是这一种类型{"x":3.14159,"y":3}
null表示空值或者未定义的对象{"x":null}
undefined文档中也可以使用未定义类型{"x":undefined}
符号shell不支持,shell会将数据库中的符号类型的数据自动转换成 字符串
正则表达式文档中可以包含正则表达式,采用JavaScript的正则表达式语法{"x" : /foobar/i}
代码文档中还可以包含JavaScript代码{"x" : function() { /* …… */ }}
二进制数据二进制数据可以由任意字节的串组成,不过shell中无法使用
最大值/最 小值BSON包括一个特殊类型,表示可能的最大值。shell中没有这个 类型。

提示: shell默认使用64位浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符 号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)} 

1.5:MongoDB的特点

MongoDB主要有如下特点:

(1)高性能:

MongoDB提供高性能的数据持久性。

特别是, 对嵌入式数据模型的支持减少了数据库系统上的I/O活动。

索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求、地 理位置索引可用于构建各种 O2O 应用)

mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求。 Gridfs解决文件存储的需求。

(2)高可用性:

MongoDB的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余。

(3)高扩展性:

MongoDB提供了水平可扩展性作为其核心功能的一部分。 分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展) 从3.4开始,MongoDB支持基于片键创建数据区域。在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些 片。

(4)丰富的查询支持:

MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。

(5)其他特点:

如无模式(动态模式)、灵活的文档模型、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/7782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AOP原理 - 分析AnnotationAwareAspectJAutoProxyCreator源码

文章目录一、回顾EnableAspectJAutoProxy二、AbstractAutoProxyCreator类三、AbstractAdvisorAutoProxyCreator类四、AspectJAwareAdvisorAutoProxyCreator类五、AnnotationAwareAspectJAutoProxyCreator类一、回顾EnableAspectJAutoProxy 在上一章中,通过查看Enabl…

Spring原理学习(三):BeanFactory后处理器原理解析与模拟实现

一、简单认识BeanFactory后处理器 1.1 BeanFactory后处理器的作用 接前文:Spring原理学习(一):BeanFactory和ApplicationContext的原理和实现 我们已经简单介绍了 BeanFactory后处理器 的作用,今天我们先再来再次体验…

酒店拥有VR全景是一种什么样的体验?

每一家酒店都希望自己门庭若市,有更多的人来,随着信息化和互联网的发展时代的到来,酒店营销也逐渐加入了更多的现代元素,那么,酒店怎么样更好地利用互联网来做宣传、来获得更多的客户呢?VR全景作为新兴的富…

排序和分页

排序和分页一、排序1.简单用法3.不同字段不同排序现实二、分页1.简单分页2.order by 配合limit三、分页8.0新特性1.offset总结提示:以下是本篇文章正文内容 一、排序 1.简单用法 select employee_id,last_name,salary from employees order by salary;默认是升序…

Maven高级-分模块开发依赖管理

Maven高级-分模块开发&依赖管理1,分模块开发1.1 分模块开发设计1.2 分模块开发实现1.2.1 环境准备1.2.2 抽取domain层步骤1:创建新模块步骤2:项目中创建domain包步骤3:删除原项目中的domain包步骤4:建立依赖关系步骤5:编译maven_02_ssm项目步骤6:将项目安装本地…

Memory Map

主要介绍AM64x的MSRAM和DDR的内存分布: MSRAM:总共2MB,被分成8个banks,每个256KB。 首先了解一下,两种Domain: In TI documentation, the MCU Domain may be referred to as “M4FSS Island”, “MCU Island”, “MCU Channel”, or “MCU Subsystem…

Redis分布式缓存

文章目录一、 概述1. 单节点Redis存在的问题2. 单节点Redis问题针对解决方案二、Redis持久化1. RDB持久化2.RDB异步持久化原理介绍3. AOF持久化4. ROB和AOF对比三、Redis主从架构1. 搭建主从架构2. 主从数据同步原理四、Redis哨兵1. 哨兵的作用和原理2.搭建哨兵集群3. RedisTem…

Linux 操作系统原理 — RSS 多队列网卡

目录 文章目录目录RSS 多队列网卡RSS 技术实现原理RSS FilterRSS HASH硬中断信号绑定ethtool 操作指令RSS 多队列网卡 在以往,一张 NIC 只具有一个 Rx Queue,对应一个 CPU Core 来进行收包处理。在多核时代,为了充分利用 Multi-CPU Cores&am…

如何使用pandas提取含有指定字符串

这里写自定义目录标题name age state point0 Alice 24 NY 641 Bob 42 CA 922 Charlie 18 CA 70name age state point0 Alice 24 NY 642 Charlie 18 CA 700 False1 True2 TrueName: state, dtype: boolname age state point1 Bob 42 CA 922 Charlie 18 CA 700 True1 False2 True…

tmall.service.settleadjustment.modify( 修改结算调整单 )

¥开放平台免费API必须用户授权 提供给服务商在对结算有异议时,发起结算调整单。 通过说明调整单ID,调整费用值,调整原因进行结算调整单修改。 公共参数 请求地址: 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和…

MyBatisPlus-DML编程控制

MyBatisPlus-DML编程控制4,DML编程控制4.1 id生成策略控制知识点1:TableId4.1.1 环境构建4.1.2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤2:删除测试数据并修改自增值步骤3:运行新增方法INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置I…

【hello Linux】Linux权限管理

目录 1.shell命令以及运行原理 2. Linux权限的概念 3. Linux权限管理 3.1 文件访问者的分类 3.2 文件类型 3.3 访问权限 3.4 访问权限的表示方法 4. 访问权限的相关设置 4.1 chmod命令:修改权限 4.2 chown命令:修改文件的拥有者 4.3 chgrp 命令&#xff…

idea中的项目上传gitee

1.把gitee插件安装找重启idea 2.打开gitee网站从设置->私有令牌 获取token信息完成登录 复制到idea中点击log in 点击ok 3.把项目转为git管理 4.上传到gitee 5.去刷新gitee仓库此时就会发现多了一个我们的项目 以下是拷贝新项目到idea操作 http://t.csdn.cn/ycnSX

【Ansys】什么软件模块是DS,它和workbench、mechanical的区别在哪里?

一、DesignSpace和workbench 早期的Workbench称之为DesignSpace,更偏向于建模。 现在DS是license的一种,而分析的模块在11中称之为Simulation(Design Simulation),在12中改名为Mechanical。 所以,你可以…

IFPUG功能点度量4:度量事务功能

一、基本概念 1、事务功能 事务功能是处理数据功能的基本过程。 每个事务功能都是一个基本过程。 事务功能由多个逻辑处理来完成。 事务功能包含三种类型:EI、EO、EQ 2、基本过程 一个基本过程是由一个逻辑处理或者多个逻辑处理来完成的。 如何识别&#xf…

【备考技巧】系统集成(案例分析题)并不难

案例分析考题分析: 正常情况下四道题,计算题20分左右,剩余三道分析题每题15-20分左右。 ☆案例分析题: 从整体管理、范围管理、质量管理、人力资源管理、合同管理&采购管理、配置管理、风险管理、进度管理、成本管理中出简答题…

Jvm学习笔记(二)GC

GC 垃圾收集(GC)起源于Lisp,远比Java的历史更久,它主要思考了三件事情: 哪些内存需要回收?什么时候回收?如何回收? 本章就根据这三个点进行分析。 哪些内存需要回收? 在java堆中存放着无数的…

Mac浏览器无法上网但可以用微信等

可以使用微信QQ等,但是浏览器无法上网,Mac浏览器无法上网怎么办,Mac浏览器无法上网但可以用微信等(百度了一下,没有找到原因是为什么,只找到了解决方法,记录一下) 1.首先我们打开Ma…

Centos安装docker以及通过docker部署Mysql,照做就行!

1.安装docker 1.1给虚拟机联网(反斜杠带表该语句没写完) yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken 1.2更新本地文件镜像 # 设置docker镜像源 yum-config-manager \--add-repo \https://mirrors.aliyun.com/doc…

【Python_Selenium学习笔记(四)】基于Selenium模块实现键盘操作

基于Selenium模块实现键盘操作 前言 在 Selenium 模块中,提供了一个 Keys 类,来处理键盘操作; 在 Selenium 模块中,使用 send_keys() 方法,来模拟键盘输入, 此篇文章主要介绍如何使用 Keys 类 和 send_ke…
最新文章