前言:此系列根据作者在《NoSQL》数据库技术与应用一书校园课堂上,对于老师的提问地收集与回答,“(P1)”为此书书页。部分为开放性问题,若有错误,欢迎提出与指正;若有疑问与补充,欢迎在评论区探讨。望各位理性发言、友好交流、互相进步。
问1:“ GridFS 框架可以更好的存储大于16M的文件”,没有 GridFS 的时候怎么解决大文件问题?(P179)
答:在搜索到的资料中,十几年前的数据特点之一是量少和大小相对于现在较小,这类文件一般使用拆分存储,直接存储在内存中。而在社交网络流行、大数据兴起之后,大文件从MB级别到GB级别不等,本地几块硬盘已经无法满足存储需求。现在采用的存储方式常与一个概念“分布式存储”有关,而GridFS就是MongoDB的分布式文件存储系统。查阅的资料里谈到:“分布式存储通过将大文件拆分成固定大小的块,分别存储在不同存储节点上,可以实现并发高速写作,即一个文件众多磁盘相应;也可以实现众多磁盘一起参与读取,并发性远远高于一块盘的性能。”从MongoDB将1.8版本中doc的上限已经从4M上调到16M,也可以看出数据越来越大、越来越多的发展情况。
【补充】:根据中存储网里计算机存储历史这一网页(存储历史,回顾计算机存储发展历史,软盘、硬盘、内存、存储器、磁带、SSD等发明时间 - 中国存储网www.chinastor.com)可以看出“下一代存储”句话对应数据越来越大、越来越多时期。
问2:为什么块的大小是255KB?小于此大小会有什么结果?大于此大小呢?(P179)
答:若把每块的空间划分过大,则可能造成最后一块空间浪费过多;若每块空间划分过小,则过于分散压力大。(书上有一句话:“最后一个块除外,最后一个块的大小由实际剩余情况而定”(P179),此处实际情况指前面块分完后剩下的大小。会占用一整个块。)
【注意】:“默认情况下,GridFS使用块大小为255KB。”(P179),与假设大块中块大小为1023KB,是因为数据块中存储二进制数据(P180)。其中“默认情况”表明也可以自己根据需求设置其它大小块。
6.5课后习题答案(标注页数为书中对应答案出处)
一、填空题
1.16(P179) 2.fs.chunks fs.files(P180) 3.mongofiles(P181) 4.二进制(P180) 5.MongoDB(P179)
二、判断题
1.√(P179) 2.×(P180) 3.√(P180) 4.×(P180)
三、选择题
1.D(P181) 2.ABD(P180)
以上为《NoSQL》数据库技术与应用(版次:2020年10月第1版,印次:2023年8月第8次印刷) 第六章MongoDB GridFS 相关衍生问题与回答。