曾经使用过mongoDB来保存文件,最一开始,只是想总结一下在开发中如何实现文件与mongoDB之间的交互。在此之前,并没有系统的了解过mongoDB,虽然知道我们用它来存储文件这些非结构化数据,但是,对于为什么用它存储文件类型的数据以及其存储原理还是不清楚的,甚至说连mongoDB是什么以及它的一些基本概念都不知道。所以,先从宏观入手,本着它是什么,有什么特点,怎么产生,能做什么,怎么用这几步来逐步深入的学习。
经过一些列的博客之后,这是最后我做的一个总结:
经过这一段时间的学习,我发现mongoDB的难点不在具体实现上,其基本使用是非常简单的,正如java操作mongodb文档和文件上传下载中介绍的,只是对几个封装类进行一些操作而已,再加上一份api文档的帮助就足够了。我认为难点在于理解mongoDB的一些特性,体会其存储形式的好处,以及确定应用场景这几方面。
首先说mongoDB的存储形式,以{key:value,key:value}这种结构来存储数据,和关系型数据库的二维表结构不同,没有行和列的概念,不规定每个文档有相同的key,不要求一致的数据类型,这种存储格式大大增强了数据的灵活性。
例如:我要存储化学物质这类信息,存储每种物质的名称和属性,如果用关系型数据库来保存,就需要在化学物质这张表中定义name以及熔点、沸点、分子量等等各种属性,而每种物质的属性很多而且还不相同,这样,这张表定义起来是非常困难的。而如果使用{key:value}来存储,就能避免所有的麻烦了,一种物质作为一个文档来保存,它有哪些属性就在该文档中添加哪些属性就可以。
开始的时候,看到最多的例子就是一个用户信息的集合,每个文档中是name、age、address等信息,那时总是从关系型数据库的设计中转换不过来,觉得这些数据,关系型数据库也能保存啊。是的,两种数据库都能保存这些数据。但是,这里说的重点是在两种数据库的存储理念的区别上,两种存储结构各有各的优势和适用场景。
mongoDB(非结构化数据库)不仅可以处理结构化数据,而且更适合处理非结构化数据(文本、图像、超媒体等信息)。它突破了关系型数据库结构定义不易改变而且数据定长的限制,在处理连续信息和非结构化信息中有着关系型数据库无法比拟的优势。
上面说的是mongoDB存储形式上的优势,紧接着就是这种存储形式给它带来的性能上的优势:由于数据结构松散,数据之间没有join操作,因此可以将数据写到多台服务器上,也就是自动分片技术,分片增强了写扩展性,以应对面对大数据量的写入。另外,mongoDB的复制技术还提供了数据备份、故障转移,同时也减轻了数据读取压力。
好了,关于数据库方面的介绍就先不多说了,下面开始说一下在学习过程中的一些感受:
开始接触时,觉得好多陌生的词:模式*、复制、高可用性、自动分片、信息基础设施等等。这些词几乎同时出现在学习的最初阶段,因为是要打算录一段视频的,又不想照着概念读,所以,在这些理论方面还是花了好多时间的,直到有一点点理解的时候才开始录第一集视频。其实,尽管多用了几天时间,但当时还是对这些名词有些距离感的,直到后来写完这一系列博客,读了好多资料之后,才觉得这些概念不那么陌生了。也许是因为后来把复制、分片这些技术都实现了一遍的原因,或者是因为时间的问题,看的时间长了,看的次数多了之后心理上的一种接受而已。就像我们读书,肯定是先从第一章开始,而往往第一章是最难的,当我们读完整本书,再回过头来看第一章时,可能就会有种豁然开朗的感觉。还有另外一点和大家分享的就是当你见到不懂的词后,不妨直接百度一下,可能会有意外的惊喜,如果你对上面提到的几个词也有不懂的,你试试直接百度一下“高可用性”、“信息基础设施”。其实,有时候阻碍你学习的,可能就是因为几点基础性的东西你不懂,而最快捷的方法就是见着一个不懂的就查一下,这样积累多了,在学习中你的阻碍也就越来越小了。
最后一个分享:
几本参考书:《NOSQL数据库入门》、《MongoDB权威指南》、《mongodb学习手册》、 mongoDB官网
noSql中文网:http://nosql.51document.com/
java操作mongoDB文件的上传、预览、下载、批量打包下载的demo http://blog.csdn.net/liusong0605/article/details/11125277
视频及一些资料的链接:http://yun.baidu.com/share/link?uk=4229378023&shareid=1775223971。
这段时间得到了米老师不少的指点和帮助,嘿嘿,奉上一杯热茶