1.MongoDB介绍
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
#由于解压安装,每次开启mongodb服务端需要输入命令
1)sudo /usr/local/mongodb/bin/mongod --config /etc/mongodb.conf
2)mongo
#如果命令安装,开启服务端需要输入命令
sudo service mongodb start
#查询mongodb状态
sudo systemctl status mongodb
#停止mongodb服务端
sudo service mongodb stop
2. SQL语言
1)数据库
-
show dbs #列出数据库
-
use test #选择一个数据库,没有默认创建
-
db.status() #查看当前数据库状态
-
sb.dropDatabase() #删除数据库
2)集合
-
show collections #列出所有集合
-
db.createCollection('day1') #创建集合day1
-
db.day1.drop() #删除集合day1
-
db.day1.find() #查看集合day1所有文档
-
db.day1.insert({'name':'lisi','age':20}) # 集合中插入文档,默认分配id
-
db.day1.insert({'_id':'0422','name':'zhangsan','age':21}) # 集合中插入文档,自己设置id
3)文档
-
db.sub.update({'age':20},{'age':30}) #直接替换匹配的第一条,破坏之前的结构
-
db.sub.update({'age':20},{$set:{'age':30}}) #更改匹配的第一条,不破坏之前的结构
-
db.sub.update({'age':20},{$set:{'age':30}},{'multi':true}) #更改所有匹配的文档
-
db.sub.findOne() # 列出第一条
-
db.sub.remove() #删除所有内容
-
db.sub.remove({'name':'lisi'}) #删除多条
-
db.sub.remove({'name':'lisi'}, {'justOne':true}) #删除匹配的第一条
4 )逻辑元算符
-
$lt
-
$gt
-
$gte
-
$ne
-
db.sub.find({num:{$gte:20}})
-
db.sub.find({num:{$in:[5,30]})
-
与或 ,和 $or
-
db.sub.find().limit(5).skip(2) #分页显示
3 . 自我感觉学习完数据库(mysql,mongodb,redis)对于软件的安装、使用、卸载简直上了一个台阶,很受益。
尤其对于分布式的理解(每一个机器上都有一个本地数据库,就是一台服务器上取数据,多台服务器共享)
实际场景的分布式文件存储系统中如何确定改用哪种存储方案呢,可以采用如下方式:
1). 对于用户上传的任何文件,在客户端进行大小判断;
2). 当文件大小小于16MB时,则直接存储到MOngoDB普通集合中
3). 当文件大小大于16MB时,上传到GridFS中,利用集合fs.files以及fs.chunks来保存文件
4). 当用户下载文件时,再根据不同文件的大小属性不同到不同的集合中查找
另外,对于fs.chunks文件我们可以分片存储,片键可以选择索引字段{“files_id”},该字段尽量保证了此文件在所有被分割的chunk都在同一个片上,fs.files不需要分片,此集合只保存文件的元数据信息,数据量不大,同时还可以设置默认块大小(256KB)
需要注意的是:GridFS并不适合小文件存储,因为从GridFS中读取文件涉及到两次查询操作,先查询fs.files集合,再查询fs.chunks集合,chunks合并后获取整个文件。
需要注意的另一点是:文件分块大小为256KB,而分片的块大小默认64MB,不要搞混了。