自学内容网 自学内容网

深入浅出MongoDB(一)

深入浅出MongoDB(一)

MongoDB简介

​ MongoDB是一个高性能、可扩展、易部署的分布式文档数据库系统。MongoDB由C++语言编写,为web应用提供高性能的数据存储解决方案。它采用分布式文件存储的方式,支持高负载情况下添加更多节点以保证服务器性能。MongoDB的数据模型基于文档和集合的概念。使用BSON作为数据结构,能够以面向对象的方式存储数据,非常适合存储复杂的数据结构比如日志记录、用户信息等。

MongoDB主要特点

  1. 面向集合存储:把数据分组到多个集合中,每个集合可以包含无限个文档,类似于关系型数据库中的表,但是不需要进行模式定义。
  2. 模式自由:集合中没有行和列概念,每个文档可以有不同的键,键的值不要求一致的数据类型。
  3. 动态查询:支持丰富的查询表达式,查询指令使用JSON形式的表达式。
  4. 高效的数据存储:支持二进制数据以及大型对象(比如图片和视频)。
  5. 复制和故障恢复:支持数据的复制和故障恢复机制。
  6. 自动分片:支持自动分片以支持云级别的伸缩性,可以动态添加额外的服务器。

MongoDB适用及不适用场景

  1. MongoDB适用于网站数据,缓存,大尺寸低价值的数据,高伸缩性场景,用于对象以及JSON数据的存储。
  2. MongoDB不适用于高度事务性的系统,传统的商业智能应用,复杂的跨文档级联查询。

概念解析

SQL概念MongoDB概念解释
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键
  1. 数据库:一个mongodb可以建立多个数据库,默认数据库是db,存储在data目录中。单实例可以容纳多个独立的数据库,每个都有自己的集合和权限,不同的数据库也放置在不同的文件中。数据库通过名字来标识,需要小写,不能含有''、空格、.、$、/、\、和\0,不能是空字符串。admin从权限角度来看是root数据库,把一个用户添加到数据库,这个用户自动继承所有数据库的权限。local这个数据永远不会被复制,可以用来存储限于本地单击的任意集合。当mongodb用于分片设置时,config数据库在内部使用保存分片的相关信息。
# 显示所有数据的列表
show dbs
# 显示当前数据库对象或集合
db
# 连接到一个指定的数据库
use local
  1. 文档:一个键值对,文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型。文档中的键值对是有序的,区分类型和大小写,不能有重复的键,键是字符串。文档键不能有空字符,.和$只能在特定环境下使用,以下划线_开头的键是保留的。

  2. 集合:集合是mongodb的文档组,存在于数据库中,没有固定的结构,可以插入不同格式和类型的数据,但是通常情况下插入集合的数据具有一定的关联性。集合名不能是空字符串,也不能含有空字符,不能以系统集合保留的前缀"system."开头,集合名不能含有保留字符。

  3. capped集合:固定大小的集合,有很高的性能以及队列过期的特性,自动维护对象的插入顺序,适合用来记录日志。我们需要显式的创建一个capped集合,指定集合大小,单位是字节,集合的数据存储空间值是提前分配的。mongodb的操作日志文件oplog.rs是利用capped集合实现的。

# 在capped集合中可以添加对象、更新,然而对象不会增加存储空间,不允许进行删除、可以使用drop方法删除所有的行,删除后需要重新创建集合
db.createCollection("mycoll", {capped:true, size:100000})
  1. 元数据:数据库的信息是存储在集合中的,它们使用了系统的命名空间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连接

  1. 在mongodb安装目录的bin目录下执行mongod可以启动mongodb服务。
  2. 通过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

创建数据库

  1. use db_name,如果数据库不存在则创建数据库,否则切换到指定数据库。
  2. 示例use tax_engine

删除数据库

  1. db.dropDatabase()删除当前数据库,默认为test,可以使用db命令查看当前数据库名。
  2. db.collection.drop()删除集合。

原文地址:https://blog.csdn.net/dolly_baby/article/details/142568286

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!