shitou's blog 
Home About Feed | 十人族 MIX BOY 塌客
25
May

MongoDB入门 by shitou

1

又一个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, 260 reviews

send to mailbox

Your email:

21
May

find使用非业余研究 by shitou

0

find平时用于查找文件是不可缺少的,find的用法也比较复杂,平时我们用的最多的就是:

find ./ -name "*filename*"

了, 其他一些复杂的用法平时都不怎么用到,这里列下shitou经常用的参数吧:


#找出当前目录下所有以production开头.log结尾的文件

find ./ -name "production*.log" 

#如果当前目录下还有其他子文件夹,但你不想递归查找子文件夹下的目录时使用

find ./ -maxdepth 1 -name "production*.log" 

#如果碰巧当前目录下有个匹配到"production*.log"的文件夹,而你只想要regular(一般)文件时

find ./ -maxdepth 1 -name "production*.log" -type f

#找出当前目录下包含有shitou字符的文件

find ./ -maxdepth 1 -type f | xargs fgrep 'shitou'



#好的,我们继续

#如果你想找最近7天创建的文件时

find ./ -maxdepth 1 -name "production*.log" -type -ctime -7

#如果你想找7天前创建的文件时

find ./ -maxdepth 1 -name "production*.log" -type -ctime +7



#下面来个正真非业余研究的

#如果你想找一个时间段内创建的文件时怎么办呢,find只支持-cnewer参数,即找到比某个文件创建时间更新的文件,

#不过利用这个就够了

#首先我们创建两个文件,并且指定创建时间就为我们要寻找时间段的起至, 用于我们作为基准比较使用

touch tmp -t 201005130000

touch tmp1 -t 201005200000

#上面给定时间戳时要按照“年年年年月月日日时时分分”方式指定,好了现在就可以了

find ./ -maxdepth 1 -name "production-*log" -type f -cnewer tmp -and ! -cnewer tmp1

上面的-ctime为create time的意思,还有-atime(access time),-mtime(modify time)

-type参数还可以有d(目录),f(一版文件),等等

另外还有-group查找指定用户组的,-perm查找指定权限的(0644这样的),-size指定大小,-regex使用正则表达式


find后还可以跟管道(|),用xargs命令把查找到的文件用作后续命令的参数传递进来,看上面的例子



如来神掌打完收工


参考资料

Finding Files


Tags: command

2010-05-21 11:36:29, 304 reviews

send to mailbox

Your email:

20
May

MochiChat: 一个基于erlang的web聊天室(beta) by shitou

2

MochiChat, 最近用Erlang写的一个基于Mochiweb的web聊天室,暂定名为MochiChat吧,特点有:

 

  • 采用Erlang,高并发,基于Mochiweb开发
  • 支持创建聊天室群聊

 

目前功能比较简单,核心功能就是聊天,不过以后扩展起来是比较简单的,测试地址是http://mochichat.ccok.me/
感兴趣的同学可以试下

 

开个专门的页面以后MochiChat相关的开发信息就在这里了

 

Tags: MochiChat,TCP

2010-05-20 16:44:16, 339 reviews

send to mailbox

Your email:

04
May

/dev/shm和swap的区别 by shitou

1

/dev/shm

首先可以看出来/dev/shm是一个设备文件, 可以把/dev/shm看作是系统内存的入口, 可以把它看做是一块物理存储设备,一个tmp filesystem, 你可以通过这个设备向内存中读写文件, 以加快某些I/O高的操作,比如对一个大型文件频繁的open, write, read,据说oracle就利用了/dev/shm(shitou没用过oracle), 可以通过mount命令列出当前的/dev/shm的挂载的文件系统, 

 

你可以直接对/dev/shm进行读写操作, 例如:

#touch /dev/shm/file1

既然是基于内存的文件系统,系统重启后/dev/shm下的文件就不存在了

 

Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%, 虽说使用/dev/shm对文件操作的效率会高很多, 但是目前各发行软件中却很少有使用它的(除了前面提到的Oracle), 可以通过ls /dev/shm查看下面是否有文件, 如果没有就说明当前系统并没有使用该设备.

 

