曾经使用过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. shell的while和until 的用法

    shell while循环工作中使用的不多,一般适用于守护进程程序或始终循环执行场景,其他循环计算等. while条件句: 语法: while 条件 do 指令… done ok,我们测试一下: 测试 ...

  2. phprpc的使用示例以及报错Fatal error: Cannot redeclare gzdecode() in D:\wamp\www\immoc\phprpc\compat.php 处理

    今天看书,发现了PHPRPC这个好东东,故在此写下来以作笔记. PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出 ...

  3. Boolean类型在EF和MySql中的映射关系

    MySQL没有Boolean类型.这也是比较奇怪的现象.例: create table xs ( id int primary key, bl boolean ) 这样是可以创建成功,但查看一下建表后 ...

  4. 《Java大学教程》—第22章 多线程程序

    22.2 进程(process):P551时间切片(time-slicing):处理器只是完成了一个任务的一部分工作,然后完成下一个任务的一部分工作,因为处理吕每次完成工作的时间都非常短,因此看起来这 ...

  5. 《Java大学教程》—第8章 通过继承扩展类

    8.2    继承(inheritance):继承是指在类之间共享属性和方法.继承关系是一种层次关系.在继承关系中位于顶部的类称为超类(或基类),位于下面的类称为子类(或派生类).类型转换(type ...

  6. Codeforces Round #542 C. Connect 搜索

    C. Connect time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  7. 引用变量 php面试总结1

    (1)PHP引用变量 概念:不同的变量名,访问同一个变量内容,使用& 知识点: 使用php函数 (a)memory_get_usage() 查看内存使用情况 eg // 定义一个变量 $a = ...

  8. vue.js鼠标经过和离开事件 mouseover mouseout

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code @mouseover="showEwm(1)" @mouseout ...

  9. HashMap 1.7

    1.关键属性与内部类 1.1属性 使用拉链法解决hash冲突的hash表,hash表里存了多少个元素.数组有多长以及当什么情况下需要扩容是重要的参数. transient Entry<K,V&g ...

  10. (二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 实战

    #本片教程介绍了具体如何实现天猫精灵控制一个灯. 前提: HASS平台 你已经搭建一个可以在公网IP访问到的HASS平台--- 我用的是租了阿里云服务器,买了个域名,ubuntu1604系统 你已经搭 ...