경제적인 시스템 구축 비용으로 거대한 데이타 묶음을 빠르게 조작 및 검색할 수 있는 데이타베이스, 비교적 손쉽고 유연하게 확장할 수 있는 크라우드 컴퓨팅 환경에 적합한 데이터베이스로 key-value 데이타베이스가 근래에 언급되고 있습니다. 때로는 이것을 문서지향 데이타베이스(document-oriented database) 라고도 소개되며 지금 실험할 몽고디비(MongoDB) 역시 이러한 형태의 데이타베이스라고 볼 수 있습니다.
몽고디비는 JSON 문서 객체를 BSON 바이너리 형태로 저장하기 때문에 저장 공간과 처리 시간이라는 측면에서 효율이 높은 편이며 JSON 문서 객체를 사용하고 있으므로 제약 없이 가변 구조를 가진 데이터 객체를 교환할 수 있으므로 개발 언어와 플랫폼에 독립적으로 운용될 수 있습니다. 몽고디비는 문서지향 데이터베이스가 가지는 장점을 실현할 수 있는 여러가지 시스템 중에 하나이며 비교적 처리 속도가 빠르고 확장하기 편하며 거대한 데이터 컬렉션을 안정적이면서 효과적으로 다루게 해줄것입니다. 그러나 이러한 장점이 있는 반면 일반적으로 널리 사용되고 있는 관계형 데이타베이스(RDBMS)의 장점을 포기해야 하므로 구현하고자 하는 시스템에 맞추어 적절하게 활용하면 되겠습니다.
아래 동영상은 몽고디비를 실험하는 과정을 캡쳐한 것입니다. 몽고디비를 설치하고 사용자를 추가하고 디비 접근 권한을 획득하며 데이터 컬렉션을 조작하고 검색하고 인덱싱하는 과정 등을 담았습니다. 이 과정을 따라해 보시면 어느 정도의 몽고디비 사용법을 익힐 수 있습니다.
문서지향 데이타베이스의 역사는 그리 길지 않다. 몽고디비 또한 현재 베타버전으로 배포되고 있으므로 사용하려면 선택하기 전에 충분한 테스트를 해야만 할 것입니다. 만약 맘에 차지 않는다면 Couchdb, mongoDB, Redis, TokyoCabinet 등과 같은 또 다른 데이타베이스들을 체크해 볼 수도 있겠습니다. 참고로 다음 포스팅에는 PHP로 몽고디비를 접근하고 제어하는 내용으로 써보려고 합니다.
웹프로그래머의 홈페이지 정보 블로그 http://hompy.info/586
몽고디비는 JSON 문서 객체를 BSON 바이너리 형태로 저장하기 때문에 저장 공간과 처리 시간이라는 측면에서 효율이 높은 편이며 JSON 문서 객체를 사용하고 있으므로 제약 없이 가변 구조를 가진 데이터 객체를 교환할 수 있으므로 개발 언어와 플랫폼에 독립적으로 운용될 수 있습니다. 몽고디비는 문서지향 데이터베이스가 가지는 장점을 실현할 수 있는 여러가지 시스템 중에 하나이며 비교적 처리 속도가 빠르고 확장하기 편하며 거대한 데이터 컬렉션을 안정적이면서 효과적으로 다루게 해줄것입니다. 그러나 이러한 장점이 있는 반면 일반적으로 널리 사용되고 있는 관계형 데이타베이스(RDBMS)의 장점을 포기해야 하므로 구현하고자 하는 시스템에 맞추어 적절하게 활용하면 되겠습니다.
아래 동영상은 몽고디비를 실험하는 과정을 캡쳐한 것입니다. 몽고디비를 설치하고 사용자를 추가하고 디비 접근 권한을 획득하며 데이터 컬렉션을 조작하고 검색하고 인덱싱하는 과정 등을 담았습니다. 이 과정을 따라해 보시면 어느 정도의 몽고디비 사용법을 익힐 수 있습니다.
문서지향 데이타베이스의 역사는 그리 길지 않다. 몽고디비 또한 현재 베타버전으로 배포되고 있으므로 사용하려면 선택하기 전에 충분한 테스트를 해야만 할 것입니다. 만약 맘에 차지 않는다면 Couchdb, mongoDB, Redis, TokyoCabinet 등과 같은 또 다른 데이타베이스들을 체크해 볼 수도 있겠습니다. 참고로 다음 포스팅에는 PHP로 몽고디비를 접근하고 제어하는 내용으로 써보려고 합니다.
cd /usr/local/
wget http://downloads.mongodb.org/linux/mongodb-linux-i686-latest.tgz
tar xvzf mongodb-linux-i686-latest.tgz
mv mongodb-linux-i686-2009-08-13 mongo
vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mongo/bin
source ~/.bash_profile
mkdir -p /data/db
mongod run 1>/dev/null &
mongo
use admin
db.addUser("dba", "dba_password")
db.system.users.find()
use desk
show dbs
show collections
db.addUser("tiger", "ti_password")
show dbs
show collections
db.addUser("lion", "li_password")
db.system.users.find()
use admin
db.shutdownServer()
exit
mongod --auth 1>/dev/null &
mongo
use admin
db.auth("dba", "dba_password")
db.system.users.find()
use desk
db.system.users.remove( { user: "lion" } )
db.system.users.find()
exit
mongo desk
db.auth("tiger", "ti_password")
show collections
db.addUser("puma", "pu_password")
db.addUser("fox", "fo_password")
db.system.users.find()
db.system.users.find( { user: "puma" } )
show users
db.getCollectionNames()
db.person.data.save( { name : "tiger", age : 21 } )
show collections
db.person.data.save( { name : "lion", age : 25, sex : "f" } )
db.person.data.save( { name : "eagle", age : 23 } )
db.person.data.save( { name : "puma", age : 22, sex : "m" } )
db.person.data.save( { name : "fox", age : 23 } )
db.person.data.find()
db.person.data.find().sort( { age : -1 } ).limit(3)
db.person.data.find( { name : "puma" } )
db.person.data.find( { age : { $gt : 22 } } )
db.person.data.find( { age : { $ne : 23 } } )
db.person.data.find( { age : { $in : [21,25] } } )
db.person.data.group( { key: { age:true }, cond: { }, reduce: function(obj,prev) { prev.total++; }, initial: { total: 0 } });
db.system.indexes.find()
db.person.data.ensureIndex( { "age" : 1 } )
db.system.indexes.find()
db.person.data.find().sort( { age : -1 } ).explain()
db.person.data.dropIndex( { "age" : 1 } );
db.system.indexes.find()
db.person.data.ensureIndex( { "age" : 1 } )
db.person.data.ensureIndex( { "age" : 1, "name" : -1 } )
db.system.indexes.find()
db.person.data.dropIndexes();
db.system.indexes.find()
db.person.data.drop()
show collections
db.dropDatabase()
show collections
use admin
db.auth("dba", "dba_password")
show dbs
db.shutdownServer()
exit
wget http://downloads.mongodb.org/linux/mongodb-linux-i686-latest.tgz
tar xvzf mongodb-linux-i686-latest.tgz
mv mongodb-linux-i686-2009-08-13 mongo
vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mongo/bin
source ~/.bash_profile
mkdir -p /data/db
mongod run 1>/dev/null &
mongo
use admin
db.addUser("dba", "dba_password")
db.system.users.find()
use desk
show dbs
show collections
db.addUser("tiger", "ti_password")
show dbs
show collections
db.addUser("lion", "li_password")
db.system.users.find()
use admin
db.shutdownServer()
exit
mongod --auth 1>/dev/null &
mongo
use admin
db.auth("dba", "dba_password")
db.system.users.find()
use desk
db.system.users.remove( { user: "lion" } )
db.system.users.find()
exit
mongo desk
db.auth("tiger", "ti_password")
show collections
db.addUser("puma", "pu_password")
db.addUser("fox", "fo_password")
db.system.users.find()
db.system.users.find( { user: "puma" } )
show users
db.getCollectionNames()
db.person.data.save( { name : "tiger", age : 21 } )
show collections
db.person.data.save( { name : "lion", age : 25, sex : "f" } )
db.person.data.save( { name : "eagle", age : 23 } )
db.person.data.save( { name : "puma", age : 22, sex : "m" } )
db.person.data.save( { name : "fox", age : 23 } )
db.person.data.find()
db.person.data.find().sort( { age : -1 } ).limit(3)
db.person.data.find( { name : "puma" } )
db.person.data.find( { age : { $gt : 22 } } )
db.person.data.find( { age : { $ne : 23 } } )
db.person.data.find( { age : { $in : [21,25] } } )
db.person.data.group( { key: { age:true }, cond: { }, reduce: function(obj,prev) { prev.total++; }, initial: { total: 0 } });
db.system.indexes.find()
db.person.data.ensureIndex( { "age" : 1 } )
db.system.indexes.find()
db.person.data.find().sort( { age : -1 } ).explain()
db.person.data.dropIndex( { "age" : 1 } );
db.system.indexes.find()
db.person.data.ensureIndex( { "age" : 1 } )
db.person.data.ensureIndex( { "age" : 1, "name" : -1 } )
db.system.indexes.find()
db.person.data.dropIndexes();
db.system.indexes.find()
db.person.data.drop()
show collections
db.dropDatabase()
show collections
use admin
db.auth("dba", "dba_password")
show dbs
db.shutdownServer()
exit
웹프로그래머의 홈페이지 정보 블로그 http://hompy.info/586



