shitou's blog 

  • Home
  • About
  • Feed
  • 十人族
  • MIX BOY
  • 塌客

Tags "MongoDB"

09
Mar

MongoDB Beijing 2011

MongoDB Beijing 2011已经结束好几天了,最近一直很忙,没时间来记录,今天使劲挤终于挤出了时间,下面简单说下整个过程吧。

 

会上用同事的iPhone 4拍了几张照片,照片不怎么清楚,主要光线的原因,

 

下午一点半到了会场,签到,拿纸和笔(让做笔记用)还有宣传小册,宣传小册上有一些mongodb的命令,挺专业的,门口图灵和华章两个出版社都摆了坛子,必须都是计算机类的图书了,凑到图灵的摊前看了看,发现了Pro HTML5 Programming这本书,正打算打印这本书的英文版呢,没想到这里居然遇到了,当然是中文版的,正要买,图灵说不卖,这是待会抽奖的赠品,赠品!?活了25年从来和赠品没什么关系,好吧,回去花钱到网上订。

 

进会场发现座位几乎已经坐满了,等了大概10分钟开始了,两个老外,一个是10gen(MongoDB背后的公司)亚洲区的产品xx, 另一个貌似也是产品xxx,英语没听清楚,

 

开场先是感谢CSDN..,靠,居然不感谢CCTV,不想在中国混了...

http://www.ccok.me/photo/image/74/medium/IMG_0204.jpg

上面是华丽丽的吊灯,我的眼。。。

 

http://www.ccok.me/photo/image/73/medium/IMG_0201.jpg

会场

 

开场主要由两个老外来做PPT,一个是说什么是MongoDB的,另一个主要是说一些高级应用的,如scaling, replica sets, sharding和performance相关的内容。

 

http://www.ccok.me/photo/image/75/medium/IMG_0205.jpg

在讲MongoDB入门的东西,什么是MongoDB,MongoDB和传统RDBMS的关系,模式设计,MongoDB的限制,事物,map/reduce, capped collection, tailable cursors, GEO indexing,以及一些简单的查询举例,现场还show了一下mongodb的下载和安装有多么的简单和快捷

 

在说到MongoDB的性能时,PPT只说了MongoDB是用C++编写的,所以具有high performance, 为什么用C++写的就有好的性能呢,难道是因为C++?,我觉得这里至少应该给出一些和RDBMS的benchmark数据才更具有说服力,当然MongoDB在安装,部署,索引创建,插入,查询等许多方面的确都比RDBMS有很多的优势,但大部分没有接触过NoSQL的人更关注的还是和当前RDBMS的性能比较,至于好不好用不是第一要考虑的问题。

 

至于和其他NoSQL的对比没有任何说明。

 

shitou听到的几点重要的是(之前还不知道的):

1) 已经删除的collection表空间虽然在磁盘空间占用中不会释放(类似于MySQL InnoDB的表空间),但会被之后的新数据重新利用。

2) 在将要发布的1.8 版本中单document的大小限制会从4M提升到16M。

 

然后就是提问时间,问的问题一个没听清。。。

 

http://www.ccok.me/photo/image/76/medium/IMG_0206.jpg

下面NO. 2老外上台(其实中间他还客串了一下帮NO. 1举话筒)

 

这个讲内容挺多的,都是一些比较高级的主题,比如

  • Scaling mongodb
  • Linked model design or embed document
  • Data model effects performance
  • Any performance problem can be resolved by changing schema
Scaling mongodb主要就是说的mongodb的master/slave, master/master, replica sets, shading等特性,说目前不推荐在production中使用master/master的模式。

 

由于mongodb是基于JSON的存储方式,所以你可以随意设计你的数据结构,“Just do whatever you want to do",这是官方的说法,不过究竟嵌套文档的层次有多深这个只有自己去做测试,目前shitou在项目中嵌套已经达到6,7层了,性能仍有不错的表现。

 

