반응형

MongoDB 12

MongoDB 개발 팁

몽고DB의 _id 값을 문자열로, 문자열을 몽고DB의 _id 값으로 변환법몽고DB에서 반환된 _id 값을 가지고 php에서 작업하기 위해서는 문자열로 변환이 필요하다.또한 php에서 문자열로 된 _id 값을 가지고, 다시 몽고DB에서 작업하려면 MongoId() 클래스로 만들어줘야함.$obj = array("parent"=>$parent, "name"=>$name); $collection->insert($obj); $my_id = $obj['_id'].""; $obj = array("parent"=>MongoId($my_id));쿼리 후 업데이트를 atomic 하게 처리하기http://www.mongodb.org/display/DOCS/findAndModify+Commandnew 키를 이용하여, 변경전 ..

MongoDB 2012.04.02

data export, import

-q 쿼리 넣어서 export, 이때 가져올 데이터는 -f 로 골라서 가져올수있다. -d : db 이름, -c : 컬렉션 이름. /home/imongo/mongo/mongodb-linux-x86_64-2.0.1/bin/mongoexport -d company -c company_info -h localhost:27032 -q '{"category":{$all:["hi"]}}' -f name,addr_s,addr,category,loc,phone,homepage -o hos.json import 방법. 파일이름은 -file 옵션. /home/imongo/mongo/mongodb-linux-x86_64-2.0.2/bin/mongoimport -h 14.63.221.91:1223 -d company_manag..

MongoDB 2012.03.12

NoSQL 과 RDB

MySql 사용시 부하 분산을 고려한 시스템 구축이 필요. replication 과 cluster replication 으로 구축시 master / slaves 로 구성 (single point of failure 해결) master는 DML처리만 수행 slaves는 여러대를 놓을 수 있고, read 만 수행함. 사용자 증대 등으로 인해 부하가 증가할 경우 slaves를 증설함. 이경우는 부하 분산을 위해 slaves 를 로드밸런싱 해줘야 하므로 로드밸런서를 따로 하나 구축하여야 함. cluster 로 구축시 Management Node, Data Node, SQL node 3개로 구성. SQL node, Data node는 여러개를 놓고 구성할 수 있다. 권장 구성은 Management-Node 2대,..

MongoDB 2012.03.08

MongoDB 우분투 설치시 서버 다운되는 문제

문제 : 몽고디비를 VM에 띄운 우분투에 설치하여 돌리는 중에 자주 서버가 다운되는 현상이 발생함. 해결 : 몽고디비 페이지를 보니 환경에 대한 설명이 나와있음. http://www.mongodb.org/display/DOCS/Production+Notes 즉, 몽고디비의 데이터가 쌓이는 파일시스템은, mount 옵션에 noatime을 걸어줘야 함. 나의 경우, /etc/fstab 을 열고, .... /dev/sdb1 /data/mongo/company ext4 defaults,noatime,nodiratime 0 0 .... 위와 같이 4번째 options 항목에 noatime 을 추가시키고 reboot 하여, 몽고디비를 다시 실행시켰음 결과 지금까지 죽지 않고 잘 돌아갑니다.

MongoDB 2011.11.10

MongoDB PHP 위치기반 검색하기

아래 코드 예제는 몽고디비에 loc 를 2D로 인덱스가 잡혀 있어야 한다. 또한 몽고DB의 다큐먼트에 loc 키값은 다음과 같은 배열로 되어있다고 가정. [lon, lat] 순서의 배열임. 그러면, nearSphere 를 통한 위치 검색이 가능하다. 결과 데이터는 JSON으로 인코딩하여 주는것으로 예제를 작성했음. (받는쪽에서는 디코딩하여 사용.) 입력은 위도, 경도, 거리(어느 거리까지 찾을 것인지) 를 셋팅해 주면 되고, $row_cnt와 $offset 으로 페이징 됨. 위도, 경도로 거리에 대한 미터(m), 킬로미터(km)를 가져오는 함수는 get_distance 함수를 사용하여 가져온다.

MongoDB 2011.11.10

MongoDB Remove Documents

