Mon Apr 16 01:41:38 [conn327586] update db.coll query: ...... upsert:1 112ms但是会有当前对应的连接ID,这里就是conn327586, 在每次client与mongodb server建立连接时会记录client的IP和所产生的连接ID, 可以通过再反向查找“accepted from.*conn327586"这样的日志就可以找到对应的client IP了
awk '/group/{print $5, $4}' mongodb.log | sort -k 2| awk '{split(a[$1], b, " "); b[length(b)+1]=$2; a[$1]=""; for(i in b){a[$1]=sprintf("%s %s", a[$1], b[i])}};END{for(i in a){printf "%s %s\n", i, a[i]}}' > sta.txt
这个命令会列出同一连接(connection ID)对应的所有group的执行时间,通过这个结果上面的问题很容易就可以看到了,不过这个命令有一个小问题就是不会把时间顺序排列,需要再进一步处理一下,实在是想不出怎么用shell处理
MongoDB Beijing 2011已经结束好几天了,最近一直很忙,没时间来记录,今天使劲挤终于挤出了时间,下面简单说下整个过程吧。
会上用同事的iPhone 4拍了几张照片,照片不怎么清楚,主要光线的原因,
下午一点半到了会场,签到,拿纸和笔(让做笔记用)还有宣传小册,宣传小册上有一些mongodb的命令,挺专业的,门口图灵和华章两个出版社都摆了坛子,必须都是计算机类的图书了,凑到图灵的摊前看了看,发现了Pro HTML5 Programming这本书,正打算打印这本书的英文版呢,没想到这里居然遇到了,当然是中文版的,正要买,图灵说不卖,这是待会抽奖的赠品,赠品!?活了25年从来和赠品没什么关系,好吧,回去花钱到网上订。
进会场发现座位几乎已经坐满了,等了大概10分钟开始了,两个老外,一个是10gen(MongoDB背后的公司)亚洲区的产品xx, 另一个貌似也是产品xxx,英语没听清楚,
开场先是感谢CSDN..,靠,居然不感谢CCTV,不想在中国混了...

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

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

在讲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。
然后就是提问时间,问的问题一个没听清。。。

下面NO. 2老外上台(其实中间他还客串了一下帮NO. 1举话筒)
这个讲内容挺多的,都是一些比较高级的主题,比如

MongoDB北京开发者聚会这个月3号要在北京知春路举行了,MongoDB开发者Roger Bodamer也将到会,shitou所在的公司受邀也参加这次聚会,而且会做一个半个小时的PPT演讲,不过不是shitou露脸的,由我们一同事要来做,主要就是介绍我们在MongoDB方面的一些使用经验和遇到的问题,等这次聚会过后shitou会放出PPT的下载链接,有兴趣的同学可以3号去参加,貌似不收费的说,具体信息在这里,
链接: http://www.10gen.com/conferences/mongobeijing2011
在使用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.
推荐一片不错的PPT, 关于MongoDB设计的,对刚开始用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().
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}});
上面是统计在置顶时间段内唯一的用户名数
参考文档:
Mochichat的新版本上线了,Erlang代码核心全部重写了,这次前端使用了Rails, 数据库采用的MongoDB
架构:

目前可能还存在bug, 而且页面也比较简单,还需要改善
测试地址: 摸我
又一个NoSQL的文档型数据库, 之前有介绍过CouchDB, Cassandra, MongoDB最近也是异常的活跃,Slideshare上关于MongoDB的文档也是非常之多,
关于MongoDB的介绍这里就粘贴了,总之也是非常强大,MongoDB的官方网站中有相应的中文资料介绍,看这里
首先下载对应平台的版本,不用安装,直接解压就行了,这里要注意的是,
a) 要分清平台是32bit还是64bit版本的,32位版本的有单个数据库文件2G的限制
b) 在部分linux中(shitou测试了CentOS 4.4和Mac OS 10.6.2平台)启动MongoDB时会直接报出float错误的信息(CentOS 4.4), 这时需要使用对应的static版本
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 >
>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" }
进一步的使用和查询使用官方的文档已经非常完整了,这里不多废话了,以后再放上具体的使用文档
顺便说下在Mac上有一个图形管理工具MongoHub, 用起来还是比较方便的