从“Any performance problem can be resolved by changing schema”可以看出mongodb对自己在简单存储模式(没有大量sub-document)下海量数据的查询还是很有信心的,shitou之前做个测试在400w数据查询的时候性能表现的确不错,感兴趣的同学可以看这里(亿级测试)。

 

好了,中场休息,有吃的,盘子在哪儿?

 

下面就是几个公司的交流PPT, 换场地,分两场同时进行PPT演讲, shitou所在的公司在另一个大厅,
http://www.ccok.me/photo/image/77/medium/IMG_0218.jpg
这是shitou的同事在做PPT,之后就是提问,感觉大家还是对查询,数据量这类问题比较感兴趣,不多说了。

 

下面是同事的PPT,摸我


Tags: MongoDB

2011-03-09 02:28:02, 636 reviews, comment

send to mailbox

Your email:

01
Mar

Mongo Beijing开发者聚会

MongoDB北京开发者聚会这个月3号要在北京知春路举行了,MongoDB开发者Roger Bodamer也将到会,shitou所在的公司受邀也参加这次聚会,而且会做一个半个小时的PPT演讲,不过不是shitou露脸的,由我们一同事要来做,主要就是介绍我们在MongoDB方面的一些使用经验和遇到的问题,等这次聚会过后shitou会放出PPT的下载链接,有兴趣的同学可以3号去参加,貌似不收费的说,具体信息在这里,

 

 

 

链接: http://www.10gen.com/conferences/mongobeijing2011

 

Tags: MongoDB

2011-03-01 06:59:54, 437 reviews, comment

send to mailbox

Your email:

12
Jan

MongoDB删除map_reduce生成的tmp collection

在使用MongoDB的map_reduce功能时,会生成很多临时的collections,即使你在调用map_reduce时指定了keeptemp: false, MongoDB只会在session结束或者服务重启时才会删除这些临时的collections, 这对于在调试会非常麻烦,你会看到大量的tmp collections, 所以需要我们进行手工删除,下面就是批量删除的脚本,在mongo shell中执行:

 

function f() {var names = db.getCollectionNames();for(var i = 0; i < names.length; i++){if(names[i].indexOf("tmp.mr") == 0){db[names[i]].drop();}}};
f();

 

上面shitou故意写在一行里,方便各位同学ctrl+c/ctrl+v.

Tags: MongoDB

2011-01-12 19:36:44, 763 reviews, comment

send to mailbox

Your email:

25
Dec

MongoDB Schema Design

推荐一片不错的PPT, 关于MongoDB设计的,对刚开始用MongoDB的同学有很大帮助,抛开关系数据库的设计思路吧..

 

MongoDB Schema Design
View more presentations from Kyle Banker.
Tags: MongoDB

2010-12-25 11:30:58, 1212 reviews, comment

send to mailbox

Your email:

23
Dec

Erlang OOP

近两个月没有更新博客了,为了证明shitou还活着,需要动动了..


前段时间刚换了工作,一直在忙,还有在和两个朋友业余时间开发一款SNS的WEB Game, 纸牌类的,架构就是JavaScript + Flash Socket + Erlang + MongoDB, 更多关于游戏的内容这里就不多透露了,上线时shitou会专门开贴广告宣传的,哈哈..

 

其实这半年时间除了在忙工作的事情之外shitou一直在关注web game方面的资料,之前尝试的C2C, SNS,感觉这块在国内独立开发者是很难做起来的,尤其是国内环境的影响....(省略2万字)

 

好了,下面开始正题,关于Erlang OOP(面向对象)特性

 

其实Erlang本身就是Function Language, 所谓OOP特性什么的都不是Erlang所强调的重点,Erlang帮主Joe在Erlang程序设计 一书中也一字未提Erlang的OOP内容,最近在用Erlang开发游戏的Socket Server时遇到其中一个模块设计如果用OOP的概念来做的话会更合适,想起了之前在mochiweb的源码中关于http request的解析module就是用的OOP的设计思路,回头再次查看mochiweb的源码,又google一翻,终于得到了解决办法,下面show一个简单的例子:

%oo.erl
-module(oo, [QS]).
-export([get_qs/0]).

new(Qs) ->
       instance(Qs).
get_qs() ->
       QS.

>A = oo:new("hello").
>A:get_qs().

Erlang的OOP功能算是Erlang的一个隐藏特性了,毕竟Erlang是一个函数编程语言,可能老乔(Joe)也不想提这方面的东西吧,关于更多的OOP特性,可以参考这篇文章PDF, 还可以看下mochiweb的源码.

Tags: Erlang,MongoDB

2010-12-23 21:31:37, 784 reviews, comment

send to mailbox

Your email:

19
Aug

MongoDB时间条件查询

mongodb对存储数据的格式要求比较严格,比如在对Integer字段做匹配查询时如果把参数写成"1", 那么是匹配不到的,特别是用惯MySQL等关系数据库的同学更要注意了,

在mongodb的console中对时间范围进行匹配:

 

 

>var start = new Date(2010, 10, 1, 0, 0, 0);

>var end = new Date(2010, 10, 1, 10, 0, 0);

>db.table.distince("username", {created: {$gte: start, $lte: end}});

上面是统计在置顶时间段内唯一的用户名数

 

参考文档:

Query  for a  Date Range

MongoDB Administration

 

Tags: MongoDB

2010-08-19 13:26:47, 6961 reviews, comment

send to mailbox

Your email:

01
Jul

Mochichat新版本上线

Mochichat的新版本上线了,Erlang代码核心全部重写了,这次前端使用了Rails, 数据库采用的MongoDB

 

架构:

http://www.ccok.me/photo/image/63/medium/Screen_shot_2010-07-01_at_3.09.23_PM.png

 

目前可能还存在bug, 而且页面也比较简单,还需要改善

 

测试地址: 摸我

 

 

 

 

Tags: MochiChat,MongoDB

2010-07-01 15:03:34, 925 reviews, comment

send to mailbox

Your email:

25
May

MongoDB入门

又一个NoSQL的文档型数据库, 之前有介绍过CouchDB, Cassandra, MongoDB最近也是异常的活跃,Slideshare上关于MongoDB的文档也是非常之多,

 

关于MongoDB的介绍这里就粘贴了,总之也是非常强大,MongoDB的官方网站中有相应的中文资料介绍,看这里


1.安装


首先下载对应平台的版本,不用安装,直接解压就行了,这里要注意的是,

a) 要分清平台是32bit还是64bit版本的,32位版本的有单个数据库文件2G的限制

b) 在部分linux中(shitou测试了CentOS 4.4和Mac OS 10.6.2平台)启动MongoDB时会直接报出float错误的信息(CentOS 4.4), 这时需要使用对应的static版本

 

2.启动


MongoDB的默认数据库文件目录是/data/db, 所以需要首先建立该目录,并保证MongoDB daemon启动用户可读写

shitous-MacBook:mongodb-osx-x86_64-1.4.2 lilei$ pwd
/usr/local/mongodb-osx-x86_64-1.4.2
shitous-MacBook:mongodb-osx-x86_64-1.4.2 lilei$ sudo bin/mongod
Password:
bin/mongod --help for help and startup options
Tue May 25 10:22:33 Mongo DB : starting : pid = 212 port = 27017 dbpath = /data/db/ master = 0 slave = 0  64-bit 
Tue May 25 10:22:33 db version v1.4.2, pdfile version 4.5
Tue May 25 10:22:33 git version: 53749fc2d547a3139fcf169d84d58442778ea4b0
Tue May 25 10:22:33 sys info: Darwin erh2.10gen.cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_37
Tue May 25 10:22:33 waiting for connections on port 27017
Tue May 25 10:22:33 web admin interface listening on port 28017

Tue May 25 10:22:56 connection accepted from 127.0.0.1:49332 #1
Tue May 25 10:22:57 query admin.$cmd ntoreturn:1 command  reslen:298 752ms

