曾经使用过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. c/c++ 模板与STL小例子系列<三> traits

    c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...

  2. 手动搭建Docker本地私有镜像仓库

    实验环境:两个Centos7虚拟机,一个是Server,用作客户端,另一个是Registry,用作Docker私有镜像仓库. 基础配置 查看一下两台虚拟机的IP地址 Server的IP地址是192.1 ...

  3. February 23rd, 2018 Week 8th Friday

    It takes a strong man to save himself, and a great man to save another. 强者自救,圣者渡人. When you are not ...

  4. 【工具大道】ssh登录Linux服务器,并显示图形化界面

    本文地址 点击关注微信公众号 "程序员的文娱情怀" 分享提纲: 1. 概述 2. mac版实现ssh登录,显示图形化 1. 概述 平时ssh登录到Linux服务器都是在命令行下进行 ...

  5. Ubuntu 普通用户无法启动Google chrome

    删除 /home/你的用户名/.config/google-chrome文件,再打开就好了 root@ecos:cd /home/ecos/.config root@ecos:~/.config# r ...

  6. python六十八课——网络编程之UDP协议

    1.1 概述 UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接.简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到 ...

  7. (2)Python索引和切片

  8. SQL优化工具SQLAdvisor使用

    一.简介在数据库运维过程中,优化SQL是业务团队与DBA团队的日常任务.例行SQL优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的SQL优化方式包括但不限于:业务层优化.SQL逻辑优 ...

  9. Linux系统学习之Linux账号管理

    一.基本介绍 Linux用户分为三类,即普通用户.根用户.系统用户. 普通用户指的是所有使用Linux系统的真实用户. 根用户就是root用户,权限最大,它的ID为0,也被称为超级用户,root用户拥 ...

  10. Idea突然不停indexing的问题

    只要清理一下Idea的缓存和索引就可以了,在File-Invalidate Caches / Restart中,选择Invalidate and Restart,之后会重启Idea,然后就解决啦!