Search Results for 'MongoDB'

6 POSTS

  1. 2011.10.03 MongoDB 컴포넌트 목록
  2. 2011.07.12 [번역]MongoDB 샤딩(Sharding)이란? 1
  3. 2011.07.10 ubuntu 에 mongodb설치해보자.

MongoDB 컴포넌트 목록

Posted 2011. 10. 3. 01:14
- mongod : database core
- mongos : Sharding controller
- mongoimport : import tool
- mongoexport : export tool
- mongodump : dump tool
- mongorestore : dump data 복구
- bsondump :

- mongofiles : GridFS utility
- mongostat : mongo db status chcek

참고 : http://www.mongodb.org/display/DOCS/Import+Export+Tools

'DBMS > NoSQL' 카테고리의 다른 글

Jedis를 이용한 Redis 따라가기  (0) 2012.02.28
MongoDB Naming Rule  (0) 2011.11.30
MongoDB GUI Tool for Mac osx : MongoHub  (0) 2011.11.23
[번역]MongoDB 샤딩(Sharding)이란?  (1) 2011.07.12
ubuntu 에 mongodb설치해보자.  (0) 2011.07.10


[번역]MongoDB 샤딩(Sharding)이란?

Posted 2011. 7. 12. 02:05
내용을 이해하기 위해 번역을 시도해본다. by UncleJoe

원문 : www.mongodb.org

MongoDB는 여러노드에 걸쳐 수평적 확장을 가능하게 하는 자동화된 샤딩(또는 파티셔닝)을 지원한다. 단일 데이터베이스 서버 자원을 과도하게 사용하는 애플리케이션의 경우, 기존의 프로그램 변경이 거의 없이도 MongoDB는 샤딩 클러스터로 변환이 가능하며, 자동으로 복구, 노드밸런싱까지 자동으로 관리한다.

MongoDB's Auto-Sharding

Sharding in a Nutshell

샤딩이란 순차적 데이터보존방식을 통해 여러대 서버가 갖고 있는 데이터의 일 부분을 말합니다. 예를 들자면, 거주자들의 주에 의해 사용자 집단을 샤딩하는 것을 생각해 보십시오.

Machine 1 Machine 2 Machine 3
Alabama → Arizona Colorado → Florida Arkansas → California
Indiana → Kansas Idaho → Illinois Georgia → Hawaii
Maryland → Michigan Kentucky → Maine Minnesota → Missouri
Montana → Montana Nebraska → New Jersey Ohio → Pennsylvania
New Mexico → North Dakota Rhode Island → South Dakota Tennessee → Utah
  Vermont → West Virgina Wisconsin → Wyoming

각각의 서버들은 거주지의 주(州)에 따라 여러개의 데이터 영역을 저장합니다. MongoDB는 이들 데이터 영역을 모든 서버에 걸쳐 균등하게 나누게 됩니다.
데이터영역을 나누는 이러한 매커니즘은 우리가 저장하려는 데이터의 임계점에 다다랐을때 그 안에서 샤딩의 장점을 극대화 할수 있도록 작동됩니다.
우리가 만든 응용프로그램은  mongos프로세스를 통해 샤딩클러스터시스템에 연결되며, 각각 적절한 shards에게 작동됩니다. 이런식으로 샤딩된 MongoDB클러스터는 응용프로그램입장에서보면 마치 논리적인 단일 서버로 보여집니다. 만약 우리의 USERS라는 컬렉션(RDBMS의 Table개념)에 엄청난 양의 데이터가 입력되도록 요청받았다면, 각각의 데이터들은 3개의 서버에 분산되어  입력될것입니다.  마찬가지로 많이 분산되어 있기 대문에 많은 쿼리요청들이 들어오더라도 효과적으로 작동하게 됩니다. 그리고 문서들은 순차적 데이터 보존방식에 의해 구성되었기 때문에, 거주자의 주를 지정하는 어떠한 작업들도 해당 주를 포함하는 해당 노드로 라우팅됩니다.
샤딩은 매우 컬렉션(테이블) 단위로 수행됩니다. 작은 컬렉션들은 샤딩될 필요가 없습니다. 예를 들어 우리가 트위터와 같은 서비스를 구축한다고 했을때, 트윗츠 컬렉션들은 다음의 가장 큰 컬렉션에 비해 몇배의 명령을 수행할 것입니다. 이러한 tweets 컬렉션과 같이 처리하는 명령어의 수 사이즈가 샤딩을 결정하는 최 우선순위가 됩니다. 보다 작은 컬렉션들은 단일서버에만 존재하게 됩니다. 샤딩되지 않은 컬렉션들은 하나의 샤드로 존재하게 됩니다.

Balancing
밸런싱은 어느 특정 shard node가 나머지 노드에 비해 비정상적으로 부하가 증가할 때 필요합니다. 이러한 상황에서 데이터는 여러 샤드들에게 부하게 맞게 다시 재 분배되어야 합니다.

Failover(장애조치/복구)
논리적인 shard가 항상 온라인상에 있어야만 하는 시스템의 요구사항 때문에 Failover는 매우 중요합니다. 실제로 이것은 각 shard들이 Replica set으로 구성되어진 하나이상의 서버에 포함되어 있음을 의미합니다. A replica set is a set of n servers, typically two or three, each of which contains a replica of the entire data set for the given shard.
n개 서버들주 하나는 항상 primary가 되어야 합니다. 만약 primary가 다운되면 남은 replica들중 하나가 새로운 마스터로 선출됩니다.

