NoSQL 도입 시 고려해야 할 사항들
NoSQL 도입이 필요하여 관련 자료들을 좀 찾아보게 됐다.
다양한 NoSQL DB들이 있는데, 들은 풍월에 따르면 특성들이 모두 다르기 때문에 다루어야 하는 데이터와 오퍼레이션들을 확인하고 이를 잘 지원하는 DB를 선정하는 것이 중요하다고 하고, 데이터 뿐만 아니고 하드웨어 적인 특성(메모리가 많이 필요하다던지)도 고려를 해야 적절한 DB를 선정할 수 있다고 한다.
프로젝트에 맞는 NoSQL DB를 선정하는 것이 중요하여 이를 찾기 위한 관점에서 자료를 찾아보게 됐다.
0. 필요한가
기본적으로 NoSQL이 뭔지, 왜 필요한지에 대해서 MongoDB를 만드는 10gen 사이트에 잘 정리가 되어 있다.
1. 데이터베이스모델 별 분류
데이터베이스 모델 별로 분류가 가능하다고 한다.
예를 들어 잘 알려진 NoSQL DB의 경우 아래와 같은데, 모델 별로 보다 자세한 설명은 다음 링크를 참조:
- http://en.wikipedia.org/wiki/Database_model
- http://en.wikipedia.org/wiki/Column-oriented_DBMS
* Wide Column Store
- Hadoop/HBase나 Cassandra
* Document Store
- MongoDB
2. 관련 웹사이트
* 평판(Popularity) 기준 랭킹 : http://db-engines.com/en/ranking
* 모델 별 분류: http://nosql-database.org/
3. NoSQL 선정 시 고려해야 하는 사항
* Data Modeling을 이해하고, 어떤 Operation을 제공하는지 이해해야 함
* 확장성(Scalability)이 뛰어나지만, 이를 지원하기 위한 부하(여러 노드에 데이터를 분산 저장하고, 결과를 취합하기 위한)가 있음
* 실시간 보다는 배치(Batch) 형태의 도메인에 적합
4. MongoDB
* Schema Design
- http://www.10gen.com/presentations/mongodb-melbourne-2012/schema-design-example
- http://www.10gen.com/presentations/schema-design-7
- http://www.10gen.com/presentations/schema-design-6
* Capacity Planning
- http://www.10gen.com/presentations/capacity-planning
* Sharding
- http://www.10gen.com/presentations/sharding-1
* Replication
- http://www.10gen.com/presentations/replication
5. 스키마 설계 시의 고려사항
- 우선순위가 뭐냐: High Consistency, High read performance, High write performance
- 어플리케이션의 데이터 접근/조작은 어떻게 하는지: Read/Write Ratio, Types of Queries / Updates, Data life-cycle and growth, Analytics (Map REduce, Aggregation)