기본 콘텐츠로 건너뛰기

Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison

번역 작업

원문


NoSQL DB 비교 분석 자료



MongoDB

  • 구현 : C++
  • 특징 : 몇가지 SQL과 비슷한 속성을 가짐(Query, index 등)
  • 라이센스 : AGPL
  • 프로토콜 : Custom, binary(BSON)
  • 특징
    • Master/slave replication(auto failover with replica sets)
    • Sharding built-in
    • Queries are javascript expressions
    • Run arbitrary javascript functions server-side
    • Better update-in-place than CouchDB
    • Uses memory mapped files for data storage
    • Performance over features
    • Journaling (with --journal) is best turned on
    • On 32bit system, limited to 2.5Gb
    • An empty database takes up 192Mb
    • GridFS to store big data + metadata (not actually an FS)
    • Has geospatial indexing
  • 주요 사용처
    • 만약 다양한 쿼리가 필요하다면
    • map/reduce 함수가 아니라 인텍스를 선호한다면
    • big DB에서 좋은 성능을 바란다면
    •  CouchDB를 사용하길 원하지만, filling up disks에 너무 많은 데이터 변화가 있다면
  • 사용예
    • For most things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back.

CouchDB

  • 구현 :  Erlang
  • 주요특징 : DB consistency, 쉬운 사용
  • 라이센스 : Apache
  • 프로토콜 : HTTP/REST
  • 상세특징
    • Bi-directional replication
    • continuous or ad-hoc
    • with conflict detection
    • thus, master-master replication
    • MVCC - write operations do not block reads
    • Previous version of documents are available
    • Crash-only(relabel) design
    • Needs compacting from time to time
    • Views: embedded map/reduce
    • Formatting views : lists&shows
    • Server-side document validation possible
    • Authentication possible
    • Real-time updates via_changes
    • Attachement handling
    • thus CouchAps(standalone js apps)
    • jQuery library included
  • 주요 사용처
    • 누적, 일시적 데이터 변화, 미리 정의된 쿼리가 사용될 때, versioning이 중요한 곳
    • For accumulating, occasionally changing data, on which pre-defined queries are to be run. Places where versioning is important.
  • 사용예
    • CRM, CMS systems. Master-master replication is an especially interesting feature, allowing easy multi-site deployments.

HBase

  • 구현 : 자바
  • 주요특징 : 수십억 row  x  수백만 column
  • 라이센스 :  Apache
  • 프로토콜 : HTTP/REST(also Thrift)
  • 상세특징
    • Modeled after Google's BigTable
    • Uses Hadoop's HDFS as storage
    • Map/reduse with hadoop
    • Query predicate push down via server side scan and get filters
    • Optimizations for real time queries
    • A high performance Thrift gateway
    • HTTP supports XML, Protobuf, and binary
    • Cascading, hive, and pig source and sink modules
    • Jruby-based (JIRB) shell
    • Rolling restart for configuration changes and minor upgrades
    • Random access performance is like MySQL
    • A cluster consists of several different types of nodes
  • 주요사용처
    • Hadoop is probably still the best way to run Map/Reduce jobs on huge datasets. Best if you use the Hadoop/HDFS stack already.
  • 사용예
    •  Analysing log data

Cassandra

  • 구현 : 자바
  • 주요특징 : Best of BigTable and Dynamo
  • 라이센스 : Apache
  • 프로토콜 : Custom, binary(Thrift)
  • 상세특징
    • Tunable trade-offs for distribution and replication (N, R, W)
    • Querying by column, range of keys
    • BigTable-like features: columns, column families
    • Has secondary indices
    • Writes are much faster than reads
    • Map/reduce possible with Apache Hadoop
    • All nodes are similar, as opposed to Hadoop/HBase
  • 주요사용처
    • When you write more than you read (logging). If every component of the system must be in Java. ("No one gets fired for choosing Apache's stuff.")
  • 사용예
    • Banking, financial industry (though not necessarily for financial transactions, but these industries are much bigger than that.) 
    • Writes are faster than reads, so one natural niche is real time data analysis

댓글

이 블로그의 인기 게시물

REST Web Service에서 Projection 기능 활용

