MongoDB从入门到放弃(一)

一、相关概念

1.1 业务应用场景

有如下需求:

对数据库高并发读写需求;
对海量数据的高效存储和访问; 
对数据库的高可扩展性和高可用性;(mongodb的列可以自动扩展)

应用场景:

社交场景,使用mongoDB存储用户信息/朋友圈信息,通过地理位置索引实现附近的人等
游戏场景,存储游戏用户信息,用户装备、积分、经验等直接以内嵌文档的形式存储,方便查询
物流场景,存储订单信息,订单状态在运送过程中会不断更新,以内嵌数组的方式存储,一次查询就可以得到订单所有的变更信息
物联网场景,存储接入的智能设备信息,设备日志等
视频直播,存储用户信息、点赞互动信息等

不同场景的共同特地:

数据量大
写入操作频繁(读写都很频繁)
价值较低的数据,对事物性要求不高

什么时候考虑使用MongoDB:

应用不需要事务 以及复杂join支持
新应用,需求频繁变化,数据模型无法确定,想要快速迭代开发
需要2000-3000以上的QPS
需要TB甚至PB级别的数据存储
需要99.999%高可用
需要大量的地理位置查询、文本查询

1.2 简介

无模式的文档型数据库。 是最像关系型DB的非关系型数据库。
MongoDB中的记录是一个文档,由字段和值对(field:value)组成的数据结构, 类似于JSON对象,一个文档可以认为就是一个对象; 
value除了使用基本的一些类型外,还可以使用包括其它文档、普通数组、文档数组;
不支持联表查询;

1.3 体系结构

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

1.4 数据模型

MongoDB最小存储单位就是文档-document-对应关系型数据库的行。 
数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。
BSON是一种类JSON的一种二进制形式的存储格式
数据类型描述举例
字符串UTF-8字符串{“x”:“xxx”}
对象ID是文档的12字节的唯一ID{"_id":ObjectId()}
布尔值true/false{“x”: true}
数组值的集合或者列表{“x”: [“a”,“b”,“c”]}
32位整型类型不可用。JavaScript仅支持64位浮点数,所以会被自动转换shell中不支持,会默认转换为64为浮点数
64位整型类型不可用。shell会使用一个特殊的内嵌文档来显示64位整数shell中不支持,会默认转换为64为浮点数
64位浮点数shell中数字就这一种类型{“x”:3.14159, “y”:3}
undefined文档中也可以使用未定义类型{“x”: undefined}
符号shell不支持,shell会将数据库中符号类型数据自动转换为字符串
正则表达式采用JavaScript的正则表达式语法{“x”: /foobar/i}
二进制数据shell中无法使用
最大值/最小值BSON包括一个特殊类型。shell中没有这个类型

二、安装

2.1 docker单机

// 省略下载镜像
// 启动容器 --auth:需要密码才能访问容器
-d,--detach:在容器中后台执行命令
-i,--interactive=true|false:打开标准输入接受用户输入命令,默认为false
-t,--tty=true|false:分配伪终端,默认false
// 这里我指定了我本地的配置文件映射,然后给容器固定了IP
docker run -itd --name mongodb1 --privileged --network=mynet --ip=172.168.60.4 -v /Users/tangye/softTools/mongodb/replicaSets/mongodb1/data/db:/data/db -v /Users/tangye/softTools/mongodb/replicaSets/mongodb1/conf/mongod.conf:/data/configdb/mongo.conf -p 27017:27017 -p 7003:22 mongo -f /data/configdb/mongo.conf

// 添加用户和设置密码,并进入容器
docker exec -it mongodb-one mongo admin
>db.createUser({ user:'admin', pwd:'123456', roles:[ { role:'userAdminAnyDatabase', db:'admin' }, "readWriteAnyDatabase" ]});
>db.auth('admin','123456');

2.2 docker集群

TODO
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值