GridFS

GridFS是一种将大型文件存储在MongoDB的文件规范。 GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。这将容许我们有效的保存大的文件对象,特别对于那些巨大的文件,比如视频。
用于在数据库里存储二进制大文件
可以统一用数据库处理数据,而无需借助外部的文件系统
可以利用MongoDB的复制或分片机制,故障恢复和可扩展性较好
避免使用文件系统的某些限制(例如linux在同一目录下的文件数限制)
避免文件碎片(MongoDB分配空间以2GB作为单位)
#使用mongofiles操作GridFS
[root@linux bin]# echo "Hello, word" > foo.txt
[root@linux bin]# cat foo.txt
Hello, word
[root@linux bin]# ./mongofiles put foo.txt
connected to: 127.0.0.1
added file: { _id: ObjectId('52baeba606b420c225b78a09'), filename: "foo.txt", chunkSize: 262144, uploadDate: new Date(1387981734453), md5: "60b8a03005777c37107ba3babd27739d", length: 12 }
done!
[root@linux bin]# ./mongofiles list
connected to: 127.0.0.1
foo.txt 12
[root@linux bin]# rm -rf foo.txt
[root@linux bin]# ./mongofiles get foo.txt
connected to: 127.0.0.1
done write to: foo.txt
[root@linux bin]# cat foo.txt
Hello, word
#GridFS原理
文件被分成若干块(chunk),每个块作为一个文档存储
有一个单独的文档存储分块的信息,以及文件的元数据
 fs.chunks集合
 fs.files集合

分片

#何时分片
单个节点的磁盘不足
单个mongod不能满足写数据的性能要求
将大量数据放到内存中提高性能
#片键
什么是片键 (就是文档的属性,我们通常说的列)
选择递增片键还是随机片键 (当然是随机的好,跟B*tree索引倾斜一样的道理)
片键对操作和性能的影响
##实施分片
1、启动配置服务器
./mongod --dbpath /nosql/mongodb/dbs/config --port 20000
2、启动mongos
./mongos --port 30000 --configdb 127.0.0.1:20000
3、添加mongod实例(片)
./mongod --dbpath /nosql/mongodb/dbs/shard1 --port 10000
#使用连接mongos
./mongo 127.0.0.1:30000/admin
mongos> db.runCommand({addshard:"127.0.0.1:10000",allowLocal:true})
{ "shardAdded" : "shard0000", "ok" : 1 }
4、对数据库启用分片
mongos> db.runCommand({"enablesharding":"foo"})
{ "ok" : 1 }
##对foo数据库启用分片
5、对集合进行分片
mongos> db.runCommand({"shardcollection":"foo.bar","key":{"_id":1}})
{ "collectionsharded" : "foo.bar", "ok" : 1 }
##foo是数据库 bar是集合 _id是片键
#健壮的集群规划
可以多配置服务器
可以启动多个mongos
可以每个片都是副本集
#查看所有的片
mongos> use config
switched to db config
mongos> db.shards.find()
{ "_id" : "shard0000", "host" : "127.0.0.1:10000" }
#database集合
mongos> db.databases.find()
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "foo", "partitioned" : true, "primary" : "shard0000" }
#chunks集合
mongos> db.chunks.find()
{ "_id" : "foo.bar-_id_MinKey", "lastmod" : { "t" : 1000, "i" : 0 }, "ns" : "foo.bar", "min" : { "_id" : { $minKey : 1 } }, "max" : { "_id" : { $maxKey : 1 } }, "shard" : "shard0000" }
#获得概要
mongos> db.printShardingStatus()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "127.0.0.1:10000" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "foo", "partitioned" : true, "primary" : "shard0000" }
foo.bar chunks:
shard0000 1
{ "_id" : { $minKey : 1 } } -->> { "_id" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 0 }
#删除片
mongos> use admin
switched to db admin
mongos> db.runCommand({"removeshard":"127.0.0.1:10000"})
{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "shard0000",
"ok" : 1
}
mongos> db.runCommand({"removeshard":"127.0.0.1:10000"})
{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(1),
"dbs" : NumberLong(1)
},
"ok" : 1
}

