이혁재 /KASA NoSQL
요약 NoSQL 소개 데이타베이스 관련 문서 대상 : 클라이언트 프로그래머 NoSQL 소개 데이타베이스 관련 문서 대상 : 클라이언트 프로그래머
Online game 에서의 데이터저장소 File ( ISAM ) DBMS – mysql – mssql – oracle – memory DB File ( ISAM ) DBMS – mysql – mssql – oracle – memory DB
NoSQL NO SQL ? Not Only SQL ! 클래식한 rdb 와 다른 database( or datastore ) 학계에서는 structured storage 라는 용어를 사용 NO SQL ? Not Only SQL ! 클래식한 rdb 와 다른 database( or datastore ) 학계에서는 structured storage 라는 용어를 사용
NoSQL
why NoSQL? 기존 RDB 에서의 해결할 수 없는 문제가 생김 Massive Data 에서 낮은 성능 – 대규모 문서를 indexing – 높은 트래픽의 웹사이트에서 데이타를 표시 – streaming 미디어를 전달 하드웨어 장애와 자동화된 복구 Data Model 이 문제 - Schema free RDBMS 를 사용하는 것보다 구현이 간단한 경우 기존 RDB 에서의 해결할 수 없는 문제가 생김 Massive Data 에서 낮은 성능 – 대규모 문서를 indexing – 높은 트래픽의 웹사이트에서 데이타를 표시 – streaming 미디어를 전달 하드웨어 장애와 자동화된 복구 Data Model 이 문제 - Schema free RDBMS 를 사용하는 것보다 구현이 간단한 경우
why NoSQL? ( twitter 의 문제 ) 7 TB/day ( 2+ PB/yr) 저장 = 10,000 CDs/day = 초당 80MB 7 TB/day ( 2+ PB/yr) 저장 = 10,000 CDs/day = 초당 80MB
why NoSQL? ( facebook 의 문제 ) 5700 억 view / month 다른 모든 사진 사이트 (flickr 포함 ) 를 합친 것보다 많은 사진을 서비스 30 억 photo upload / month 5700 억 view / month 다른 모든 사진 사이트 (flickr 포함 ) 를 합친 것보다 많은 사진을 서비스 30 억 photo upload / month
NoSQL 의 특징 테이블 스키마 없음 ( item 저장에 좋을 수도 ? ) join 오퍼레이션 없음 ( relation 이 없다. ) 컴퓨터를 늘려서 규모 가변적 내부구조 : 분산 hash table distributed key-value pair 나 assocative arrays 인터페이스 poor ACID( Atomic Consistency Isolation Durability ) 부수효과 : app 개발 생산성 open source 테이블 스키마 없음 ( item 저장에 좋을 수도 ? ) join 오퍼레이션 없음 ( relation 이 없다. ) 컴퓨터를 늘려서 규모 가변적 내부구조 : 분산 hash table distributed key-value pair 나 assocative arrays 인터페이스 poor ACID( Atomic Consistency Isolation Durability ) 부수효과 : app 개발 생산성 open source
분류 Key-value stores Document Database Wide column stores Graph databases Key-value stores Document Database Wide column stores Graph databases
분류
분류 ( Key-value stores ) 하나의 키, 하나의 값, 중복없음, 빠름 value 는 binary 하나의 키, 하나의 값, 중복없음, 빠름 value 는 binary
분류 ( Document Database ) key-value 이지만 structred value data 에 대해서 query 할 수 있음 key-value 이지만 structred value data 에 대해서 query 할 수 있음
분류 ( Wide column stores ) sparse, distributed multi-dimensional sorted map Google BigTable, Cassandra … sparse, distributed multi-dimensional sorted map Google BigTable, Cassandra …
분류 ( Graph databases ) 데이터의 관계 ( 그래프 ) 를 저장하는 용도
case study
SQL 같은 질의는 어떻게 하는가 ? DBMS( SQL ) – SELECT `column` FROM `table` WHERE `id` = key; API – BigTable table.get(key, "column_family:column") – Cassandra keyspace.get("column_family", key, "column") Query-language MapReduce DBMS( SQL ) – SELECT `column` FROM `table` WHERE `id` = key; API – BigTable table.get(key, "column_family:column") – Cassandra keyspace.get("column_family", key, "column") Query-language MapReduce
google 의 search 엔진에서 사용 – 논문 Simplified Data Processing On Large Cluster 데이터 처리 기술 – 프로그래밍 모델과 그 구현 함수형 프로그래밍에서 유래 google 의 search 엔진에서 사용 – 논문 Simplified Data Processing On Large Cluster 데이터 처리 기술 – 프로그래밍 모델과 그 구현 함수형 프로그래밍에서 유래
MapReduce
twitter 의 해결책 ( NoSQL 과 연관 없는 것도 포함 ) log 문제 – 처음엔 syslog 사용 – 크기가 커짐에 따라 scale 이 안됨 – 데이타를 잃어버림 log 문제 – 처음엔 syslog 사용 – 크기가 커짐에 따라 scale 이 안됨 – 데이타를 잃어버림
twitter 의 해결책 scribe – FB 도 같은 문제를 겪음, open-source – 로그를 분류를 갖추어 쓰면 나머지는 알아서 scribe 가 모아줌 – twitter 개발자도 개발에 기여 – scribe – FB 도 같은 문제를 겪음, open-source – 로그를 분류를 갖추어 쓰면 나머지는 알아서 scribe 가 모아줌 – twitter 개발자도 개발에 기여 –
twitter 의 해결책 Hadoop – 7TB/day 를 어떻게 쓸 것인가에서 시작 – 자동화된 복제와 오류복구 – MapReduce-based – 1TB 임의의 정수 데이타를 62 초에만에 정렬 – 평판, pagerank, 관계계산에 사용 – 5 분만에 120 억 tweet 을 count – 트위터 엔지니어들이 LZO 로 압축저장하게 기여함 Hadoop – 7TB/day 를 어떻게 쓸 것인가에서 시작 – 자동화된 복제와 오류복구 – MapReduce-based – 1TB 임의의 정수 데이타를 62 초에만에 정렬 – 평판, pagerank, 관계계산에 사용 – 5 분만에 120 억 tweet 을 count – 트위터 엔지니어들이 LZO 로 압축저장하게 기여함
twitter 의 해결책 Pig – SQL 보다 쉬운 데이타 처리 언어 – 데이타 분석에 사용 어떤 기능이 유저를 낚이게 하는가 ? 확률적 봇 탐지 – Pig – SQL 보다 쉬운 데이타 처리 언어 – 데이타 분석에 사용 어떤 기능이 유저를 낚이게 하는가 ? 확률적 봇 탐지 –
twitter 의 해결책 Pig sample
twitter 의 해결책 HBase – BigTable 의 clone ( HDFS 위에서 동작 ) – Find People 기능에 사용 – 많은 기능이 HBase 사용하여 구축되어지고 있음 – cassandra 와 비교됨 cassandra - 낮은 지연시간에 강점 HBase - 배치작업에 강점 – HBase – BigTable 의 clone ( HDFS 위에서 동작 ) – Find People 기능에 사용 – 많은 기능이 HBase 사용하여 구축되어지고 있음 – cassandra 와 비교됨 cassandra - 낮은 지연시간에 강점 HBase - 배치작업에 강점 –
twitter 의 해결책 FlockDB – 유저 간의 follow 관계 그래프 디비 – 일반적 rdb 로는 어려움이 많아서 자체 제작 join 으로 해결안됨 join 하려해도 메모리도 문제 – FlockDB – 유저 간의 follow 관계 그래프 디비 – 일반적 rdb 로는 어려움이 많아서 자체 제작 join 으로 해결안됨 join 하려해도 메모리도 문제 –
twitter 의 해결책 Cassandra – tweet 저장에 사용 – facebook 에서 만듬 – 예전 시스템 MySQL 로 분할 저장 memcached( consistency 문제가 생김, 복제 문제도 생김 ) application 에서도 처리해야 함 테이블을 고칠 수 없음 땜방이 필요 MySQL 의 write 한계에 종종 도달 – cassandra 를 사용하니 모두 해결 !!! – Cassandra – tweet 저장에 사용 – facebook 에서 만듬 – 예전 시스템 MySQL 로 분할 저장 memcached( consistency 문제가 생김, 복제 문제도 생김 ) application 에서도 처리해야 함 테이블을 고칠 수 없음 땜방이 필요 MySQL 의 write 한계에 종종 도달 – cassandra 를 사용하니 모두 해결 !!! –
facebook 의 해결책 Cassandra, Scribe, HADOOP 은 twitter 와 동일 PHP, Linux, MySQL – 모두 facebook 에 맞추어 변경 또는 최적화 Cassandra, Scribe, HADOOP 은 twitter 와 동일 PHP, Linux, MySQL – 모두 facebook 에 맞추어 변경 또는 최적화
facebook 의 해결책 Memcached – 웹서버와 MySQL 서버 cache layer – distributed memory cache – Memcached – 웹서버와 MySQL 서버 cache layer – distributed memory cache –
facebook 의 해결책 HipHop – PHP 를 C++ 로 convert, g++ compile 해서 바이너리로 만들어줌 – 웹 서버의 평균 CPU 사용량을 50% 정도 다운 – HipHop – PHP 를 C++ 로 convert, g++ compile 해서 바이너리로 만들어줌 – 웹 서버의 평균 CPU 사용량을 50% 정도 다운 –
facebook 의 해결책 Haystack – 건초 더미 ? – Photo Infrastructure HTTP server ( libevent 안의 프로그램 내장형 http 서버 ) Photo Store Haystack Object Store Filesystem Storage Haystack – 건초 더미 ? – Photo Infrastructure HTTP server ( libevent 안의 프로그램 내장형 http 서버 ) Photo Store Haystack Object Store Filesystem Storage
facebook 의 해결책 BigPipe – 웹페이지를 pagelet 이라는 단위로 쪼개서 처리하는 server side system – 병렬적으로 pagelet 을 처리 BigPipe – 웹페이지를 pagelet 이라는 단위로 쪼개서 처리하는 server side system – 병렬적으로 pagelet 을 처리
facebook 의 해결책 Thrift – 서로 다른 언어를 사용한 개발을 가능하게 해줌 – software framework – RPC 서버와 클라이언트를 생성해줌 – – facebook 은 C++, Erlang, Java, Python, PHP 등을 백앤드에서 사용 Thrift – 서로 다른 언어를 사용한 개발을 가능하게 해줌 – software framework – RPC 서버와 클라이언트를 생성해줌 – – facebook 은 C++, Erlang, Java, Python, PHP 등을 백앤드에서 사용
reference nosql-eu-2010d8 behind-facebook/ 더 - 빠른 -PHP 를 - 위해 nosql-eu-2010d8 behind-facebook/ 더 - 빠른 -PHP 를 - 위해
Q&A