专栏首页张善友的专栏分布式文件存储的数据库开源项目MongoDB

分布式文件存储的数据库开源项目MongoDB

MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  • 文件存储格式为BSON(一种JSON的扩展)
  • 可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

在Windows下安装:

1、 到http://www.mongodb.org/display/DOCS/Downloads 下载32位或者64位版本文件

2、 解压缩文件,例如我解压到E:\Workshop\No SQL\mongodb-win32-i386-1.4.2\

3、 WINDOWS会存放在C:\data\db下。可以在启动时使用--dbpath参数指定存储目录并启动。创建数据目录E:\Workshop\No SQL\mongodb-win32-i386-1.4.2\bin\data\db 如:E:\Workshop\NoSQL\mongodb-win32-i386-1.4.2\bin>"E:\Workshop\No SQL\mongodb-win32-i386-1.4.2\bin\mongod.exe" --dbpath .\data\db

启动数据库

现在我们就可以使用自带的shell工具来操作数据库了. (我们也可以使用各种编程语言的驱动来使用MongoDB, 自带的shell工具可以方便我们管理数据库)

“connecting to:” 这个会显示你正在使用的数据库的名称. 想换数据库的话可以: use mydb

使用.NET操作MongoDB非常简单,从github.com/samus/mongodb-csharp下载.NET的驱动,在项目中引用驱动的程序集就可以了。

要建立MongoDB的连接,你只要指定要连接到的数据库就可以。这个数据库不一定存在,如果不存在,MongoDB会先为你建立这个库。同时,在连接时你也可以具体指定要连接到的网络地址和端口。

string connstr = ConfigurationManager.AppSettings["simple"];
if (String.IsNullOrEmpty(connstr)) throw new ArgumentNullException("Connection string not found.");
Mongo mongo = new Mongo(connstr);
mongo.Connect();

配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="simple" value="Server=localhost:27017"/>
</appSettings>
</configuration>

每个数据库都存在零个或多个集合,需要时你可以获得他们的列表:

Database simple = mongo["simple"];
List<string> collectionNames = simple.GetCollectionNames();

要获得某个特定集合,你可以指定集合的名字,并使用GetCollection()方法或者使Index:

IMongoCollection categories = simple.GetCollection("categories");
IMongoCollection categories = simple["categories"];

当你获取了这个集合对象,你就可以对数据进行增删查改之类的操作。

当你获得了一个集合对象,你就可以把文档插入到这个对象中。

var names = new string[] { "Bluez", "Jazz", "Classical", "Rock", "Oldies", "Heavy Metal" };
foreach (string name in names)
{
categories.Insert(new Document() { { "name", name } });
}

要查找我们上一步插入的那个文档,可以简单地使用findOne()操作来获取集合中第一个文档。这个方法返回一个单一文档.

var category = categories.FindOne(new Document { { "name", "Bluez" } });
Console.WriteLine("The id findOne" + category["_id"]);

为了平时使用方便,把mongod注册为系统服务 "D:\Workshop\Mongo\mongodb-win32-x86_64-2.0.3\bin\mongod" --dbpath  "D:\Workshop\Mongo\mongodb-win32-x86_64-2.0.3\data"  --logpath  "D:\Workshop\Mongo\mongodb-win32-x86_64-2.0.3\log\mongodblog.log"  --service  --serviceName MongoDB 

#注册为系统服务修改服务的端口 D:\mongodb\bin\mongod –-dbpath “D:\data” –-port 10001

修改注册表,把—install 改成—service

MongoDB : Windows Service

mongodb小结

Going NoSQL with MongoDB

http://cookbook.mongodb.org/

关于MongoDB在64位服务器上依然报 mmap failed with out of memory 错误的解决方法(附Mysql性能对比测试)

通过 MongoDB 使用 NoSQL

http://msdn.microsoft.com/zh-cn/magazine/ee310029.aspx

http://msdn.microsoft.com/zh-cn/magazine/ff714592.aspx

http://msdn.microsoft.com/zh-cn/magazine/ff798277.aspx

http://www.ibm.com/developerworks/cn/opensource/os-mongodb4/index.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Quartz.NET 2.0正式发布

    2012年4月9日发布了Quartz.NET 2.0 Released http://quartznet.sourceforge.net/, 对应于Java Q...

    张善友
  • 关于MongoDB你需要知道的几件事

    Henrique Lobo Weissmann是一位来自于巴西的软件开发者,他是itexto公司的联合创始人,这是一家咨询公司。近日,Henrique在博客上撰...

    张善友
  • MongoDB核心贡献者:不是MongoDB不行,而是你不懂!

    近期MongoDB在Hack News上是频繁中枪。许多人更是声称恨上了MongoDB,David mytton就在他的博客中揭露了MongoDB许多现存问题。...

    张善友
  • 三分钟 mongodb 开发快速上手

    小熊昨天晚上做了一个非常真实的噩梦,有读者朋友催我”怎么又没有发文!让我们等的好辛苦“,今天一睁开眼眼看后台留言,特么,居然是真的!

    机智的程序员小熊
  • 磊哥评测之数据库:腾讯云MongoDB vs自建

    上期文章我们聊到了redis。这期我们来说说另一个网红nosql数据库:MongoDB。有这么一个介绍MongoDB的说法是:MongoDB是非关系数据库当中功...

    磊哥测评
  • 6.Java集合总结系列:常见集合类的使用(List/Set/Map)

    MARK 总结: Set、List 和 Map 可以看做集合的三大类。 List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。...

    陈树义
  • Node.js 服务连接 MongoDB 处理最佳实践

    关于如何处理 node.js 服务连接 MongoDB,我查阅了大量中英文资料,发现并没有太适合我所期望的能力的方案,因此经过一番官方文档的研究,总结了以下的连...

    逆葵
  • ROBOTINA利用区块链技术使我们与能源的交互方式现代化

    由于目前世界上存在着严重的能源消耗问题,Robotina试图重新思考我们与传统电力网络的互动方式。通过部署大量的现代技术来优化能源消耗,个人不仅能够节约成本,而...

    首席架构师智库
  • 移动端全兼容的flexbox速成班

    说起flexbox,都算是件陈年旧事了,它是2009年W3C提出的一种全新的可伸缩的CSS布局方式。依赖flexbox,我们可以更简单,高效的完成可伸缩式页面的...

    练小习
  • 红蓝对抗场景下的二三事

    未知攻焉知防,警察想要抓小偷,就该先摸透小偷的想法,才能更快捷的抓到小偷毕竟小偷抓小偷更容易。网络安全的攻与防,好比“矛”与“盾”,要想不被“矛”轻易刺穿,不仅...

    FB客服

扫码关注云+社区

领取腾讯云代金券