다큐먼트를 삭제한다. 1. db.things.remove({}); // removes all 2. db.things.remove({n:1}); // removes all where n == 1 위의 2번에서 remove 명령은 매칭된 모든 다큐먼트를 삭제한다. 따라서 하나의 다큐먼트를 삭제할 경우는 옵션을 넣어준다. db.things.remove({n:1}, {justOne : true}); atomic 연산을 위해서는 다음과 같은 옵션을 준다. db.videos.remove( { rating : { $lt : 3.0 }, $atomic : true } ) ** php 드라이버를 사용하여 삭제시 주의점. php 드라이버 에서는 삭제시 하나만 삭제되는것이 디폴트로 되어있다. $collection->remo..

MongoDB 2011.10.13

MongoDB Update Documents

이번에는 저장되어 있는 데이터를 업데이트하는 방법이다. 업데이트는 update 함수를 이용한다. update() 함수 몽고디비의 update()함수를 이용한다. 여기에 4개의 아규먼트가 들어간다. criteria, objNew, upsert, multi criteria 업데이트 하고싶은 레코드를 쿼리하는데 사용된다. objNew 업데이트할 데이터를 위해 사용 upsert 업데이트 하고픈 해당 레코드가 있으면, 그레코드값을 업데이트하고, 없으면 새로 만들어서 업데이트한다. multi 업데이트하기 위해 매칭된 모든 다큐먼트를 업데이트 하거나, 아니면 하나의 다큐먼트만 업데이트 한다. 디폴트는 하나의 다큐먼트만 업데이트 함. $ 오퍼레이터로 동작함. 쉘에서의 예 db.media.update( { "Title"..

MongoDB 2011.10.13

MongoDB 리눅스 PHP 드라이버 설치

몽고디비를 PHP에서 접속하여 사용하려면, PHP 드라이버가 필요하다. 웹서버로 사용하는 서버에 접속하여 PHP드라이버를 설치한다. - 리눅스에 PHP드라이버 설치 $sudo pecl install mongo 실행 후, php.ini 파일에 다음을 추가시킨다. extension=mongo.so 그리고 아파치 리스타트 시킴. service apache2 restart (센트OS도 아파치 리스타트 명령만 다를뿐, 똑같다) 위와 같이 설치하면, PHP 에서 몽고디비 작업을 할 수 있다. PHP로 몽고디비 접속, 쿼리 등의 설명은 다음을 참고하면 됨. http://us.php.net/manual/en/book.mongo.php

MongoDB 2011.10.13

MongoDB Replica-Set

- Replica-Set 리플리카셋 설정이란, 마스터와 슬레이브들로 구성하는 것을 말한다. 여기서 아비터란 서버를 추가함으로써, 마스터와 슬레이브의 heartbeat를 체크하고, 마스터가 장애가 났을시 슬레이브들 중 하나를 마스터로 만든다. 따라서 마스터, 슬레이브들, 아비터 서버로 구성하는게 HA구성에 있어서 가장 실용적이라 생각한다. 마스터 : read, write를 수행함. 슬레이브들 : 마스터의 데이터를 복제하여 가지고 있음. 아비터 : 마스터와 슬레이브를 체크하고, 장애시 마스터 선출. 리플리카셋의 장점은 장애상황에 유연하게 대처할 수 있다는 것 뿐만 아니라, read 의 load 를 분산시킬수 있다는 것 또한 장점이다. 즉, 디폴트는 마스터 만이 read, write를 수행하고, 슬레이브들은 ..

MongoDB 2011.10.13

몽고DB 란?

몽고DB는 기존의 관계형 데이터베이스가 아니다. 관계형 DB의 테이블, 스키마, SQL, row 라는 컨셉이 없다. 또한 트랜잭션이나 ACID, join, foreign key등도 가지고 있지 않다. 그렇다면 몽고DB의 특징은 무엇인가. Document-oriented DB 다. 즉 기존 관계형 DB의 row 처럼 컬럼이 명확히 명시되어 있는 것이 아니라, 하나의 document 안에 들어가는 내용을 아주 유연하게(key,value) 담을 수 있고 계층구조를 가질 수 있다. 예를 들면, 블로그라는 컬렉션에(나중에 자세히 설명함) 블로그1 이라는 document를 생성했고, 이 document에 저자 : A, 내용 : B, 태크 : [음식점, 중국요리, 맛집] 이렇게 키와 밸류 값을 사용하며, 태그 항목은..

MongoDB 2011.10.13
반응형