加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

芒果DB简介

(2017-02-07 17:22:15)

MongoDB 是NoSQL 的一种,面向文档的数据库, 介于传统的结构化数据库(关系型数据库)与非结构化数据库(文件存储)之间的一种,它的数据结构非常松散,也非常灵活,在现代化的计算机应用中,常用来存储分布式文件,以便于大数据处理. 最近项目进入尾声,也没什么BUG 了, 有点时间看看在最近几年很火的芒果数据库--MongoDB. 在github 上找到了这个入门文档,转载在博客上,方便自己。

简介

本章很短,但不是我的错,MongoDB就是那么简单易学。

人们总是说科技的发展风驰电掣。确实,一直以来都不断有新的技术涌现出来。但是我却一直坚持认为程序员所用的基本技术的发展相对而言就缓慢很多。您可以很多年不学习什么但还是可以混过去。让人瞩目的是业已成熟的技术被替代的速度。仿佛一夜间,那些长期以来业已成熟的技术忽然就失去了开发者的关注,昔日地位岌岌可危。

NoSQL逐步攻陷了传统关系数据库的领地,就是这种急剧转变最好的例子。仿佛就在昨天所有的网页还是由一些RDBMS驱动的,而一早起来就已经有大约5种NoSQL的方案证明了他们都是有价值的解决方案。

虽然这些转变看起来是一夜间就发生的,事实却是这些新生的技术历经多年才被接受并应用于实践。一开始先是由一小部分开发者或者企业推动,然后逐步吸取教训,改善方案并见证新技术地位的确立。其他的跟随者之后也慢慢地开始了尝试。对于NoSQL来说也是一样。很多新方案的出现都不是为了去代替更加传统的存储方案,而是为了填补后者所能满足需求之外的一些空白。

说了那么多,在这里我们首先要做的是弄清楚什么是NoSQL。这是一个很宽泛的概念,不同的人有不同的解读。我个人用NoSQL来泛指参与数据存储的系统。换句话说,NoSQL(还是我个人的意见),是一种观念,这种观念认为维护数据的持久性不必是单个系统的责任。相比之下,关系数据库的缔造者一开始就力图把他们的软件当作通用解决方案。NoSQL则更倾向于负责系统中的一小部分功能:限定了部分功能,便可以使用最适合的工具。因此,您以后的NoSQL架构中依旧有可能利用到关系数据库,比如说MySQL,于此同时还可能在特定的部件使用Redis,还会用Hadoop进行大量的数据处理。简而言之,NoSQL就是保持开放和警醒,利用已有的可用的工具和方法去管理您的数据。

您也许会想,MongoDB怎么能搞定那么多?作为一个面向文档的数据库,Mongo是一个更加通用的NoSQL方案。可以认为它是关系数据库的一个替代方案。和关系数据库一样,Mongo也可以和其它更细化的NoSQL方案协作而更加强大。MongoDB既有优点也有缺点,我们在后续的章节中都会提及。

您也许也注意到了,在书中我们是混用Mongo和MongoDB这两个词的。

准备

本书大部分篇幅会用来关注MongoDB的核心功能。所以我们基本上使用的是MongoDB的外壳(shell)。shell在学习MongoDB还有管理数据库的时候很有用,不过您的实际代码还是会用相应的语言来驱动mongoDB的。

这也引出了关于MongoDB您首先需要了解的东西:它的驱动。MongoDB有许多针对不同语言的官方驱动。可以认为这些驱动和您所熟知的各种数据库驱动是一样的。基于这些驱动,MongoDB的开发社区又搭建了更多语言/框架相关的库。比如说NoRM就是一个实现了LINQ的C#库,还有MongoMapper,一个很好地支持ActiveRecord的Ruby库。您可以自行决定直接针对MongoDB的核心驱动编程,或者采用一些高层的库。在这里指出这点,是因为不少MongoDB的新手都会为既有官方驱动又有社区提供的库而困惑不已——前者着重与MongoDB的核心通讯/连接,而后者则提供了更多语言/框架相关的具体实现。

