一、MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它 支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其 语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
二、MongoDB使用场景
Mongo 适用于以下场景:
(1)网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性
(2)缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
(3)大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
(4)高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持
(5)用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询
MongoDB 不适合于以下几个地方:
(1)高度事务性的系统:例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
(2)传统的商业智能应用:针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是 更合适的选择。
(3)需要SQL 的场景
三:MongoDB 优缺点
MongoDB 优点:
1.性能优越:快速!在适量级的内存的 MongoDB 的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
2.高扩展:第三方支持丰富(这是与其他的 NoSQL相比,MongoDB也具有的优势)
3.自身的 Failover 机制!
4.弱一致性(最终一致),更能保证用户的访问速度
5.文档结构的存储方式,能够更便捷的获取数据: json 的存储格式
6.支持大容量的存储,内置 GridFS
7.内置 Sharding
MongoDB 缺点:
1.MongoDB 不支持事务操作
2. MongoDB 占用空间过大
3.MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方。
四:MongoDB 安装
yum install -y openssl-devel openssl
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.10.tgz
tar zxf mongodb-linux-x86_64-rhel70-3.4.10.tgz
cp -r mongodb-linux-x86_64-rhel70-3.4.10 /usr/local/mongodb
mkdir /data/log -pv
vim /usr/local/mongodb3.4/mongodb.conf
dbpath=/data/ #指定数据库路径
logpath=/data/log/mongodb.log #指定日志路径
port=27017 #指定mongoDB端口号
bind_ip=192.168.142.132 #只有这个ip可以访问,如果配置外网可以访问注释此行
fork=true #用户认证,默认false。不需要认证。当设置为true时候,进入数据库需要auth验证
nohttpinterface=true #关闭http接口,默认关闭27018端口访问
logappend=true #日志输出
cd /usr/local/mongodb
./bin/mongod -f mongodb.conf #启动数据库
./bin/mongo #连接数据库
> show dbs #显示所有表,如果是空表也不显示
> use test #进入/创建数据库
> db.test.insert({"name":"wang"}) #创建表&向表中插入数据
> db.test.insertMany([
{"name":"paqqiu"},
{"name":"Izayoi"}
]) #使用insertMany插入多条数据
> db.user.find({}) #查询所有数据
> db.user.findOne({name:"wang"}) # 查询name=“wang"的数据
> db.test.deleteMany({name:"wang"}) #删除所有name=“wang"的数据
> db.test.drop() #清空表test