<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>NoSQL on 冯威的博客</title><link>https://fwhyy.com/tags/nosql/</link><description>Recent content in NoSQL on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 29 Sep 2011 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/nosql/atom.xml" rel="self" type="application/rss+xml"/><item><title>MongoDB(3)–有关NoSQL及MongoDB的一些概念</title><link>https://fwhyy.com/2011/09/some-concepts-about-nosql-and-mongodb/</link><pubDate>Thu, 29 Sep 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/09/some-concepts-about-nosql-and-mongodb/</guid><description>&lt;p&gt;学习任何东西在没有理解的前提下去背熟一些概念是没有用的，就像只背会了几个概念而没有理解的开发人员去面试是经不住面试官的追问的。前面的两篇对MongoDB做了简单的介绍，能够很快上手，对MongoDB有一个感性的认识。本篇大部分内容来自MongoDB权威指南和MongoDB实战。希望在学习完整个MongoDB后能对本篇的内容有一个全新的认识。&lt;/p&gt;
&lt;h2 id="nosql简介"&gt;NoSQL简介&lt;/h2&gt;
&lt;p&gt;NoSQL，全称是”Not Only Sql”,指的是非关系型的数据库。这类数据库主要有这些特点：非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模 web 应用，这场全新的数据库革命运动早期就有人提出，发展至2009 年趋势越发高涨。NoSQL 的拥护者们提 倡运用非关系型的数据存储，通常的应用如：模式自由、支持简易复制、简单的API、最终&lt;/p&gt;
&lt;p&gt;的一致性 （非ACID ）、大容量数据等。NoSQL 被我们用得最多的当数 key-value 存储，当然还 有其他的文档型的、列存储、图型数据库、xml 数据库等。相对于目前铺天盖地的关系型数 据库运用，这一概念无疑是一种全新思维的注入。&lt;/p&gt;
&lt;h2 id="nosql的优势"&gt;NoSQL的优势&lt;/h2&gt;
&lt;p&gt;同关系型数据库相比，NoSQL有下面的一些优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;适合对数据库高并发读写的需求。&lt;/li&gt;
&lt;li&gt;适合对海量数据的高效率存储和访问的需求。&lt;/li&gt;
&lt;li&gt;适合对数据库的高可扩展性和高可用性的需求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于NoSQL的这些优势，使得NoSQL比较适合以下的一些场景的使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对数据库事务一致性要求不高的时候，因为NoSQL不支持事务（MongoDB是不支持事务的，其他的没做研究）。&lt;/li&gt;
&lt;li&gt;对数据库的写实时性和读实时性要求不高的时候。&lt;/li&gt;
&lt;li&gt;对复杂的SQL 查询，特别是多表关联查询不多的时候。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nosql的特点"&gt;NoSQL的特点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;它可以处理超大量的数据&lt;/li&gt;
&lt;li&gt;它运行在便宜的它运行在便宜的 PC 服务器集群上服务器集群上，意思是在数据库不够用的时候进行PC的集群扩展很方便并且成本很低。&lt;/li&gt;
&lt;li&gt;它击碎了性能瓶颈，因为使用NoSQL省去了传统的程序模型到SQL之间转换的时间，执行效率更高。&lt;/li&gt;
&lt;li&gt;它没有过多的操作，意思是去掉了很多在关系数据库中拥有而在实际又不怎么使用的功能。&lt;/li&gt;
&lt;li&gt;它的支持支持者源于社区者源于社区，所有的NoSQL产品都是开源的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mongodb简介"&gt;MongoDB简介&lt;/h2&gt;
&lt;p&gt;MongoDB 是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。他支持的数据结构非常松散，是类似json 的bjson 格式，简称BSON，因此可 以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能， 而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。&lt;/p&gt;
&lt;h2 id="mongodb特点"&gt;MongoDB特点&lt;/h2&gt;
&lt;h3 id="1-丰富的数据模型"&gt;1 丰富的数据模型&lt;/h3&gt;
&lt;p&gt;MongoDB是一种面向文档的数据库。在MongoDB中文档就相当于关系型数据库中的行。文档中可以包含很复杂的数据结构，这样一条记录就可以表示很复杂的层级关系。比如说文章表有一个字段是评论，在关系型数据库中我们通常会建一个评论表和文章表做关联，在MongoDB中就可以直接将评论存在一条文章记录的文档中。更符合我们的思维。&lt;/p&gt;
&lt;p&gt;MongoDB没有模式，也就是说没有表结构，文档的字段可以随时添加，不会对原来数据有任何影响，使开发变得很容易。&lt;/p&gt;
&lt;h3 id="2-容易扩展"&gt;2 容易扩展&lt;/h3&gt;
&lt;p&gt;在一些大型的网站中，数据的增长是非常惊人的。在面临数据增长机器不够用的时候通常有两种做法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;购买更高配置的机器，会花费很大，而且达到物理极限后花钱也买不到更高配置的了。&lt;/li&gt;
&lt;li&gt;进行扩展，将数据分散到多个机器上，这种在操作上会显得复杂点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MongoDB的设计就考虑到了扩展的问题，它所采用的面向文档的数据模型使得可以自动在多台服务器中切割数据。还可以平衡群集的数据和负载，自动进行文档重排。&lt;/p&gt;
&lt;h3 id="3-丰富的功能"&gt;3 丰富的功能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;索引：MongoDB支持通用辅助索引，可以进行多种快速查询。&lt;/li&gt;
&lt;li&gt;存储Javascript：不必再使用存储过程了，可以直接在服务器端存取Javascript的函数和值。&lt;/li&gt;
&lt;li&gt;聚合：MongoDB支持MapReduce和其他聚合工具。&lt;/li&gt;
&lt;li&gt;固定集合：集合的大小是有上限的，这对于日志一类的数据很有用。&lt;/li&gt;
&lt;li&gt;存储文件：MongoDB支持用一种容易使用的协议（GridFS）来存储大型文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-更快的速度"&gt;4 更快的速度&lt;/h3&gt;
&lt;p&gt;高性能是MongoDB的目标，为了提高性能，就必须进行很多精简的设计，相比关系型数据库少了很多功能，但仍然保持着关系型数据库的众多的特性。一些精简设计表现在：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用MongoDB传输协议作为与服务器交互的主要方式，将比较HTTP、Reset等可以节省不少开销。&lt;/li&gt;
&lt;li&gt;对文档进行动态填充，预分配数据文件，用空间换取时间，而且空间对于现在来说已不是问题。&lt;/li&gt;
&lt;li&gt;默认的存储引擎使用内存映射文件，将内存管理工作交给OS去处理。&lt;/li&gt;
&lt;li&gt;动态查询优化器会记住执行查询最高效的方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5-简单的管理"&gt;5 简单的管理&lt;/h3&gt;
&lt;p&gt;MongoDB尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外，几乎没有什么管理操作了。如果主服务器挂掉了，MongoDB会自动切换到备份服务器上，并将备份服务器提升为活跃服务器。在分布式的环境下，群集只需要知道有新的节点就会自动集成和配置新的节点。&lt;/p&gt;
&lt;h2 id="mongodb适用场景"&gt;MongoDB适用场景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;网站数据：MongoDB非常适合实时的插入，更新与查询，并具备网站实时数据存储所 需的复制及高度伸缩性 。&lt;/li&gt;
&lt;li&gt;缓存：由于性能很高，MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后， 由MongoDB 搭建的持久化缓存层可以避免下层的数据源过载 。&lt;/li&gt;
&lt;li&gt;大尺寸，低价值的数据：使用传统的关系型数据库存储一些数据时可能会比较昂贵，在此之前，很多时候程序员往往会选择传统的文件进行存储 。&lt;/li&gt;
&lt;li&gt;高伸缩性的场景：MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce 引擎的内置支持 。&lt;/li&gt;
&lt;li&gt;用于对象及JSON 数据的存储：MongoDB 的BSON 数据格式非常适合文档化格式的存储及查询 。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>MongoDB(2)–MongVUE介绍</title><link>https://fwhyy.com/2011/09/mongvue-introduction/</link><pubDate>Tue, 20 Sep 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/09/mongvue-introduction/</guid><description>&lt;p&gt;对于数据库来说有一款功能强大的管理工具将会大大的提高我们的工作效率。对于MongoDB来说MongoVUE就是这样一款工具，MongoVUE在1.0版以后就开始收费了，所以我现在用的还是0.9.7.2版。对于初学来时已经够用了。&lt;/p&gt;
&lt;p&gt;安装运行后的界面如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300728711.webp" alt="2011-09-12_150826-300x199" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击Connect来连接MongoDB数据库&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300728115.webp" alt="2011-09-12_150941-300x225" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;填写好Name 和Server后点击Save，Name随便给取个名字就型，Server为服务器的地址，本机即127.0.0.1，Port默认为27017，可以根据实际情况进行设置。保存后在Connect界面就多了一个MyMongoDB的数据库连接，点击Connect即可连接到数据库。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300728285.webp" alt="2011-09-12_200130" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;除了系统默认的admin和local数据库外，在上一篇中创建的Blogs数据库也在列表中。并且在Blogs库中已经存在一个Collection，就是在上篇中insert的一条数据。双击Posts，在右边的窗口中会展示数据，分为三个Tab页来进行展示，分别是树状结构、表结构（类似关系型数据库的展示方式）和文本结构（BSON）。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300728453.webp" alt="2011-09-12_200949-300x203" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;本篇就介绍到这里，更多的功能和用法还是让读者自己下载试用吧。&lt;/p&gt;
&lt;p&gt;MongoDB0.9.7.2 版下载：&lt;a href="http://download.csdn.net/detail/oec2003/3595146"&gt;http://download.csdn.net/detail/oec2003/3595146&lt;/a&gt;&lt;/p&gt;</description></item><item><title>MongoDB(1)--MongoDB介绍及安装</title><link>https://fwhyy.com/2011/09/mongo-introduction-and-installation/</link><pubDate>Tue, 13 Sep 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/09/mongo-introduction-and-installation/</guid><description>&lt;p&gt;NoSql已经流行好一阵子了，我似乎接触的有点晚了。NoSql的产品有很多，MongoDB只是其中一种，之所以选在学习MongoDB是因为最早知道的就是她，也比较具有代表性。&lt;/p&gt;
&lt;p&gt;MongoDB相比传统的关系型数据库有一些优势，比如在海量数据下的性能表现、很好的扩展性等。初识MongoDB感觉和关系型数据库最大的区别就是没有关系型数据库中的那种关系模型，更准确的说她是一个面向文档的数据库。通俗的讲在MongoDB中集合对应关系型数据库的表，文档对应着行。在MongoDB中一条记录的表现形式是BSON的格式，和JavaScript中的JSON类似。&lt;/p&gt;
&lt;h2 id="mongdb的下载安装"&gt;MongDB的下载安装&lt;/h2&gt;
&lt;p&gt;下载地址：&lt;a href="http://www.mongodb.org/downloads"&gt;http://www.mongodb.org/downloads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载下来的是一个mongodb-win32-i386-1.8.2.zip文件，将该文件解压，会发现里面的bin目录下有很多的exe文件，这些是MongoDB的一些工具，比如要启动MongoDB服务就要用到里面的Mongod.exe。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300726967.webp" alt="2011-09-12_114648" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bsondump: 将 bson 格式的文件转储为json 格式的数据&lt;/li&gt;
&lt;li&gt;mongo: 客户端命令行工具，其实也是一个javascript解释器，支持javascript语法&lt;/li&gt;
&lt;li&gt;mongod: 数据库服务端，每个实例启动一个进程，可以fork 为后台运行&lt;/li&gt;
&lt;li&gt;mongodump/ mongorestore: 数据库备份和恢复工具&lt;/li&gt;
&lt;li&gt;mongoexport/ mongoimport: 数据导出和导入工具&lt;/li&gt;
&lt;li&gt;mongofiles: GridFS 管理工具，可实现二制文件的存取&lt;/li&gt;
&lt;li&gt;mongos: 分片路由，如果使用了sharding功能，则应用程序连接的是 mongo而不是 mongod&lt;/li&gt;
&lt;li&gt;mongosniff: 这一工具的作用类似于tcpdump，不同的是他只监控MongoDB 相关的包请求，并且是以指定的可读性的形式输出&lt;/li&gt;
&lt;li&gt;mongostat: 实时性能监控工具&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要正常的使用MongoDB首先要做的就是启动MongoDB服务，打开CMD进入到MongoDB的bin目录，执行Mongod.exe，如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300726870.webp" alt="2011-09-12_132542-300x66" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;可以看到在mongod.exe 后面有一个-dbpath来制定数据库的存放路径。这个目录我们必须事先创建好。如果没有制定-dbpath，会使用默认路径：C：\data\db\。&lt;/p&gt;
&lt;p&gt;下面就可以在MongoDB中来创建数据库了，本文中使用MongoDB自带的Shell来进行操作，在下一篇中将介绍MongoDB的一款IDE工具MongoVUE，使用bin先的mongo.exe可以打开Shell窗口。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300727903.webp" alt="2011-09-12_133937-300x58" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;执行show dbs命令可以查看所有数据库的列表，关于更多的Shell命令可以通过执行help命令查看。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300727232.webp" alt="2011-09-12_142453" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;admin和local数据库是MongoDB自带的数据库，这两个数据库在系统中有特殊的作用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;admin：最高权限的一个数据库，该数据库中的用户会拥有所有数据库的权限。一些特殊的服务器端的命令也只能从这个数据库中运行。&lt;/li&gt;
&lt;li&gt;local：该数据库不会被复制，可以用来存储限与本地单台服务器的任意集合。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在MongoDB的Shell命令中并没有创建数据库的命令，假设现在要创建一个名为Blogs的数据库，并在这个数据库中添加集合和文档，我们可以想下面这样做：&lt;/p&gt;
&lt;p&gt;1 执行use Blogs命令将数据库切换到Blogs，当然此时Blogs还并没有被创建。&lt;/p&gt;
&lt;p&gt;2 创建一条数据记录保存在一个变量post中，执行db.Blogs.insert(post)。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300727969.webp" alt="2011-09-12_201351-300x91" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;这时可以看在在上面设定的路径中已经生产了数据库的文件：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300727295.webp" alt="2011-09-12_201414-300x103" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;有关更多的Shell命令使用在后面的文章中再介绍。&lt;/p&gt;
&lt;h2 id="mongodb-drivers"&gt;MongoDB Drivers&lt;/h2&gt;
&lt;p&gt;要在程序中使用MongoDB，需要要到MongoDB针对某一语言的驱动，在MongoDB的官网中已经提供了Ruby 、Python、C#、PHP等多种语言的驱动。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;驱动列表页：&lt;a href="http://www.mongodb.org/display/DOCS/Drivers"&gt;http://www.mongodb.org/display/DOCS/Drivers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;C#驱动下载：&lt;a href="https://github.com/samus/mongodb-csharp"&gt;https://github.com/samus/mongodb-csharp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对MongoDB的简单介绍就到此，后面的文章会用C#来写一个完整的示例。&lt;/p&gt;</description></item></channel></rss>