Scaling Model
MongoDB의 오토샤딩 스케일링 모델은 야후의  PNUTS와 구글의 BigTable과 많은 부분 유사한점을 공유합니다. 독자들중 이미 배포된 데이터 베이스들중 순차적 보존방식을 사용하는 데이터베이스 에 대한 상세한 토론에 관심있다면 PNUTS와 BigTable 백서를 보는것이 크게 도움이 될것입니다.

설계 개요
MongoDB 샤드클러스터는 두개 또는 그 이상의 샤드들, 하나이상의 config server, 그리고 애플리케이션서버와 연결하는 여러개의 라우팅이 필요한 mongos프로세스로 구성됩니다.






Shards
계속...











'DBMS > NoSQL' 카테고리의 다른 글

Jedis를 이용한 Redis 따라가기  (0) 2012.02.28
MongoDB Naming Rule  (0) 2011.11.30
MongoDB GUI Tool for Mac osx : MongoHub  (0) 2011.11.23
MongoDB 컴포넌트 목록  (0) 2011.10.03
ubuntu 에 mongodb설치해보자.  (0) 2011.07.10


ubuntu 에 mongodb설치해보자.

Posted 2011. 7. 10. 23:40
어찌어찌하다가 ubuntu10.10 LTS를 설치하게 되었으니 mongodb를 설치해보자.

관련참고자료 : www.mongodb.org
Downloads에서 리눅스버전 다운.
패키지를 풀고 해당 폴더/bin에가서 mongo명령어를 치니 관련모듈을 설치하라고 나옴.

sudo apt-get install mongodb

그리고 bin밑에 있는 mongo를 실행했는데, 뭐를 해야할지 막막 ㅎㅎㅎ

그래서 Document를 찾았다.

아래는 기존 RDBMS의 대표격인 MySql, Oracle과 MongoDB와의 실행명령어 및 용어를 비교한것이다.
MySQL executable  Oracle executable  Mongo executable
 mysqld oracle  mongod 
 mysql  sqlplus  mongo

 MySQL 용어  Mongo 용어 
database database 
 table collection 
 index  index
 row  BSON document
 column  BSON field
 join  embedding and linking

SQL문장과 Mongo에서 사용하는 명령어를 비교한 것이다.

 SQL 문장 Mongo 쿼리 문장 
CREATE TALE USERS (a int, b int) db.createCollection("mycoll") 
 INSERT INTO USERS VALUES (3,5) db.users.insert({a:3, b:5}) 
 SELECT a, b FROM USERS db.users.find({}, {a:1, b:1}) 
 SELECT * FROM users  db.users.find()
 SELECT * FROM users WHERE age=33  db.users.find({age:33})
 SELECT a,b FROM users WHERE age=33  db.users.find({age:33}, {a:1,b:1})
 SELECT * FROM users WHERE age=33 ORDER BY name  db.users.find({age:33}).sort({name:1})
 SELECT * FROM users WHERE age>33  db.users.find({'age':{$gt:33}})
 SELECT * FROM users WHERE age<33  db.users.find({'age':{$lt:33}})
 SELECT * FROM users WHERE name LIKE "%Joe%"  db.users.find({name:/Joe/})
 SELECT * FROM users WHERE name LIKE "Joe%"  db.users.find({name:/^Joe/})
 SELECT * FROM users WHERE age>33 AND age<=40  db.users.find({'age':{$gt:33,$lte:40}})
 SELECT * FROM users ORDER BY name DESC  db.users.find().sort({name:-1})
 SELECT * FROM users WHERE a=1 and b='q'  db.users.find({a:1,b:'q'})
 SELECT * FROM users LIMIT 10 SKIP 20  SELECT * FROM users LIMIT 10 SKIP 20
 SELECT * FROM users WHERE a=1 or b=2  db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
 SELECT * FROM users LIMIT 1  db.users.findOne()
 SELECT DISTINCT last_name FROM users  db.users.distinct('last_name')
 SELECT COUNT(*y) FROM users  db.users.count()
 SELECT COUNT(*y) FROM users where AGE > 30  db.users.find({age: {'$gt': 30}}).count()
 SELECT COUNT(AGE) from users  db.users.find({age: {'$exists': true}}).count()
 CREATE INDEX myindexname ON users(name)  db.users.ensureIndex({name:1})
 CREATE INDEX myindexname ON users(name,ts DESC)  db.users.ensureIndex({name:1,ts:-1})
 EXPLAIN SELECT * FROM users WHERE z=3  db.users.find({z:3}).explain()
 UPDATE users SET a=1 WHERE b='q'  db.users.update({b:'q'}, {$set:{a:1}}, false, true)
 UPDATE users SET a=a+2 WHERE b='q'  db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
 DELETE FROM users WHERE z="abc"  db.users.remove({z:'abc'});


http://www.mongodb.org/display/DOCS/Java+Language+Center

http://www.springsource.org/spring-data/mongodb

http://java.dzone.com/articles/using-mongodb-sculptor

'DBMS > NoSQL' 카테고리의 다른 글

Jedis를 이용한 Redis 따라가기  (0) 2012.02.28
MongoDB Naming Rule  (0) 2011.11.30
MongoDB GUI Tool for Mac osx : MongoHub  (0) 2011.11.23
MongoDB 컴포넌트 목록  (0) 2011.10.03
[번역]MongoDB 샤딩(Sharding)이란?  (1) 2011.07.12