MongoDB数据库存储

规划

1.数据目录独立存储

2.日志文件独立存储

3./tmp目录独立(有些查询需要大量排序的时候,如果/tmp未独立,而是根目录,可能会存在根目录爆满的情况)

固定集合

创建固定集合

  1. 事先创建

db.createCollection(name, { size : ..., capped : ..., max : ... } )

name:集合的名字

size:集合的大小(字节级别)

capped:默认false,true为固定集合

max:最大的文档数

db.createCollection("mylog3", { size : 10000, capped : true, max : 10 } )

{ "ok" : 1 }

//注:sizemax同时起作用,如果size不够,也无法写入max的数量,只能删除一部分

for(i=1;i<=10;i++) { db.mylog3.insert({"uuid":i}) }

> db.mylog3.find()

{ "_id" : ObjectId("5c7decc9db9a1524d8204d2b"), "uuid" : 1 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d2c"), "uuid" : 2 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d2d"), "uuid" : 3 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d2e"), "uuid" : 4 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d2f"), "uuid" : 5 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d30"), "uuid" : 6 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d31"), "uuid" : 7 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d32"), "uuid" : 8 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d33"), "uuid" : 9 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d34"), "uuid" : 10 }

for(i=11;i<=15;i++) { db.mylog3.insert({"uuid":i}) }

WriteResult({ "nInserted" : 1 })

> db.mylog3.find()

{ "_id" : ObjectId("5c7decc9db9a1524d8204d30"), "uuid" : 6 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d31"), "uuid" : 7 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d32"), "uuid" : 8 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d33"), "uuid" : 9 }

{ "_id" : ObjectId("5c7decc9db9a1524d8204d34"), "uuid" : 10 }

{ "_id" : ObjectId("5c7ded4fdb9a1524d8204d35"), "uuid" : 11 }

{ "_id" : ObjectId("5c7ded4fdb9a1524d8204d36"), "uuid" : 12 }

{ "_id" : ObjectId("5c7ded4fdb9a1524d8204d37"), "uuid" : 13 }

{ "_id" : ObjectId("5c7ded4fdb9a1524d8204d38"), "uuid" : 14 }

{ "_id" : ObjectId("5c7ded4fdb9a1524d8204d39"), "uuid" : 15 }

  1. 由普通集合转换

db.mylog1.insert({"uuid":1,"uname":"hxf"}) //普通的集合

db.runCommand({"convertToCapped":"mylog1","size":1000})

固定集合的优势

1.大小固定,循环存储

2.插入和读取快速(普通的插入需要判断当前的存储空间,如果不够,需要分片适当的分配空间)

3.不需要维护空闲列表

固定集合应该场景

(1).日志文件

(2).固定队列

GridFS存储文件

概念

GridFS是一种将大型文件存储在MongoDB的文件规范

GridFS的存储

[root@iZ4jc05d2ictd0xzg4lzteZ bin]# ./mongofiles --port 27017  -d test3 put /opt/a.txt

-d :数据库

2019-03-05T13:59:47.880+0800    connected to: localhost:27017

added file: /opt/a.txt

switched to db test3

> show collections

fs.chunks  块的信息

fs.files     文件相关信息

users3

> db.fs.files.find()

{ "_id" : ObjectId("5c7e1053fb8ca36c90843086"), "chunkSize" : 261120, "uploadDate" : ISODate("2019-03-05T05:59:47.899Z"), "length" : 10, "md5" : "b2cfa4183267af678ea06c7407d4d6d8", "filename" : "/opt/a.txt" }

> db.fs.chunks.find()

{ "_id" : ObjectId("5c7e1053fb8ca36c90843087"), "files_id" : ObjectId("5c7e1053fb8ca36c90843086"), "n" : 0, "data" : BinData(0,"MTIzNDU2Nzg5Cg==") }

"n" : 0 :第0个块

"data":实际的数据

GridFS的获取

./mongofiles --port 27017  -d test3 get /opt/a.txt

GridFS的删除

[root@iZ4jc05d2ictd0xzg4lzteZ bin]# ./mongofiles --port 27017  -d test3 delete /opt/a.txt   

2019-03-05T14:11:17.163+0800    connected to: localhost:27017

successfully deleted all instances of '/opt/a.txt' from GridFS

> db.fs.files.find()      //为空

> db.fs.chunks.find()    //为空

使用GridFS存储文件的原因

   存储大文件

   在分布式环境中利于数据分片

   数据安全

猜你喜欢

转载自blog.csdn.net/lql_h/article/details/88181049