MongoDB简单介绍

1. 介绍
MongoDB的名字来源于英文单词 humongous (巨大, 极大),是一种文档型的数据库管理系统, 使用C++语言开发,2007年10月,由10gen团队开发, 2009年开源
开发者: MongoDB Inc
初始版本: 2009年2月11日
开源地址: github.com/mongodb/mongo
官网网站: https://www.mongodb.com
编程语言: C, C++, JavaScript
开源许可证: GNU AGPL v3.0, 驱动使用的许可证是Apache License v2.0

创始人介绍
Dwight Merriman
DoubleClick的联合创始人兼CTO
Eliott Horowitz
曾任电子营销网络公司DoubleClick工程师,互联网购物搜索引擎公司ShopWiki任CTO
Kevin P. Ryan
Gilt Groupe的创始人兼董事长

MongoDB的历史背景
Eliott Horowitz和Dwight Merriman共事的时候都有一个共同的疑问“有什么技术和功能是我门在DoubleClick的时候最希望拥有的”,后来Dwight遇到Eliot,再后来共同创建了MongoDB的前身10gen,Dwight,Eliot,Kevin分别出任公司的董事长,CTO和董事。初期10gen想建立一个开源平台Bablle, 然而Babble没有很大的市场,不过用户都赞同在优化平台上创建和使用10gen数据库P,后来数据库被正式命令为MongoDB,放弃Babble项目,并于2009正式开源MongoDB,2013年8月27日,10gen公司更名为MongoDB公司

MongoDB和MySQL一样,分为企业版和社区版
xx Linux安装包和Linux legacy安装包的区别是:
xx Linux的二进制安装已经使用SSL进行编译和动态链接,也就是要求安装OpenSSL
Linux legacy安装包则不包含SSL加密,可能缺乏相应平台系统的性能优化,不建议在生产环境中使用

2. MongoDB特点
(1). 面向文档存储
(2). 支持丰富的查询表达式
(3). 容易扩展
(4). 支持多语言
(5). 功能丰富,包括索引、存储javascript、聚合、固定集合、文件存储

3. MongoDB重大版本特性
(1) MongoDB 3.0版本,首个版本3.0.1发布于2015年3月17日
支持wireTiger存储引擎(3.0支持的存储引擎有MMAP v1和WireTiger)
提供插入式存储引擎API接口(类似MySQL可插拨式存储引擎)
提供SCRAM-SHA-1验证机制(安全性方面的增强)
增强explain函数,提高MongoDB查询优化方面的功能
MongoDB Ops Manager, MongoDB操作管理器,可以完全自动化,备份和监控等功能,增强MongoDB的易用性

MMAP存储引擎的缺点: 耗费磁盘空间和内存空间且难以清理,库级别锁
WireTiger存储引擎的特性:
通过MVCC实现文档级别并发控制,即文档级别锁
支持对所有集合和索引进行Block压缩和前缀压缩,压缩选项包括: 不压缩、Snappy压缩(默认,压缩速度快)和Zlib压缩(压缩率高,CPU消耗多且速度稍慢)
在集合和索引级别分配文件,数据库中所有集合和索引均存储在单独的文件中,集合或索引删除后,对应的存储文件也随即删除
可配置内存使用上限,通过storage.wiredTiger.engineConfig.cacheSizeGB参数控制最大内存,默认值是物理内存的一半

MMAP V1的改进:库级别锁提升为集合级别锁, 基于usePowerOf2Sizes的预分配方式

复制集Replica Sets: 复制成员最大支持50个,投票最大成员数7个;
分片集群shared clusters: 新增工具函数sh.removeTagRange(); 增加均衡器状态显示

优化explain函数,支持count/find/group/aggregate/update/remove等操作的查询计划显示
使用go重写mongodb工具,mongodump/mongorestore添加并行机制
createIndex可同时建立多个索引,并且只扫描一遍数据,提升建索引效率

(2) MongoDB 3.2新特性
新增加密存储引擎,保护高度敏感的数据
新增内存存储引擎,为实时分析要求高的应用提供性能的延迟
默认存储引擎WiredTiger,比MMAP存储提供更颗粒化的并发控制及本地压缩在降低高达80%存储支出,提高7~10倍性能
文档验证
复制集协议改进:更快的故障转移和更严格的持久性保证
简化分片管理,配置服务器默认部署为一个复制集,提高元数据的一致性和可管理性

(3) MongoDB 3.4新特性
分片集群:
Config server, mongod, mongos都能相互感知整个分片集群的存在,分片集群里mongod启动时必须显示配置sharding.clusterRole为shardsrv
3.2及以前版本,分片集群的负载均衡由mongos负责,多个mongos会抢一个分布式锁;3.4版本里,负载均衡由Config server的Primary节点负责
3.2引入复制集模式的Config Server(CSRS模式),在些之前Config Server由多个镜像的单节点组成(SCCC模式),3.4版本不再支持SCCC模式的Config Server, 所以在升级到3.4时需要先升级为SCRS模式
引入zone的概念,主要取代tag-aware sharding机制,能将某些数据分配到指定的一个或多个shard上,这个特性将极大的方便sharding cluster的跨机房部署
复制集:
增加writeConcernMajorityJournalDefault选项,默认true, 即当指定WriteConcern为Majority时,数据写到大多数节点并且journal成功刷盘后才向客户端确认成功,如果为false则大多数节点写到内存就向客户端确认

增加mongoreplay工具,用于监控并记录mongod上执行的命令并replay到另一个mongod实例上

4. 概念术语
SQL术语/概念 MongoDB术语/概念 解释
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MonoDB自动将_id字段设置为主键

