曾经使用过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. Django中间件的使用

    Django中间件的使用 中间件(middleware) 中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应 ...

  2. .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.

    注意:云虚拟主机和云服务器(ECS)不是同一个产品,请注意分别. 云服务器ECS: 云虚拟主机: 我用的是云虚拟主机也是第二个,版本是window server  声明:默认,已经把域名[已备案]绑定 ...

  3. Yii2.0手册地址

    官网打不开,可以看这里 http://yii2.techbrood.com/   ;跟官网里面文档一样.ps:今天真郁闷,官网都打不开

  4. FAT32格式和NTFS格式区别

    NTFS(Windows):支持最大分区2TB,最大文件2TB: FAT16(Windows):支持最大分区2GB,最大文件2GB: FAT32(Windows):支持最大分区128GB,最大文件4G ...

  5. LeetCode算法题-Valid Palindrome(Java实现)

    这是悦乐书的第174次更新,第176篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第33题(顺位题号是125).给定一个字符串,确定它是否是回文,只考虑字母数字字符并忽略 ...

  6. C语言 投票系统:给定候选人,从键盘输入候选人的名字,统计票数,并输出最终获胜者

    投票系统:给定候选人名单,从键盘输入候选人的名字,统计票数,并输出最终获胜者.若投票人输入的名字不在其候选名单上,则该票数无效. //凯鲁嘎吉 - 博客园 http://www.cnblogs.com ...

  7. MySQL 数据库初识

    一.数据库概述 (详情参考:https://www.cnblogs.com/clschao/articles/9907529.html) 1.概念:存储数据,共享数据 数据库,简而言之可视为电子化的文 ...

  8. WPFの阴影效果

    UI实现过程中有的需要实现投影效果,那么怎么实现呢?整理了几种方式,供参考和查阅 1.图片做成阴影效果的,这个不多说了,和美工小姐姐多共同就好了 2.控件的DropShadowEffect属性 < ...

  9. Python字符串 u"string",r"string"的写法含义

    1.字符串前加 u = unicode编码 例:u"我是含有中文字符组成的字符串." 作用:后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格 ...

  10. 使用VMWare虚拟mac系统,设置网络的正确姿势

    1. 启动mac虚拟机: 2. 虚拟机-虚拟机设置-网络适配器-选择NAT模式: 3. 打开mac的网络设置,选择使用DHCP模式,并设置DNS服务器为win的DNS: 4. 回到win,控制面板-网 ...