REST Web Service에서 Projection을 이용한 웹 인터페이스 유연성 확보하기. Projection 기능이란?   프로젝터와 같이 실제하는 물체를 보고 싶은 형태로 볼 수 있게 도와주는 기능을 말한다. 좀 더 쉽게 말하면 실제하는 물체란 필름을 말하는 것이고, 보고 싶은 형태란 70인치 화면으로 보여주는 것을 말한다. 설정에 따라 30인치 화면으로 볼 수도 있다.   즉, Projection 기능이 있다면 상황에 맞는 화면 크기로 보여 줄 수 있는 것이다. [프로젝터] 웹 인터페이스 설계의 어려움   웹서버를 개발하는 개발자 입장에서 하나의 인터페이스라도 만드는 일은 쉽지 않다. 그렇기 때문에 웹 인터페이스의 개수를 줄이려고 노력하는 것이 일반적이다. 그러기 위해서는 좀 더 일반적인(General) 형태의 인터페이스로 설계하는 수밖에 없다. 그러나 아이러니하게도 사용자(인터페이스를 사용하는 다른 개발자) 입장에서는 이런 일반적인 인터페이스를 쓰기란 여간 어려운게 아니다. 클라이언트마다 필요한 데이터가 다르다.  REST 웹서비스에서는 리소스에 해당하는 데이터를 다음과 같이 JSON 형식의 Response로 전달해준다. 예를 들어 다음과 같이 상품 정보를 보내주는 RESR API가 있다고 해보자. GET /api/furniture/item/123334333 위의 REST API를 이용하여 다음과 같은 데이터를 받을 수 있다. { "item_id" : 1233343333 , "name" : "chair" , "category" : "furniture" , "price" : 56000 , "seller" : "Makers" , "description" : "Goo

AWS ELB 504 Error

AWS EC2  운영 중 가끔씩 볼 수 있는 에러가 있습니다. 대표적으로 다음의 세가지 502, 503, 504 입니다. 이 중에서 이번에 알아볼 문제는 HTTP 504 에러입니다 .  타임 아웃이 되어   Request 를 처리하지 못하는 상황이 됩니다 .   해결 방법부터 이야기 하자면 다음과 같이 웹서버의 Time-out 시간을 60 초 이상으로 늘리는 것입니다 . Web Server & Application Time-out >= 60 sec 그 이유는 다음과 같은 ELB의 특성 때문입니다. ELB는 클라이언트와 EC2 서버 양쪽으로 커넥션을 유지하고 있습니다. ELB는 클라이언트와  EC2 서버간의 커넥션을 관리하는 역할을 맡고 있습니다. 그래서 유효한 커넥션만을 남겨놓습니다. 이를 위해서 Time-out 시간을 가지고 이 시간동안 데이터가 송수신되지 않으면 연결을 끊습니다.  기본적으로 Elastic Load Balancing는 두 연결 모두에 대해 Time-out(유휴 시간) 시간을 60초로 되어 있습니다. 그렇기 때문에 HTTP 또는 HTTPS를 사용할 경우 "KeppAlive" 옵션을 사용하여 커넥션을 재활용해야 합니다. 이 때  ELB 커넥션도 재사용되기 때문에 CPU 사용률을 줄일 수 있습니다. Browser Time-out Opera 11.11 120 sec IE 9 60 sec Chrome 13 300 sec FireFox 4 115 sec 서버 로직 중에서 60초 이상 실행될 수 있는 부분이 있는 경우 504 에러를 자주 볼 수 있을 것입니다. 문제 해결을 위해서는 Web Server는 물론  Tomcat 설정 또한 60초 이상으로 변경해주어야 합니다.

DrJava 설치 방법

  보통 Java를 사용하여 프로젝트를 만들때, Eclipse라는 IDE(Integrated Development Environment)를 사용합니다. 그러나 Java를 처음 배우려는 사람들에게 복잡한 프로젝트까지 커버할 수 있는 Eclipse는 다양한 환경 설정, 복잡한 UI가 어렵게 느껴질 수 있습니다. 이런 사람들을 위해서  DrJava를 추천합니다.   DrJava 란?    LIDE(Lightweight IDE)라고 할 수 있습니다. 기본적으로 자바를 학습하려는 사람들을 위해  디자인되었습니다. 직관적인 인터페이스를 제공하고, line by line으로 자바 코드를 실행할 수 있는 interactive console을 제공합니다. 설치 순서 1. jdk 설치 2. DrJava 설치   2-1.   http://drjava.sourceforge.net 사이트에 접속   2-2. Current Stable Release 에서 본인의 환경에 맞는 App 다운로드   2-3. 만약 다음과 같은 경고창을 보았을 경우 java jdk나 jre가 제대로 설치 되었는지 확인 3. 설치 완료 후 실행 4. 다음과 같이  DrJava가 실행된다.