深入浅出MongoDB(一)
深入浅出MongoDB(一)
文章目录
- 深入浅出MongoDB(一)
- MongoDB简介
- MongoDB主要特点
- MongoDB适用及不适用场景
- 概念解析
- 数据类型
- MongoDB连接
- 创建数据库
- 删除数据库
MongoDB简介
MongoDB是一个高性能、可扩展、易部署的分布式文档数据库系统。MongoDB由C++语言编写,为web应用提供高性能的数据存储解决方案。它采用分布式文件存储的方式,支持高负载情况下添加更多节点以保证服务器性能。MongoDB的数据模型基于文档和集合的概念。使用BSON作为数据结构,能够以面向对象的方式存储数据,非常适合存储复杂的数据结构比如日志记录、用户信息等。
MongoDB主要特点
- 面向集合存储:把数据分组到多个集合中,每个集合可以包含无限个文档,类似于关系型数据库中的表,但是不需要进行模式定义。
- 模式自由:集合中没有行和列概念,每个文档可以有不同的键,键的值不要求一致的数据类型。
- 动态查询:支持丰富的查询表达式,查询指令使用JSON形式的表达式。
- 高效的数据存储:支持二进制数据以及大型对象(比如图片和视频)。
- 复制和故障恢复:支持数据的复制和故障恢复机制。
- 自动分片:支持自动分片以支持云级别的伸缩性,可以动态添加额外的服务器。
MongoDB适用及不适用场景
- MongoDB适用于网站数据,缓存,大尺寸低价值的数据,高伸缩性场景,用于对象以及JSON数据的存储。
- MongoDB不适用于高度事务性的系统,传统的商业智能应用,复杂的跨文档级联查询。
概念解析
SQL概念 | MongoDB概念 | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
- 数据库:一个mongodb可以建立多个数据库,默认数据库是db,存储在data目录中。单实例可以容纳多个独立的数据库,每个都有自己的集合和权限,不同的数据库也放置在不同的文件中。数据库通过名字来标识,需要小写,不能含有
''、空格、.、$、/、\、和\0
,不能是空字符串。admin从权限角度来看是root数据库,把一个用户添加到数据库,这个用户自动继承所有数据库的权限。local这个数据永远不会被复制,可以用来存储限于本地单击的任意集合。当mongodb用于分片设置时,config数据库在内部使用保存分片的相关信息。
# 显示所有数据的列表
show dbs
# 显示当前数据库对象或集合
db
# 连接到一个指定的数据库
use local
-
文档:一个键值对,文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型。文档中的键值对是有序的,区分类型和大小写,不能有重复的键,键是字符串。文档键不能有空字符,
.和$
只能在特定环境下使用,以下划线_
开头的键是保留的。 -
集合:集合是mongodb的文档组,存在于数据库中,没有固定的结构,可以插入不同格式和类型的数据,但是通常情况下插入集合的数据具有一定的关联性。集合名不能是空字符串,也不能含有空字符,不能以系统集合保留的前缀"system."开头,集合名不能含有保留字符。
-
capped集合:固定大小的集合,有很高的性能以及队列过期的特性,自动维护对象的插入顺序,适合用来记录日志。我们需要显式的创建一个capped集合,指定集合大小,单位是字节,集合的数据存储空间值是提前分配的。mongodb的操作日志文件
oplog.rs
是利用capped集合实现的。
# 在capped集合中可以添加对象、更新,然而对象不会增加存储空间,不允许进行删除、可以使用drop方法删除所有的行,删除后需要重新创建集合
db.createCollection("mycoll", {capped:true, size:100000})
- 元数据:数据库的信息是存储在集合中的,它们使用了系统的命名空间
dbname.system.*
。
集合命名空间 | 描述 |
---|---|
dbname.system.namespaces | 列出所有名字空间。 |
dbname.system.indexes | 列出所有索引。 |
dbname.system.profile | 包含数据库概要(profile)信息。 |
dbname.system.users | 列出所有可访问数据库的用户。 |
dbname.local.sources | 包含复制对端(slave)的服务器信息和状态。 |
数据类型
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
Boolean | 布尔值。用于存储布尔值(真/假)。 |
Double | 双精度浮点值。用于存储浮点值。 |
Min/Max keys | 把一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
Arrays | 用于将数组或列表或多个值存储为一个键。 |
Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
Object | 用于内嵌文档。 |
Null | 用于创建空值。 |
Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
Object ID | 对象 ID。用于创建文档的 ID。 |
Binary Data | 二进制数据。用于存储二进制数据。 |
Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
Regular expression | 正则表达式类型。用于存储正则表达式。 |
MongoDB连接
- 在mongodb安装目录的bin目录下执行mongod可以启动mongodb服务。
- 通过shell连接mongodb服务
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- 使用默认端口连接服务
mongodb://localhost
- 使用用户名和密码连接
mongodb://admin:123456@localhost/
- 使用用户名和密码连接到指定数据库
mongodb://admin:123456@localhost/test
- replica pair和replica set是mongdb的一种复制机制。连接两个replica pair的服务器,一个作为备份数据库,需要另一个复制机制实现读写分离方案和节点数据同步。连接三台replica set的服务器,写入操作应用在主服务器并且分布查询到从服务器。
# replica pair
mongodb://xx.cn:27017,xx.com:27017
# replica set
mongodb://host1,host2,host3/?slaveOk=true
# 直接连接到第一个服务器
mongodb://host1,host2,host3/?connect=direct;slaveOk=true
- 安全模式连接replica set,等待至少两个复制服务器写入成功
mongodb://localhost/?safe=true;w=2;wtimeoutMS=2000
创建数据库
use db_name
,如果数据库不存在则创建数据库,否则切换到指定数据库。- 示例
use tax_engine
。
删除数据库
db.dropDatabase()
删除当前数据库,默认为test,可以使用db命令查看当前数据库名。db.collection.drop()
删除集合。