기본 콘텐츠로 건너뛰기

NoSQL은 RDBMS를 대체할 수 있는가? Hadoop, Mongodb, Couchbase 등의 사용 경험자가 말한다!

듣기 버전 : https://youtu.be/_JtfZzISH5g


역시 한국의 유투브 방송에는 NoSQL이랑 RDBMS랑 비교하면서 초심자 분들에게
NoSQL이 좋아 하는 식으로 방송하는게 많이 보이는데요,
이건 잘못하면 RDBMS는 안써도 되 라는 느낌으로 들립니다.




실제로 그런 사례도 몇 번 일어난 것을 보면 제대로 알려드려야 할 것 같아서 이 주제를 가지고 나왔습니다.

넌 뭐가 잘났는데 하시는 분들을 위해 제 자랑을 또 해드려야지요.

전 하둡으로 4000만 dau가 있는 서비스의 1.76PB 짜리를 설계 구축 해봤습니다.
카우치베이스로 32TB 데이터 올리다가 터뜨려 먹은 적도 있습니다.
몽고디비 운영중에 이건뭐지 하고 리밸런싱 커맨드 날렸다가 락걸려서 8시간 서비스 정지도 시켜봤습니다.

저를 nosql의 n자도 모른다고 하시려는 분들!
사실 전 nosql을 제대로 못써봤습니다!

Nosql의 진가는 최소 일간 10억 유니크 엑세스 부터가 아닐까요?

Nosql을 처음 봤을 때 그 구조에 대해 경악 했지요.



NoSQL이 대단한 것은 데이터 저장 구조가 아닙니다. MySQL도 SQL Server도, ORACLE도 JSON Query를 지원하기 때문에 하나의 필드에 다 때려 넣고 표준 SQL에 JSON Query구문만 추가하면 필드처럼 인식 가능합니다. 비정형 데이터를 RDBMS가 못넣는다는 것은 이미 10년 전 이야기지요..

많은 영상에서 하드웨어 구조 같은것은 설명을 하나도 못봤는데요..

NoSQL은 만약 100개의 노드에 데이터가 뿌려져 있다고 합시다.
그러면 Namenode에 검색용 쿼리를 날립니다.
그러면 Namenode는 100개의 노드에 동일 쿼리를 던집니다.
그리고 그 중에 해당 쿼리에 데이터가 있으면 그 데이터만 Name node에 가져옵니다.
그걸 머지해서 리턴을 해주지요.

어떤 내용이냐면,

만약 100GB의 하드를 가진 서버 100대에 NoSQL을 설치하고 데이터를 마구 넣었습니다.
동일하게 10TB의 하드디스크 한대에 RDBMS를 설치하고 데이터를 넣었습니다.

그러면 용량은 같겠지요..

여기에서 데이터 검색을 던집니다.

그러면 RDBMS는 1대에서 Disk IO성능만큼 읽어내려가야 합니다.
모든 하드 디스크의 100GB를 읽어내려가는 데 걸리는 시간을 1 이라고 가정하면,

RDBMS의 경우 10TB를 읽어야 하므로 100이란 시간이 걸립니다.

100개 노드를 가진 NoSQL은 디스크는 100대가 병렬로 자기가 가진 데이터만 계산하면 되므로 1 이면 전체 읽기가 끝납니다. 그걸 Namenode에 가져와서 소팅 하여 리턴하면 약 1.2 정도면 끝납니다.

이 부분이 엄청난 것입니다.

하지만, 이걸 설명하는 NoSQL강의 있었나요?

하지만 NoSQL의 eula를 보고 다시 경악 했습니다.
데이터의 무결성은 보장 안한다.

세상에 어떤 dbms가 데이터 유실해도 모르지만 너 쓸래? 라고 합니까?

그래서 생각했죠.

이넘은 데이터가 유실되도 상관없는 고속 셀렉트 용이구나.

데이터 노드가 많아질 수록 고속으로 Write, Update를 했을 때 3replica라고 해도 노드간 인서트와 업데이트가 반복되는 과정에서 어떤 노드는 인서트보다 업데이트가 먼저 되는 문제가 발생할 수 있습니다.
그러면 데이터 정합성이 깨지게 되는 것이지요. 이걸 다수결로 할거냐 먼저 넣은걸로 할거냐를 선택하는 옵션도 있습니다. 그렇다고 그게 맞다고 보장할 수는 없는 것이지요. 먼저 넣었지만 나중에 업데이트 친게 맞을 수도 있고, 틀린게 두 개 들어갈 수도 있으니까요..