swap

而swap是Linux的虚拟内存, 即在硬盘上开辟空间当内存不够时充当内存使用, 因此可以理解为当/dev/shm空间不够时可以占用swap的空间

 

参考文档:

 

What is /dev/shm and its practical usage

 

when should I use it or not use it?

 

 

 

Tags:

2010-05-04 15:20:58, 436 reviews

send to mailbox

Your email:

24
Apr

gen_tcp的packet参数 by shitou

1

Erlang的gen_tcp模块packet可以指定多种参数,实现不同的数据解析方式,这里说一下line和http两种不同方式下解析的方式

代码:
-module(my_chat_server).
-export([start/1, start/0]).

start() -> start(8081).
start(Port) -> spawn_link(fun() -> start_listen(Port) end).
	
start_listen(Port) ->
       %here
	DefaultOptions = [{packet, line}, {active, false}, {reuseaddr, true}],
	case gen_tcp:listen(Port, DefaultOptions) of
		{ok, ListenSocket} ->
			par_connect(ListenSocket);
		{error, Reason} -> {error, Reason}
	end.
	
par_connect(LS) ->
	case gen_tcp:accept(LS) of
		{ok, Socket} ->
			spawn(fun() -> par_connect(LS) end),
			io:format("accept socket connection, socket=~w~n", [Socket]),
			loop(Socket);
		{error, Reason} -> {eorror, Reason}
	end.
	
loop(Socket) ->
	case gen_tcp:recv(Socket, 0) of
		{ok, Bin} ->
			%do with socket...
			io:format("deal socket data, socket=~w, data=~p~n", [Socket, Bin]),
			loop(Socket);
		{error, closed} ->
			io:format("socket closed, socket=~w~n", [Socket])
	end.

line:

erl中启动server:
>my_chat_server:start().
在浏览器中测试打开localhost:8081,这时可以看到erl console中可以看到输出:
2> my_chat_server:start().
<0.40.0>
accept socket connection, socket=#Port<0.1887>
deal socket data, socket=#Port<0.1887>, data="GET / HTTP/1.1\r\n"
deal socket data, socket=#Port<0.1887>, data="Host: localhost:8081\r\n"
deal socket data, socket=#Port<0.1887>, data="Connection: keep-alive\r\n"
deal socket data, socket=#Port<0.1887>, data="User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2\r\n"
deal socket data, socket=#Port<0.1887>, data="Cache-Control: max-age=0\r\n"
deal socket data, socket=#Port<0.1887>, data="Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
deal socket data, socket=#Port<0.1887>, data="Accept-Encoding: gzip,deflate,sdch\r\n"
deal socket data, socket=#Port<0.1887>, data="Accept-Language: en-US,en;q=0.8\r\n"
deal socket data, socket=#Port<0.1887>, data="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"
deal socket data, socket=#Port<0.1887>, data="Cookie: AJSTAT_ok_times=1; _csuid=X4b5025bb3a94d53c; view_history=47451%2Cd7dad2a908d74be19d89cbfdb355d7bc%2C62cc19edb111424a98f22dd904ccd281%2Cd5cedcf1263542c790c46a158b77e5e8%2C9de94a4094184dff97a53afe3b2cfc94%2Cdb6c1cea4986466e98b290b26d62518b\r\n"
deal socket data, socket=#Port<0.1887>, data="\r\n"
也可以在shell中用telnet来测试:
#telnet localhost 8081

http:

修改代码中line为http,重新编译启动server,在浏览器中刷新可以看到:
1> my_chat_server:start().
<0.34.0>
accept socket connection, socket=#Port<0.440>
deal socket data, socket=#Port<0.440>, data={http_request,'GET',
                                             {abs_path,"/"},
                                             {1,1}}
deal socket data, socket=#Port<0.440>, data={http_header,14,'Host',undefined,
                                             "localhost:8081"}
deal socket data, socket=#Port<0.440>, data={http_header,2,'Connection',
                                             undefined,"keep-alive"}
deal socket data, socket=#Port<0.440>, data={http_header,24,'User-Agent',
                                             undefined,
                                             "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2"}
