曾经使用过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。

学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)的更多相关文章

  1. mongodb丢失数据的原因剖析 - 迎风飘来的专栏 - CSDN博客 https://blog.csdn.net/yibing548/article/details/50844310

    mongodb丢失数据的原因剖析 - 迎风飘来的专栏 - CSDN博客 https://blog.csdn.net/yibing548/article/details/50844310

  2. K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472

    1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472  感谢原作者 这里面 按照自己的机器情况进行了学习模仿 ...

  3. jbpm的学习 出处http://blog.csdn.net/hxirui/article/details/1221911

    jbpm入门例子 分类: opensourse2006-09-14 11:30 37308人阅读 评论(22) 收藏 举报 jbpmhibernate数据库oraclemysqltransition ...

  4. scala学习(idea编译过程https://blog.csdn.net/guiying712/article/details/68947747)

    scala官网 https://www.scala-lang.org/ 菜鸟教程学习 http://www.runoob.com/scala/scala-basic-syntax.html w3sch ...

  5. Android 学习路线图(转载自https://blog.csdn.net/lixuce1234/article/details/77947405)

    程序设计 一.java (a)基本语法(如继承.异常.引用.泛型等) Java核心技术 卷I(适合入门) 进阶 Effective Java中文版(如何写好的Java代码) Java解惑 (介绍烂Ja ...

  6. OpenGL学习脚印: uniform blocks在着色器中的使用 转自https://blog.csdn.net/wangdingqiaoit/article/details/52717963

    写在前面 目前,我们在着色器中要传递多个uniform变量时,总是使用多个uniform,然后在主程序中设置这些变量的值:同时如果要在多个shader之间共享变量,例如投影矩阵projection和视 ...

  7. 2. node接口搭建--连接MongoDB数据库 (参考https://blog.csdn.net/ncepu_Chen/article/details/98725104#_337)

    1.使用mongoose连接MongoDB数据库 npm install mongoose 2.新建文件夹config存放数据库地址 3.安装MongoDB

  8. H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667

    HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...

  9. Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688

      在Scrapy框架中的items.py的作用   1.可以预先定义好要爬取的字段     items.py import scrapy     class TencentItem(scrapy.I ...

随机推荐

  1. Latch导致MySQL Crash

    作者:沃趣科技数据库专家 董红禹 问题概述 最近我们遇到一个MySQL的问题,分析后很有代表意义,特地写出来供大家参考.出现问题是,数据库先是被置为只读,然后过了一段时间,MySQL直接Crash掉了 ...

  2. C#批量向数据库插入数据

    程序中,批量插入数据有两种思路. 1.用for循环,一条一条的插入,经实测,这种方式太慢了(插入一万条数据至少都需要6-7秒),因为每次插入都要打开数据库连接,执行sql,关闭连接,显然这种方式不可行 ...

  3. 获取自定义data的几种属性

    //获取data属性的几种方法 var id = this.getAttribute('data-id'); var id = $(this).attr('data-id'); var id = $( ...

  4. linux远程目录共享

    一.环境介绍 1.服务器说明: 有两台服务器,(1)101报表服务器,上面是tomcat跑的原生FineReport报表系统,(2)103业务服务器,上面是具体的业务系统. 2.需求说明: 报表文件由 ...

  5. 【转】win2008 中iis7设置404页面但返回状态200的问题解决办法

    今天根据SEO反馈,某个站点中设置的404页面返回的http状态为200.通过站长工具进行查询,发现返回的状态确实为200. 通过彻查问题,发现这个网站的服务器环境为windows2008 服务器为i ...

  6. vue过渡动画

    概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.c ...

  7. 经常在比特币中看到的merkle树是什么?

    区块基础-merkle树   Merkle tree中文叫做梅克尔树,这当然不是一棵真正的植物树,merkle tree是计算机数据结构中的一种树,是由计算机科学家 Ralph Merkle 提出的, ...

  8. JavaScript中的栈内存和堆内存

    首先JavaScript中的变量分为基本类型和引用类型.基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.基本类型 基本类型有Undefined.Null.Boo ...

  9. PHP 5 全局变量 - 超全局变量

    PHP 全局变量 - 超全局变量 PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. ...

  10. 洛谷题解 P1138 【第k小整数】

    蒟蒻发题解了 说明:此题我用的方法为桶排(我翻了翻有人用了桶排只不过很难看出来,可能有些重复的,这个题只是作为一个专门的桶排来讲解吧) (不会算抄袭吧 ‘QWaWQ’) 简单来说(会的人跳过就行): ...