我建议您在阅读本书的同时,也在MongoDB中尝试我给出的例子。如果在这个过程中您自己发现了什么问题,也可以在MongoDB环境中探索需求答案。安装并运行MongoDB其实很简单,只需要几分钟的时间。那么现在就开始吧。

  1. 官方下载页面的第一行(这是推荐的稳定版本)下载与您操作系统相应的安装包。根据不同的开发需要,选择32位或是64位的包。

  2. 解压下载的包(到任意路径)并进入bin子目录,暂且不要执行任何命令。让我先介绍一下,mongod将启动服务器进程而mongo会打开客户端的shell——大部分时间我们将和这两个可执行文件打交道。

  3. bin子目录中创建一个新的文本文件,取名为mongodb.config

  4. 在mongodb.config中加一行:dbpath=PATH_TO_Where_YOU_WANT_TO_STORE_YOUR_DATABASE_FILES。例如,在Windows中您需要添加的可能是dbpath=c:\mongodb\data而在Linux下可能就是dbpath=/etc/mongodb/data

  5. 确认您指定的dbpath是存在的。

  6. 执行mongod,带上参数--config /path/to/your/mongodb.config

以Windows用户为例,如果您把下载的的文件解压到c:\mongodb\,创建了c:\mongodb\data\,然后在c:\mongodb\bin\mongodb.config中添加了dbpath=c:\mongodb\data\。那么您就可以在命令行中输入以下指令来启动mongod

c:\mongodb\bin\mongod --config c:\mongodb\bin\mongodb.config

您可以把这个bin加入到您的默认路径中省得每次都要输入完整的路径。对于MacOSX和Linux的用户,方法也是几乎一样的。唯一的区别在于路径不同。

我希望您现在已经安装并可以运行MongoDB了。如果您遇到什么错误,注意看输出的错误信息——服务器(server)很善于解释究竟是哪里出了问题。

此时您可以运行mongo了(没有d),它会启动一个shell并连接到运行中的服务器。输入'db.version()`以确认所有的东西都正常工作:您应该可以看到您所安装的软件版本。

\clearpage

第一章 - 基础

从了解基本的构成开始,我们开始踏上MongoDB探索之路。显然,这是认识MongoDB的关键,同时也有助于搞清楚MongoDB适用范围的高层次问题。

作为开始,我们需要了解6个简单的概念:

  1. MongoDB有着与您熟知的‘数据库’(database,对于Oracle就是‘schema’)一样的概念。在一个MongoDB的实例中您有若干个数据库或者一个也没有,不过这里的每一个数据库都是高层次的容器,用来储存其他的所有数据。

  2. 一个数据库可以有若干‘集合’(collection),或者一个也没有。集合和传统概念中的‘表’有着足够多的共同点,所以您大可认为这两者是一样的东西。

  3. 集合由若干‘文档’(document)组成,也可以为空。类似的,可以认为这里的文档就是‘行’。

  4. 文档又由一个或者更多个‘域’(field)组成,您猜的没错,域就像是‘列’。

  5. ‘索引’(index)在MongoDB中的意义就如同索引在RDBMS中一样。

  6. ‘游标’(cursor)和以上5个概念不同,它很重要但是却常常被忽略,有鉴于此我认为应该进行专门讨论。关于游标有一点很重要,就是每当向MongoDB索要数据时,它总是返回一个游标。基于游标我们可以作诸如计数或是直接跳过之类的操作,而不需要真正去读数据。

小结一下,MongoDB由‘数据库’组成,数据库由‘集合’组成,集合由‘文档’组成。‘域’组成了文档,集合可以被‘索引’,从而提高了查找和排序的性能。最后,我们从MongoDB读取数据的时候是通过‘游标’进行的,除非需要,游标不会真正去作读的操作。

您也许已经觉得奇怪,为什么要用新的术语(表换成集合,行换成文档,列换成域),这不是越弄越复杂了么?这是因为虽然这些概念和那些关系数据库中的相应概念很相似,但是还是存在差异的。关键的差异在于关系数据库是在‘表’这一层次定义‘列’的,而一个面向文档的数据库则是在‘文档’这一层次定义‘域’的。也就是说,集合中的每个文档都可以有独立的域。因此,虽说集合相对于表来说是一个简化了的容器,而文档则包含了比行要多得多的信息。

虽然这些异同很重要,但是如果您现在还没搞清楚也不必担心。以后试着插入几次(数据)就知道我们这里说的是什么了。最后,集合对其中储存的内容并没有严格的要求(它是无模式的(schema-less)),域是与其所在的文档绑定的。当中的优缺点我们会在后续的章节中继续探讨。

开始动手实践吧。如果您还没有运行Mongo,现在就可以启动mongod服务器以及Mongo的shell。Mongo的shell运行在

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有