만약 rdbms를 메인으로 유저의 담벼락만 nosql화 해서 수백 노드에 넣어두면 수억 리퀘스트가 와도 문제 없고 담벼락 쯤이야 작성하다 날라가도 욕은 안하겠지요..

이런 용도로 사용하는게 명확히기 때문에 페북이나 트위터에서 nosql을 채택한 것 입니다.

양쪽다 초기 과금 서비스가 없었잖아요?

그들이 광고 시스템 내의 결제 및 정산도 nosql을 쓸거라 보나요?

전체를 보지 않고 극히 일부 도입해도 전체가 그런양 선동하는 영상이 많은데요,

초심자를 상대로 잘못된 정보를 주입하시면,
그들이 cto가 되서 제 고객이 되었을 때 고스란히 제가 피해를 봅니다.
이 무지를 어디서 주워들은 정보 하나로 진실이라 여기는데 절대 안바뀌거든요...

Nosql이 좋다고 교육 영상 올리시는 분들, 성능 비교 같은 것은 하나도 못봤는데요..

입출력 교육 조금 하고 최고네 하는 것보다,

실제로 써보시는 분들을 위한 실전 정보가 더 중요하지 않나요?

최소 몇 노드부터 해야 하는지,
리밸런싱 이슈라던가,

도쿄 본사가 지원해 준다고 mongodb쓰라고 해놓고 6노드로 시작 했는데 서비스가 3000명에서 터진 적이 있습니다.

도쿄 본사에서도 매출은 한국돈으로 매달 수십억을 벌지만 단일 서비스당 동접 3000을 경험하지 못랬거든요.. 그래서 도쿄에서도 첮고 난리 났는데 못찾고 있어서 제가 그 미팅에 들어가서 보자마자 뭔가 이상해서 질문을 했습니다.

레플리카는 6개인데 왜 하나만 쓰시나요?

그 질문을 하자 도쿄에선 당연히 6개 써야 하는거 아니냐고 하네요..
그니까 니네들이 지원해 준대매..
후쿠오카 지사는 이번에 처음 쓴느거니 3년이나 썼던 너네들이 그런거 봐줬어야 하는거 아냐?

그래서 또 모른척 하고 래플리카는 읽기만 할탠데 어떻게 쓰면되죠?
하니까, 각 노드의 ip를 넣어줘야 한다더랍니다.
그러니까 지금 개발포함 오픈까지 거의 1년이 다 되었는데 구축부터 봐줬다던 사람들이 지금까지 이야기 안해줬냐구?

혹시 이렇게 생각하신분들은 nosql이 뭔지 모르는 분입니다.

Nosql은 name node와 data node가 있고 name node는 어디서 써도 상관 없으므로 dns rr이면 됩니다.

왜 elb같은거 안쓰냐구요?

이 질문 하신분!

Nosql로 깔짝 대려고 하시는 겁니까?

엄청난 데이터를 처리하려고 nosql쓰는거 아닌가요?

거기서 무슨 병목을 유발시키려고 elb를 붙이나요?

문재 없었다규요?

그러니까 천만단위 유저를 nosql로 받아보시고 하는 말이냐구요..

이미 동접 100만을 넘어가면 1GB짜리 L4/L7으론 터집니다.
그럼 10GB짜리 쓰면 되잖아요?
그게 얼마나 비싼지는 알고 하시는 말씀인가요?
자기 돈 아니라고 인프라에 얼마나 쳐바를 생각이신가요?
왜 1/10 비용으로 커버 가능한 시스템을 굳이 비싼 돈을 들이려고 하는 건가요?

그리고, Nosql조차 namenode 병목을 막고자 안간힘인데..
그래서 couchbase가 무한히 namenode를 만들 수 있어 병목 현상이 없다고 광고 하잖아요..
엄청난 규모가 되면 이런 고민을 하게 되고 이런 고민할 정도가 아니면 그냥 rdbms로도 충분하단 말입니다.

누군가의 영상에 혹해서 rdbms때려치고 nosql을 배우시려는 분들!
그 강사한테 얼마나 먾은 유저를 커버 해봤냐고 물어봐 주세요. 페북이나 트위터 말고 그 강사 본인 경험 말입니다.

실제로 몽고db로 100노드 1PB를 리밸런싱 돌려서 얼마나 오랫동안 락 걸려서 서비스 정지 되었는지 경험을 해보시면 nosql은 아무나 쓰는게 아니란 것을 알겁니다.