deal socket data, socket=#Port<0.440>, data={http_header,1,'Cache-Control',
                                             undefined,"max-age=0"}
deal socket data, socket=#Port<0.440>, data={http_header,8,'Accept',
                                             undefined,
                                             "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"}
deal socket data, socket=#Port<0.440>, data={http_header,10,
                                             'Accept-Encoding',undefined,
                                             "gzip,deflate,sdch"}
deal socket data, socket=#Port<0.440>, data={http_header,11,
                                             'Accept-Language',undefined,
                                             "en-US,en;q=0.8"}
deal socket data, socket=#Port<0.440>, data={http_header,9,'Accept-Charset',
                                             undefined,
                                             "ISO-8859-1,utf-8;q=0.7,*;q=0.3"}
deal socket data, socket=#Port<0.440>, data={http_header,50,'Cookie',
                                             undefined,
                                             "AJSTAT_ok_times=1; _csuid=X4b5025bb3a94d53c; view_history=47451%2Cd7dad2a908d74be19d89cbfdb355d7bc%2C62cc19edb111424a98f22dd904ccd281%2Cd5cedcf1263542c790c46a158b77e5e8%2C9de94a4094184dff97a53afe3b2cfc94%2Cdb6c1cea4986466e98b290b26d62518b"}
deal socket data, socket=#Port<0.440>, data=http_eoh
gen_tcp已经把数据以HTTP的方式解析,对于开发基于HTTP的应用来说非常方便,不过其实如果要开发HTTP应用的话使用mochiweb可能是更方便的实现方式

Tags: TCP

2010-04-24 17:31:59, 288 reviews

send to mailbox

Your email:

16
Apr

Beauty - Mai Kuraki by shitou

0

直~接~上~图~~

~~~~~~~~~~~~~~~~~~~~~~~我是分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~我是分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.ccok.me/photo/image/60/medium/mai_bea_1.png

 

http://www.ccok.me/photo/image/61/medium/mai_bea_2.png

 

http://www.ccok.me/photo/image/62/medium/mai_bea_3.png

 

还有一张很不错的,被打了水印,就不放出来了

 

Tags: Mai Kuraki

2010-04-16 10:17:26, 201 reviews

send to mailbox

Your email:

上一页 1 2 3 ... 30 31 下一页

Tags

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

  • iPhone[17]
  • Erlang[8]
  • google[9]
  • 生活[41]
  • 音乐[11]
  • 电影[11]
  • linux[24]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[8]
  • ruby[18]
  • ruby on rails[27]
  • 开源[3]

Episode

  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache

Recent Comments

  • cancer planeta famosas, minal http://zewero.cen...
  • moskowitz mofos, bedroom http://biiili.centerbl...
  • exploit 3pic, julien http://zewero.centerblog.n...
  • Thanks funny site jp imageboard bbs pthc cp :...
  • essence vidz, escalation http://liili.centerblo...
  • arab black singles, sleepwalking http://biiili....
  • Hello good day freeforum.tw pthc 557 valya pt...
  • upenn hand job, sanglah http://liili.centerblog...
  • Thanks funny site ukrainian nymphet rfd nymph...
  • Jonny was here nymphets land ckw topless nymp...

Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • MySQL Innodb备份
  • Lighttpd配置参数
  • iPhone上的HelloWorld终于跑起来了
  • Etag和Expire

Recommended Posts

  • 再次被和谐-_-
  • 十人族: 上线了
  • MooseFS vs. NFS
  • Mochichat新版本上线
  • Gearman
  • MongoDB入门
  • find使用非业余研究
  • MochiChat: 一个基于erlang的web聊天室(beta)
  • /dev/shm和swap的区别
  • gen_tcp的packet参数
  • Beauty - Mai Kuraki
  • awk多维数组
  • We Lost Google.cn
  • Erlang TCP Server例子
  • Mai Kuraki -永远より ながく

Friends' blogs

  • levy
  • sphance
  • andreas

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 87197
  • 今天访问: 15
  • 日志: 187
  • 评论: 167
  • 音乐: 9
  • 用户: 485


 

just DO NOT support IE

close