MongoDB的体系结构
1. NoSql的概念
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是 SQL ”,互联⽹的早期我们的数据 ⼤多以关系型数据库来存储的。其特点是规范的数据结构(预定义模式)、强⼀⾄性、表与表 之间通过外键进⾏关联,这些特征使我们对数据的管理更加清晰和严谨,但随着互联⽹的发展 数据成爆炸式的增⻓我们对数据库需要更好的灵活性和更快的速度。这就是NoSql可以做到 的。它不需要预先定义模式,没有主外键关联、⽀持分⽚、⽀持复本。
NoSql的分类:
键值(Key-Value)存储数据库
主要会使⽤到⼀个哈希表,这个表中有⼀个特定的键和⼀个指针指向特定的数据。Key-value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进 ⾏查询或更新的时候,Key-value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库
通常是⽤来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指 向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
⽂档型数据库
⽂档型数据库的灵感是来⾃于Lotus Notes办公软件的,⽽且它同第⼀种键值存储相类 似。该类型的数据模型是版本化的⽂档,半结构化的⽂档以特定的格式存储,⽐如JSON。⽂ 档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。⽽且⽂档型数据库⽐键值 数据库的查询效率更⾼。如:CouchDB, MongoDb. 国内也有⽂档型数据库SequoiaDB,已经 开源。
图形(Graph)数据库
图形结构的数据库同其他⾏列以及刚性结构的SQL数据库不同,它是使⽤灵活的图形模 型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语⾔(SQL),因此进⾏数据 库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接⼝或者查询API。如: Neo4J, InfoGrid, Infinite Graph.
2. NoSql的应⽤场景
NoSQL数据库在以下的这⼏种情况下⽐较适⽤:
数据模型⽐较简单;
需要灵活性更强的IT系统;
对数据库性能要求较⾼;
不需要⾼度的数据⼀致性;
3. MongoDb的逻辑组成
体系结构
逻辑结构与关系数据库的对⽐
关系型数据库 | MongoDb |
---|---|
database(数据库) | database(数据库) |
table (表) | collection( 集合) |
row( ⾏) | document( BSON ⽂档) |
column (列) | field (字段) |
index(唯⼀索引、主键索引) | index (全⽂索引) |
join (主外键关联) | embedded Document (嵌套⽂档) |
primary key(指定1⾄N个列做主键) | primary key (指定_id field做为主键) |
aggreation(groupy) | aggreation (pipeline mapReduce) |
⼆、MongoDb安装配置与基础命令
1. MongoDB社区版
下载地址:https://www.mongodb.com/download-center/community
#下载安装包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz
# 解压到指定文件夹下
tar -zxvf mongodb-linux-x86_64-4.0.5.tgz -C /usr/mongodb
2. mongoDb启动参数说明
mongoDb 由C++编写,解压后的包可以直接启动
# 创建数据库目录
mkdir -p /data/mongo
# 启动mongodb
./bin/mongod --dbpath=/usr/mongodb/data/mongo/
常规参数
参数 | 说明 |
---|---|
dbpath | 数据库⽬录,默认/data/db |
bind_ip | 监听IP地址,默认全部可以访问 port 监听的端⼝,默认27017 |
logpath | ⽇志路径 |
logappend | 是否追加⽇志 |
auth | 是否开启⽤户密码登陆 |
fork | 是否已后台启动的⽅式登陆 |
config | 指定配置⽂件 |
配置⽂件示例
创建配置文件
vi conf/mongodb.conf
配置文件内容:
dbpath=/usr/mongodb/mongodb-linux-x86_64-4.0.5/data
port=27017
bind_ip=0.0.0.0
fork=true
auth=false
logpath = /usr/mongodb/mongodb-linux-x86_64-4.0.5/log/mongodb.log
logappend = true
已配置⽂件⽅式启动
./bin/mongod -f ./conf/mongo.conf
3. 客户端Shell 的使⽤及参数说明
# 启动客户端 连接 本机的地的默认端口
./bin/mongo
# 指定IP和端口
./bin/mongo --host=127.0.0.1 --port=27017
mongo shell 是⼀个js 控台,可以执⾏js 相关运算如:
4. 数据库与集合的基础操作
# 查看数据库
show dbs
show databases
# 切换数据库
use local
# 创建数据库与集合,在插入数据时,如果数据库与集合不存在则会自动创建数据库与集合
db.user.insertOne({
name:"张三",age:18})
# 查看集合
show tables
show collections
# 删除集合
db.user.drop()
# 删除数据库
db.dropDatabase()
5. MongoDB中常用数据类型
a. Object ID 自生成的默认的主键(_id)
# ObjectId使用12字节的存储空间,是一个由24个16进制数字组成的字符串(每个字节可以存储两个16进制数字)
_id: 5dc95e47b9e5dc997e15d2fe
# "5dc95e47" 代指的是时间戳,这条数据的产生时间