MongoDB
什么是mongodb?
mongodb是一个基于分布式文件存储的数据库。mongodb是NoSQL数据库,也就是非关系型数据库,内存型数据库。
mongodb和redis的区别?
在之前学习过redis, redis也是内存型NoSql数据库,这与mongodb非常相似,两者之间有什么区别呢?
1. 存储类型不同。
redis是典型的key-value型数据库。redis是key-value型的存储系统,也就是数据必须有key值,一个key对应一个value,redis支持的value的数据类型有
String(字符), set(集合), list(链表), zset(有序集合), hash(哈希)类型。
mongodb是文档性数据库。mongodb中的数据是以文档的形式存在的, 文档类型包括json, xml, bson等。mongodb不需要key值, 数据已集合的形式存在数据库中。
每一个库可以有多个集合(collection), 每一个集合就相当于是一个数据库表, mongodb支持索引, 默认每一个文档的_id字段为主键。
2. 内存空间的大小。
redis在2.0版本之后增加了自己的vm特性, 突破了物理内存的限制, 可以对数据设置过期时间。
mongodb依赖操作系统vm做内存管理, 比较吃内存, 采用镜像文件存储。
3. 数据量大小。
redis适合数据量比较小的操作和运算。
mongodb适合数据量比较大的服务, 主要解决海量数据访问效率问题。
4. 数据一致性(事物支持)
redis事物支持比较弱, 只能保证事物中的操作按顺序执行。
mongoDB不支持事物。靠客户端自身保证。(在mongodb4.0后版本支持了事物)
5. 可操作性
redis支持数据类型多, 但是支持的操作比较少,主要通过key来对数据进行操作。
mongodb内置丰富的数据表达式、索引、函数。最类似关系型数据库, 支持丰富的查询语言。
6. 可用性
redis依赖客户端来实现分布式读写,主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,不支持自动sharding,需要依赖程序设定一致hash机制。
mongodb支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。
mongodb优于redis
7. 可靠性
mongodb自1.8版本之后, 采用binlog方式(mysql采用同样方式)支持持久化,增加可靠性。
redis持久化方式:
7.1 RDB: 对内存中的数据进行数据库状态进行快照
7.2 AOF: 把每条命令都写入文件, 类似mysql的binlog方式。
redis主要通过RDB数据快照的方式来持久化,通过AOF来增强可靠性,但是增强可靠性的同时会影响访问性能。
mongodb优于redis
MongoDB的安装:
新建linux虚拟机。
执行命令:
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
添加mongodb的环境变量,类似java配置环境变量:
vi /etc/profile
添加:
MONGODB_HOME=/usr/local/mongodb
PATH=$PATH:$MONGODB_HOME/bin
保存退出。
source /etc/profile
创建数据库目录。
mongodb的数据库目录默认路径为/data/db, 但是不会自己创建,需要手动创建。
Mongodb启动:
可以直接在mongodb目录下的bin目录下运行./mongod 来启动mongodb数据库, 因为配置了环境变量的关系,也可以直接执行mongod来启动。
启动成功后:
2020-04-24T04:34:40.903-0700 W - [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
2020-04-24T04:34:40.913-0700 I JOURNAL [initandlisten] journal dir=/data/db/journal
2020-04-24T04:34:40.914-0700 I JOURNAL [initandlisten] recover begin
2020-04-24T04:34:40.914-0700 I JOURNAL [initandlisten] recover lsn: 0
2020-04-24T04:34:40.914-0700 I JOURNAL [initandlisten] recover /data/db/journal/j._0
2020-04-24T04:34:40.915-0700 I JOURNAL [initandlisten] recover cleaning up
2020-04-24T04:34:40.915-0700 I JOURNAL [initandlisten] removeJournalFiles
2020-04-24T04:34:40.917-0700 I JOURNAL [initandlisten] recover done
2020-04-24T04:34:40.964-0700 I JOURNAL [durability] Durability thread started
2020-04-24T04:34:40.964-0700 I CONTROL [initandlisten] MongoDB starting : pid=4042 port=27017 dbpath=/data/db 64-bit host=moggledb
2020-04-24T04:34:40.964-0700 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-04-24T04:34:40.964-0700 I CONTROL [initandlisten]
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten]
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten]
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten]
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] db version v3.0.6
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] git version: 1ef45a23a4c5e3480ac919b28afcba3c615488f2
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] build info: Linux build6.ny.cbi.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] allocator: tcmalloc
2020-04-24T04:34:40.965-0700 I CONTROL [initandlisten] options: {}
2020-04-24T04:34:40.970-0700 I JOURNAL [journal writer] Journal writer thread started
2020-04-24T04:34:40.976-0700 I NETWORK [initandlisten] waiting for connections on port 27017
mongodb的默认端口是27017。
mongodb启动方式
可以选择启动带web页面的方式。
./mongod --rest
web访问路径为:http://ip地址:28017
如果不想用默认数据库,也可以使用自定义库路径。
mkdir -p /data/mongodb
./mongod --dbpath=/data/mongodb --rest
关闭数据库:ctrl+c
为了后续方便操作shell,使用后台运行方式。