Electronic Joint Business

Solution for E-Business

mongodb

使用Azure和CloundDrive运行MongoDB

Running MongoDb on Microsoft Windows Azure with CloudDrive
I’ve been playing around with the whole CQRS approach and think MongoDb works really well for the query side of things. I also figured it was time I tried Azure so I had a look round the web to see if there we’re instructions on how to run MongoDb on Microsoft’s Azure cloud. It turned out there were only a few mentions of it or a general approach that should work but no detailed instructions on how to do it. So, I figured I’d give it a go and for a total-Azure-newbie it didn’t turn out to be too difficult.

Obviously you’ll need an Azure account which you may get with MSDN or you can sign-up for their ‘free’ account which has a limited number of hours included before you have to start paying. One thing to be REALLY careful of though – just deploying an app to Azure starts the clock running and leaving it deployed but turned off counts as hours so be sure to delete any experimental deployments you make after trying things out!!

First of all though it’s important to understand where MongoDb would fit with Azure. Each web or worker role runs as a virtual machine which has an amount of local storage included depending on the size of the VM, currently the four pre-defined VMs are:

•Small: 1 core processor, 1.7GB RAM, 250GB hard disk
•Medium: 2 core processors, 3.5GB RAM, 500GB hard disk
•Large: 4 core processors, 7GB RAM, 1000GB hard disk
•Extra Large: 8 core processors, 15GB RAM, 2000GB hard disk
This local storage is only temporary though and while it can be used for processing by the role instance running it isn’t available to any others and when the instance is moved, upgraded or recycled then it is lost forever (as in, gone for good).

For permanent storage Azure offers SQL-type databases (which we’re not interested in), Table storage (which would be an alternative to MongoDb but harder to query and with more limitations) and Blob storage.

>>> 阅读全文

 

, ,

MongoDB 开发手册 (二) 连接串和mongo操作台概述

数据库连接
MongoDB是数据库服务器,它可以在前台或者后台运行并等待用户连接。因此,当你启动MongoDB的时候,你会看到这样的字句:

~/$ ./mongod
#
# some logging output
#
Tue Mar  9 11:15:43 waiting for connections on port 27017
Tue Mar  9 11:15:43 web admin interface listening on port 28017

这时屏幕会暂停输出,但并未死机,它会在27017端口上侦听用户的连接。一旦用户连接上数据库并开始发送命令,它又会再次记录它所做的一切。任何一款MongoDB驱动或者Mongo操作台都可以用来连接数据库。

不能通过在浏览器输入”http://localhost:27017″来连接MongoDB,数据库不能通过27017端口上的HTTP协议来存取。

标准连接串格式
这儿介绍的URI schema不一定为所有的驱动程序所支持,你可以参考相关的驱动程序文档以获知该驱动支持多少种标准连接URI。所有的驱动都支持某种指定连接格式的替代方式,如果该格式不被支持。

mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/database]
  • mongodb://是必选的前缀,表明该字串是标准的连接格式
  • username:password@是可选项,如果指定了该项,驱动程序在连接数据库服务器之后,尝试用它连接数据库。
  • host1是URI中唯一的必选项,表明所连接的服务器地址。
  • :portX是可选项,未指定的话默认为27017。
  • /database是要登录的数据库名称,只有指定了username:password@之后,该项才有意义,如果未指定,默认将连接到”admin”数据库。

你可以在URI中指定多个主机连以便连接到同步复制对或同步复制集(replica pairs/sets). 下面是一些例子:

>>> 阅读全文

 

, , , ,

MongoDB 开发手册 (一) 快速上手

获得数据库连接
现在我们用MongoDB提供的Shell来操作数据库。(如果有一个合适的驱动程序,我们可以用任何语言进行同样的操作)。这个Shell很适合交互和管理使用。
下面的命令会启动MongoDB的Javascript Shell:

$ bin/mongo

默认地,Shell会连接到本地数据库”test”,所以你可以看到:

MongoDB shell version: <whatever>
url: test
connecting to: test
type "help" for help
>

“connecting to:” 指明当前Shell正在使用的数据库名称。你可以输入下面的命令来切换数据库:

> use mydb
switched to db mydb

输入help,可以看到所有的交互命令。

如果你有其他数据库的开发经验,那么你可能会注意到,在上面的例子中,我们没有创建数据库或者集合,MongoDB不要求这么做。一旦你插入数据,MongoDB会创建底层的集合和数据库。如果你查询一个并不存在的集合,那么MongoDB会将之视为空集合处理。用“use”命令切换数据库并不会马上创建数据库 – 数据库会延迟到第一次插入数据的时候才创建。所以如果你初次使用一个数据库,”show dbs”并不会显示出该数据库直到你插入些数据。

>>> 阅读全文

 

详解MongoDB的DBRefs

比方说,有个内容丰富的站点,它囊括了诸如 blog ,图片之类的内容,也有日程安排, 文章引用的等等东西。这样许许多多截然不同的内容而且他们彼此之间又没有什么共性:blog 有标题和文本,图片有图片链接和缩略图, 文章引用有引文和作者的名字等等。它们的唯一共性就是站点上所有的东西被存储在不同的 MongoDB 集合中,而且都有一个属性 _Id。

现在有个需求,要求用户可以针对这个网站的所有内容都可以发表评论,也就是说,每个人都可以任选站点的任意内容评头论足一番。如果所有的东西都存储在 MySQL 或者其他关系数据库中,我们可能这样设计:我们可以给不同的数据表都添加上一栏comments:blogpost_comments,picture_comments等等。我们也可以选用另一个方法,创建一个新的数据表comments,并存储评论的内容的id和类型type。这样查询起评论就满简单的:

SELECT * FROM comments WHERE type = ‘picture’ AND object_id = 123

第二种方法和 DBRef 的工作方式类似,即利用类型 type 和 id。你可以参考这篇 文章。DBRef 的格式如下

{ $ref :<collname>, $id :<idvalue>; [, $db :<dbname>; ] }

正如你所见的,$ref有个参数 collection name,就是上面的 type。而 $id,当然就是 id 了。(这儿有个字段:$db,不过当我们只有一个 MongoDB 数据库时,它就没什么用处了)。用 MongoDB 我们这样来存储 comments表:

{
author: "John Doe",
text: "Oh, such a great picture",
object: { $ref: "pictures", $id: ObjectID("4b0552b0f0da7d1eb6f126a1") }
}

这就是全部。

>>> 阅读全文

 

, , ,