文档是一组键值对(key-value)即BSON: 文档中的键/值对是有序的,区分类型和大小写,不能用重复键,键是字符串;命名不能包含\0和$
集合就是MongoDB文档组,类似表格;集合存在于数据库中,没有固定结构;当第一个文档插入时,集合就会被创建

5. MongoDB数据类型
String 字符串,UTF-8编码的字符串才是合法的
Integer 整型数值
Boolean 布尔值
Double 双精度浮点值
Min/Max keys 将一个值与BSON(二进制的JSON)元素的最低值和最高值相对比
Array 数组/列表或多个值存储为一个键
Timestamp 时间戳
Object 内嵌文档
Null 空值
Symbol 符号,一般用于采用特殊类符号类型的语言
Date 日期时间
Object ID 对象ID
Binary Data 二进制数据
Code 代码类型
Regular expression 正则表达式类型

6. 在CentOS 7 下安装MongoDB
首先安装openssl
[root@node100 ~]# cd /usr/local/src/
[root@node100 /usr/local/src]# yum -y install openssl openssl-devel
下载二进制安装包
[root@node100 /usr/local/src]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.10.tgz
解压到/usr/local/目录
[root@node100 /usr/local/src]# tar xf mongodb-linux-x86_64-rhel70-3.4.10.tgz -C /usr/local/
创建软链接
[root@node100 /usr/local/src]# ln -s /usr/local/mongodb-linux-x86_64-rhel70-3.4.10/ /usr/local/mongodb
配置环境变量
[root@node100 /usr/local/src]# echo 'PATH=/usr/local/mongodb/bin:$PATH' > /etc/profile.d/mongodb.sh
[root@node100 /usr/local/src]# source /etc/profile
查看版本信息输出
[root@node100 /usr/local/src]# mongo --version
MongoDB shell version v3.4.10
git version: 078f28920cb24de0dd479b5ea6c66c644f6326e9
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
distmod: rhel70
distarch: x86_64
target_arch: x86_64

7. 启动mongodb
禁用透明大页
[root@node100 /usr/local/src]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@node100 /usr/local/src]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@node100 /usr/local/src]# vim /etc/rc.local #加入以下两行
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@node100 /usr/local/src]# ll /etc/rc.d/rc.local
创建数据目录
[root@node100 /usr/local/src]# mkdir /data/db -p
[root@node100 /usr/local/src]# chown keung.keung /data/db -R
切换到普通用户运行mongodb
[root@node100 /usr/local/src]# su - keung
[keung@node100 ~]$ /usr/local/mongodb/bin/mongod --dbpath=/data/db --logpath=/data/db/mongodb.log --auth --fork

在新的终端上操作连接mongodb测试

[keung@node100 ~]$ mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
> use admin
switched to db admin
> db.createUser({user:"admin",pwd:"password",roles:["root"]})  #添加第一个用户,该用户需要有管理权限
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
> db.getCollectionNames()
[ "system.users", "system.version" ]
> db.auth("admin", "password") #认证
1
> use testdb1
switched to db testdb1
> db.createUser({user: "keung", pwd: "keung", roles: [{ role: "dbOwner", db: "testdb1" }]}) #创建数据库用户,角色是dbOwner
Successfully added user: {
    "user" : "keung",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "testdb1"
        }
    ]
}
> db.t_user.insert({"user": "mongodb"});
WriteResult({ "nInserted" : 1 })
> db.t_user.find();
{ "_id" : ObjectId("5a202a3339619aa42e2c6a5a"), "user" : "mongodb" }

关闭mongodb实例
[keung@node100 ~]$ /usr/local/mongodb/bin/mongod --dbpath=/data/db --logpath=/data/db/mongodb.log --auth --fork --shutdown

 

7. mongodb bin目录结构
$ ll /usr/local/mongodb/bin/
total 277940
-rwxr-xr-x 1 keung keung 10431547 Oct 26 01:53 bsondump #用于将导出的BSON文件格式转换为JSON格式
-rwxr-xr-x 1 keung keung 29894808 Oct 26 02:18 mongo #客户端命令
-rwxr-xr-x 1 keung keung 54443104 Oct 26 02:18 mongod #服务器端命令
-rwxr-xr-x 1 keung keung 12774774 Oct 26 01:54 mongodump #备份命令
-rwxr-xr-x 1 keung keung 10787692 Oct 26 01:53 mongoexport #数据导出命令
-rwxr-xr-x 1 keung keung 10668434 Oct 26 01:53 mongofiles #GridFS工具,内建的分布式文件系统
-rwxr-xr-x 1 keung keung 10942683 Oct 26 01:53 mongoimport #数据导入命令
-rwxr-xr-x 1 keung keung 10431351 Oct 26 01:54 mongooplog #从一个实例同步oplog到另一个实例并重放
-rwxr-xr-x 1 keung keung 53807112 Oct 26 02:18 mongoperf #磁盘 IO 性能的工具
-rwxr-xr-x 1 keung keung 14070941 Oct 26 01:54 mongoreplay #用于监控并记录 mongod 上执行的命令并 replay 到另一个 mongod 实例
-rwxr-xr-x 1 keung keung 14134352 Oct 26 01:53 mongorestore #数据恢复命令
-rwxr-xr-x 1 keung keung 30568864 Oct 26 02:18 mongos #查询路由器
-rwxr-xr-x 1 keung keung 11002036 Oct 26 01:53 mongostat #实时查看增删改查操作的QPS,内存使用和网络吞吐信息
-rwxr-xr-x 1 keung keung 10628425 Oct 26 01:54 mongotop #实时查看热点集合

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