第10周 Mongodb的GridFS与分片相关推荐

  1. 第10章 MongoDB 删除数据库教程

    MongoDB 删除database 语法 MongoDB 删除database的语法格式如下: db.dropDatabase() 删除当前database,默认为 test,尊敬的读者您可以使用 ...

  2. mongodb集群与分片的配置说明

    mongodb集群与分片的配置说明 Shardingcluster介绍: 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统. 系统分为需要三种角 ...

  3. 2019 年第 10 周 DApp 影响力排行榜 | TokenInsight

    鉴于目前 DApp 生态的迅速发展,为客观展示和反映生态的真实状况,TokenInsight 特发布 DApp 影响力排行榜.榜单通过对各 DApp 7 日活跃用户.7 日交易额.活跃天数.合约安全得 ...

  4. 20155307 2016-2017-2 《Java程序设计》第10周学习总结

    20155307 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据 ...

  5. 20155222 2016-2017-2 《Java程序设计》第10周学习总结

    20155222 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 简单JAVA socket * 1 搭建服务器端* 1 创建ServerSocket对象绑 ...

  6. 2017-2018-1 20155202 《信息安全系统设计基础》第10周学习总结

    2017-2018-1 20155202 <信息安全系统设计基础>第10周学习总结 本周考试错题总结 有关高速缓存的说法正确的是() A . 高速缓存的容量可以用C=SEB 来计算 B . ...

  7. 2017-2018-1 20155222 《信息安全系统设计基础》第10周 Linux下的IPC机制

    2017-2018-1 20155222 <信息安全系统设计基础>第10周 Linux下的IPC机制 IPC机制 在linux下的多个进程间的通信机制叫做IPC(Inter-Process ...

  8. 20145204 张亚军《信息安全系统设计基础》第10周学习总结

    <信息安全系统设计基础>第10周学习总结 本周学习内容 1.注意每个系统调用的参数.返回值,会查帮助文档 2.阅读教材,完成课后练习(书中有参考答案),考核:练习题把数据变换一下 3.学习 ...

  9. 一文看懂如何搭建AI应用:10周学会深度学习,还赢下5千美元

    本文来自AI新媒体量子位(QbitAI) 春节后第一个休息日,量子位给大家准备了一个不一样的故事. 在这个故事里,主人公David Brailovsky(就叫阿D吧)参加了一场计算机视觉比赛.这个挑战 ...

最新文章

  1. dockerfile kafka
  2. 嵌入式学习笔记之一:嵌入式linux中混合编译入门
  3. java 字符串编程题,JAVA 基础编程练习题7 【程序 7 处理字符串】
  4. IDEA——使用JSONObject时报错
  5. 南华大学java补考_关于2017年秋季学期学生补考报名及成绩复核的通知
  6. anaconda3虚拟环境离线迁移到服务器
  7. C语言 const 修饰函数返回值 - C语言零基础入门教程
  8. 简单英文题 16 Maximum Sum Not Exceeding K(python)
  9. 计算机应用基础形成性考核作业,计算机应用基础形成性考核作业1
  10. BZOJ 2763 飞行线路
  11. ArrayList 初学小结!
  12. 自认为的经典题,难题,好题,方便日后复习
  13. R语言ggplot2可视化时间序列柱形图:通过双色渐变配色颜色主题可视化时间序列柱形图
  14. 【STM32f401学习之路-02】USART串口通信
  15. 全球首款iOS模拟器出炉!在违法的边缘疯狂试探
  16. 记录win7安装Docker for Windows(DockerToolbox)的一记大坑:wating for an ip....卡死
  17. 【51单片机】考试例程|汇编实现
  18. PostGIS中的常用函数
  19. 用计算机如何弹安和桥,学子风采|计算机与软件工程学院全能大赛决赛预告
  20. 工业品销售找客户的方法 工业销售获客渠道

热门文章

  1. 【MySQL数据库设计与应用(一)】数据库基础知识
  2. 2、Motifs and Structural Roles in Networks
  3. 华中科技大学2022年计算机考研复试时间与复试内容
  4. 浙大2020计算机考研录取分数线,浙江大学2020考研复试分数线已公布
  5. html5中details标签作用
  6. 简易计数器(Java语言)
  7. 青软实训.Net学习笔记
  8. python二维游戏示例_Python 扫雷游戏的简单例子
  9. Apifox如何实现私有化部署?解决方案
  10. 这样写简历,不愁被问职业规划!