그리고 전통 rdbms의 위대함도 새삼 느끼게 되겠지요.

조금 열냈지만,

전 NoSQL의 N자도 모르는 그냥 IT컨설턴트 였습니다.


giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

댓글

이 블로그의 인기 게시물

Alter table 에서 modify 와 change 의 차이 :: SQL Server

두 개의 차이를 모르는 경우가 많아서 정리합니다.  modify는 필드의 속성값을 바꿀때 사용하구요.. change는 필드명을 바꿀떄 사용합니다.  alter table tbbs modify bNote varchar(2000) NULL; alter table tbbs change bNoteOrg bNoteNew varchar(2000) NULL; change에는 원래 필드와 바꾸고 싶은 필드명을 넣어서 필드명을 바꾸는 것이죠~ 더 많은 SQL Server 팁을 보려면  https://github.com/LowyShin/KnowledgeBase/tree/master/wiki/SQL-Server giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

[Classic ASP] Cookie가 삭제 안되는 문제

만든 쿠키가 삭제가 계속 안되서 여기저기 삽질을 했다. 모든 쿠키를 삭제하는 함수도 만들었다. Function CookieClear(cldomain) For Each cookie in Request.Cookies Response.Cookies(cookie).Domain = "." & cldomain Response.Cookies(cookie).Path = "/" Response.Cookies(cookie).Expires = DateAdd("d",-1,now()) Next End Function 그런데.. 안되서 계속 삽질하다가 하나 알았다.  littleworld.net littleworld.co.kr www.littleworld.net  의 모든 값을 지우려고 했으나.. 처음 만든 쿠키가 www.littleworld.net 인 관계로.. 처음에 www.littleworld.net 의 쿠키를 삭제 해야만 나머지가 지워졌다.. -ㅅ-;; 간단하지만 몰랐던 초보적인 사실.. ---- 누구나 쉽게 광고를! http://www.cashtalk.co.kr Free Infrastructure automation & management tool Global Infrastructure Integration Platform http://giip.littleworld.net Subscribe and publish your links as a book with friends  My Favorite Link Share http://link.littleworld.net

BI의 궁극판! Apache Drill을 써보자!

사실 Apache Drill 은 BI(Business Intelligence)라고 부르는 것 보다는 단순 데이터 연결 엔진이다. https://drill.apache.org/ 하지만 내가 왜 극찬을 하느냐면.. DBA로서 항상 문제가 되어왔던게, 이기종 데이터의 변환이나 처리였다. 포맷을 맞추는데 엄청난 시간이 걸리고, 데이터 임포트 실패가 무수하게 나고.. 한 번 잘못 데이터를 추출하면 다시 조정, 변환, 추출하는데 시간이 많이 걸린다. 그런데! Apache Drill은 그냥 RDB를 CSV랑 연결해서 조인해서 통계를 낼 수 있다. 그것도 표준 SQL을 사용하여! 예를 들어, CSV의 세 번째 컬럼이 price 이고, 물건의 판매이력을 PG사에서 CSV로 출력 받았다. 우리 DB와의 검증을 위해서는 수동으로 Import를 한 뒤에 포맷이 안맞아 잘리는 데이터가 있다면 다시 맞춰주고, 재 임포트를 수십 번, 그리고 나서 겨우 들어간 데이터를 조인하여 빠진 데이터를 분간한다. 숫자가 적다면 개발자가 개발로 처리할 수도 있지만, 건수가 하루에 300만건 짜리라면.. 한 달 온 파일은 9천만 건이다. 프로그램으로 고작 처리하는 것이 초당 500건. 거의 20만초, 에러 없이 약 56시간.. 에러가 생기면 다시 56시간.. ㅠㅡㅠ 이런게 현실이기 때문에 쿼리 말고는 방법이 없다. apache drill 의 진면목을 보자! 이번에는 좀 범용 적인 MySQL DB와 붙여 보자. . 난 이번에는 Mac에서 작업을 했기 때문에 그냥 다운 받아서 풀었음.. https://drill.apache.org/download/ 여기서 자기 OS에 맞는 버전을 받아서 설치하시길.. 압축을 풀고 나면 MySQL 커넥터를 붙여야 한다. https://dev.mysql.com/downloads/connector/j/5.1.html 여기서 다운로드 이런 커넥터 들을 붙일 때마다 콘피그를 수정해 줘야 하지만, 몇 번만