这样启动就可以了,默认管理端口为28017, 服务端口为27017

 

进入console

shitous-MacBook:mongodb-osx-x86_64-1.4.2 lilei$ bin/mongo
MongoDB shell version: 1.4.2
url: test
connecting to: test
type "help" for help
> 

3.使用


mongodb的数据结构为db -> collection -> data
db可以理解为关系数据库的数据库
collection可以理解为表
data为元组

与关系数据库的区别在于:
db和collection都不用创建,在对db和collection使用时mongodb会自动判断当前使用的db和collection是否存在,如果不存在会自动创建
需要注意的是在use dbname; 并不会马上创建dbname, 直到往该库中插入数据时才会创建数据库,也意味着在调用use dbname; 后, 显示当前数据库show dbs; 并不会列出dbname.

同一个collection中data的格式不用一致,比如第一个元祖可以是{name: "testuser"}, 第二个元祖可以是{age: 14, sex: "female"}.


可以把mongodb的shell完全看成是一个javascript runtime, 语法和javascript几乎一样
例子:
>use testdb;
>db.collection1.save({name: "shitou"});
>db.collection1.save({name: "ccok", age: 24});
>db.collection2.save({name: "shitou", sex: "male"});
>db.collection1.find(); #返回数组
{ "_id" : ObjectId("4be82d1bdc68b2484f57e441"), "name" : "shitou" }
{ "_id" : ObjectId("4be82db9dc68b2484f57e442"), "name" : "ccok", "sex" : "male" }
>db.collection1.find()[0];
{ "_id" : ObjectId("4be82d1bdc68b2484f57e441"), "name" : "shitou" }

>db.collection1.findOne({_id: ObjectId("4be82d1bdc68b2484f57e441")}) #返回一条记录
{ "_id" : ObjectId("4be82d1bdc68b2484f57e441"), "name" : "shitou" }

从上面可以看到一个collection中的数据结构不需要一致,但在实际使用和设计中每个collection中数据结构应该保持一致.

 

进一步的使用和查询使用官方的文档已经非常完整了,这里不多废话了,以后再放上具体的使用文档

 

顺便说下在Mac上有一个图形管理工具MongoHub, 用起来还是比较方便的

 

 

Tags: MongoDB

2010-05-25 10:39:36, 4204 reviews, comment

send to mailbox

Your email:

Tags

json Impactjs Canvas fun gen_server superfly PS3 Webgame HTML5 jquery SSH tenerer MooseFS gearman-ruby Gearman MongoDB MochiChat TCP U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • HTML5[3]
  • iPhone[17]
  • Erlang[11]
  • google[13]
  • 生活[45]
  • 音乐[13]
  • 电影[11]
  • linux[29]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[9]
  • ruby[20]
  • ruby on rails[28]
  • 开源[4]

Episode

  • MongoDB
  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache


Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Ruby遍历MemCached的key
  • 服务器监控小脚本
  • MySQL Innodb备份
  • [转载]5个有用的ruby gems

Recommended Posts

  • Tri-survive - HTML5 Game
  • Cut the rope - HTML5版
  • json_formatter
  • 在gen_server中spawn新的进程
  • Superfly - Wildflowers
  • 继续凸墙 for Mac OS
  • MongoDB Beijing 2011
  • MongoDB删除map_reduce生成的tmp collection
  • Mai Kuraki - Future Kiss
  • Erlang OOP
  • 用SSH tunnel凸墙
  • Google的语法高亮工具包
  • 大量数据的批量操作
  • 再次被和谐-_-
  • 十人族: 上线了

Friends' blogs

  • levy
  • sphance
  • andreas
  • yangkunlun
  • {:dev=>:wxianfeng}
  • bheye
  • joeydarko

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 316257
  • 今天访问: 52
  • 日志: 213
  • 评论: 4967
  • 音乐: 9
  • 用户: 1758


少女,不点下广告吗!

 

all by shitou

blog comments powered by Disqus

close