{"componentChunkName":"component---src-templates-blog-post-js","path":"/Database/RDBMS_NoSQL/","result":{"data":{"site":{"siteMetadata":{"title":"Progress Not Perfection","author":"Sunmin","siteUrl":"https://sunmin.netlify.com","comment":{"disqusShortName":"","utterances":"Sunmin0520/blog"}}},"markdownRemark":{"id":"8df87f37-c23b-574b-b781-eb6e10e6c685","excerpt":"1. 관계형 데이터베이스 용어 table표, row행, column(field) schema: 필드와 제약 사항을 정해둔 것 관계형DB에서는 동일한 규칙과 제약사항 따르는 데이터만 저장됨  거대한 구조의 데이터를 다루는 상황에서 고정된 스키마 사용 -> 저장된 데이터가 올바른 형식임을 보장  개별적인 특질이 너무 강하면 관계형 DB 부적합 가능 primary key 기본키 : 모든 표에는 식별 위한 ID 필드 있고, 이 값은 그 표 안에서 고유해야한다. 이 값으로 행을 식별 foreign key…","html":"<p>\n<h2 id=\"1-관계형-데이터베이스\" style=\"position:relative;\"><a href=\"#1-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\" aria-label=\"1 관계형 데이터베이스 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 관계형 데이터베이스</h2>\n<h3 id=\"용어\" style=\"position:relative;\"><a href=\"#%EC%9A%A9%EC%96%B4\" aria-label=\"용어 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>용어</h3>\n<ul>\n<li>table표, row행, column(field)</li>\n<li>schema: 필드와 제약 사항을 정해둔 것</li>\n<li>\n<p>관계형DB에서는 <strong>동일한 규칙과 제약사항 따르는 데이터</strong>만 저장됨 </p>\n<ul>\n<li>거대한 구조의 데이터를 다루는 상황에서 고정된 스키마 사용 -> 저장된 데이터가 올바른 형식임을 보장 </li>\n<li>개별적인 특질이 너무 강하면 관계형 DB 부적합 가능</li>\n</ul>\n</li>\n</ul>\n<br />\n<ul>\n<li><strong>primary key 기본키</strong> : 모든 표에는 식별 위한 ID 필드 있고, 이 값은 그 표 안에서 고유해야한다. 이 값으로 행을 식별</li>\n<li><strong>foreign key 외래키</strong> : 다른 행의 ID값을 저장하여 참조하는 필드</li>\n</ul>\n<br />\n<ul>\n<li>JOIN을 통해 중복정보를 제거(기본키, 외래키의 사용)</li>\n<li>\n<p><strong>정규화 normalization</strong> - 표를 나누고 <strong>중복정보를 제거</strong>하는 변환 과정</p>\n<ul>\n<li>어떤 DB에 중복되는 정보가 전혀 없도록 해두면 그 DB는 완전히 정규화된 것</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"schema-migration-스키마이전\" style=\"position:relative;\"><a href=\"#schema-migration-%EC%8A%A4%ED%82%A4%EB%A7%88%EC%9D%B4%EC%A0%84\" aria-label=\"schema migration 스키마이전 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Schema migration 스키마이전</h3>\n<ul>\n<li>스키마 변경 및 수정작업 위해 스키마 마이그레이션 스크립트 작성</li>\n<li>롤백하는 내용도 일반적으로 함께 작성</li>\n<li>DBMS에서는 보통 스키마 마이그레이션 도구 함께 제공</li>\n</ul>\n<h3 id=\"sql\" style=\"position:relative;\"><a href=\"#sql\" aria-label=\"sql permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SQL</h3>\n<ul>\n<li>RDBMS는 대부분 SQL지원</li>\n<li>JOIN은 비용이많이 든다. 최악의 경우 조인하는 표들의 모든 결합 예상해야함 => JOIN은 RDBMS의 가장 큰 장점이면서도 취약점</li>\n</ul>\n<h3 id=\"index-인덱스-색인\" style=\"position:relative;\"><a href=\"#index-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EC%83%89%EC%9D%B8\" aria-label=\"index 인덱스 색인 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Index 인덱스, 색인</h3>\n<ul>\n<li>각 행의 id와 메모리 속 주소를 대응 -> 해당 항목 빠르게 조회</li>\n<li>균형 이진 탐색 트리로 구성. 각 노드의 키가 찾아야하는 행의 id값. O(log n)으로 탐색 가능</li>\n<li>기본적으로는 모든 Primary key에 대해 인덱스 생성 (NoSQL에서도 동일)</li>\n<li>특정 필드 이용해 검색 자주 하면 그 필드에 대한 인덱스 추가로 생성하게 스키마 생성할 수 있음</li>\n</ul>\n<br />\n<ul>\n<li><strong>고유 필드(중복값이 허용되지 않는 필드)</strong> : 중복 없애기 위해 모든 행 확인 필요 -> 고유필드에서는 자동으로 인덱스 생성이 일반적</li>\n<li><strong>정렬</strong> : 2개 이상의 필드를 기준으로 정렬시 여러 필드 묶어 joint index 공동색인 활용 가능</li>\n<li>\n<p><strong>성능</strong> : 모든 필드에 색인이 있다면 데이터의 CRUD일어날 때 색인도 이를 반영해야함 -> 어떤 색인 남겨두고, 버릴 것인지 판단 필요</p>\n<ul>\n<li>분석 도구 활용하여 성능차이 날 때만 색인 추가할 것</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"트랜잭션\" style=\"position:relative;\"><a href=\"#%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98\" aria-label=\"트랜잭션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>트랜잭션</h3>\n<ul>\n<li>여러 단계로 이루어진 연산을 모두 온전히 수행 or 아무 연산도 수행 없이 데이터 그대로 둠. <strong>원자적으로 수행하고자 하는 DB연산들을 나열한 것</strong></li>\n</ul>\n<h2 id=\"2-nosql\" style=\"position:relative;\"><a href=\"#2-nosql\" aria-label=\"2 nosql permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. NoSQL</h2>\n<ul>\n<li>RDBMS가 데이터(중복 제거 및 짜임새있게 조작)에 중심, 응용프로그램에서 어떻게 사용할 것인지는 보다 덜 관심이라면 NoSQL은 반대</li>\n<li>표를 이용 X, 여러 데이터 항목의 결합 거의 X</li>\n<li>방대하고 불안정하고 구조가 일정하지 않은 데이터를 빠르고 효율적으로 다룸</li>\n<li>고정된 스키마나 스키마 마이그레이션에 대한 걱정 없이 개발</li>\n<li>정보의 일관성 위해 중복 정보 갱신 부담 있음</li>\n</ul>\n<h3 id=\"document-store-문서-저장소\" style=\"position:relative;\"><a href=\"#document-store-%EB%AC%B8%EC%84%9C-%EC%A0%80%EC%9E%A5%EC%86%8C\" aria-label=\"document store 문서 저장소 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Document store 문서 저장소</h3>\n<ul>\n<li>RDBMS기준에서는 중복이 되는 데이터들도 하나의 document문서로, 서로 연관된 문서는 collection으로 묶어둠</li>\n<li>\n<p>장점</p>\n<ul>\n<li>관련 정보 얻기 위해 JOIN 할 필요 없다.</li>\n<li>고정된 스키마 불필요</li>\n<li>각 데이터 항목에 서로 다른 필드 지정 가능</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"key-value-store-키-값-저장소\" style=\"position:relative;\"><a href=\"#key-value-store-%ED%82%A4-%EA%B0%92-%EC%A0%80%EC%9E%A5%EC%86%8C\" aria-label=\"key value store 키 값 저장소 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>key-value store 키-값 저장소</h3>\n<ul>\n<li>데이터를 조직적이고 일관적으로 저장하는 가장 단순한 방식. 다른 DB에 비해 key-value store가 유의미하게 우수한 것은 캐시가 매우 빈번하게 요청될 때뿐.</li>\n<li>\n<p>주로 캐시에 사용</p>\n<ul>\n<li>예: { 특정URL: 그 URL에 대응하는 웹페이지에 필요한 데이터를 DB에서 가져온 뒤 그 데이터를 HTML로 가공해둔 것 }</li>\n<li>시간 오래 걸리고 항상 동일한 결과 출력하는 연산에 효과적  </li>\n</ul>\n</li>\n</ul>\n<h3 id=\"그래프-데이터베이스\" style=\"position:relative;\"><a href=\"#%EA%B7%B8%EB%9E%98%ED%94%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\" aria-label=\"그래프 데이터베이스 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>그래프 데이터베이스</h3>\n<ul>\n<li>고정된 스키마 제약 없이 데이터들의 관계를 엣지로 저장(항목들의 연결망 작성에 유용)</li>\n<li>데이터가 네트워크 형태, 각 항목 사이에서 나타내야할 중요한 관계가 많다면 특히 유용</li>\n</ul>\n<h3 id=\"빅-데이터\" style=\"position:relative;\"><a href=\"#%EB%B9%85-%EB%8D%B0%EC%9D%B4%ED%84%B0\" aria-label=\"빅 데이터 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>빅 데이터</h3>\n<ul>\n<li>3V(Volume, Velocity, Variety) 측면에서 다루기 까다로운 상황</li>\n<li>NoSQL은 보다 유연한 데이터 처리 지원 -> 빅데이터는 NoSQL 쓰는 경향 많다.</li>\n</ul>\n<h2 id=\"3-분산-데이터베이스\" style=\"position:relative;\"><a href=\"#3-%EB%B6%84%EC%82%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4\" aria-label=\"3 분산 데이터베이스 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 분산 데이터베이스</h2>\n<ul>\n<li>일부 DBMS는 서로 연결된 컴퓨터들 위에서 분산데이터베이스 시스템을 구성하고, 이를 위한 방법에는 레플리케이션, 샤딩 등등이 있다.</li>\n</ul>\n<h3 id=\"single-master-replication-단일-마스터-레플리케이션\" style=\"position:relative;\"><a href=\"#single-master-replication-%EB%8B%A8%EC%9D%BC-%EB%A7%88%EC%8A%A4%ED%84%B0-%EB%A0%88%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98\" aria-label=\"single master replication 단일 마스터 레플리케이션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Single-master replication 단일 마스터 레플리케이션</h3>\n<ul>\n<li>한 마스터 있고 마스터에서 쿼리 요청받고, 연결된 여러 슬레이브에 복제본 동기화 </li>\n<li>쿼리 양이 엄청나다면 싱글 마스터로 부하 감당 어려움 => 다중 마스터 레플리케이션 이용</li>\n</ul>\n<h3 id=\"다중-마스터-레플리케이션\" style=\"position:relative;\"><a href=\"#%EB%8B%A4%EC%A4%91-%EB%A7%88%EC%8A%A4%ED%84%B0-%EB%A0%88%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98\" aria-label=\"다중 마스터 레플리케이션 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>다중 마스터 레플리케이션</h3>\n<ul>\n<li>클러스터 구성하는 <strong>모든 컴퓨터를 마스터</strong>로 삼고, <strong>load balancer</strong>부하분산기 를 통해 질의 나눠받음</li>\n<li>각 컴퓨터는 클러스터의 다른 모든 컴퓨터와 연결, 전체 DB의 사본도 모든 컴퓨터가 각자 보유</li>\n<li>대용량의 쓰기 질의가 대량 발생시 클러스터 곳곳의 DB사본 동기화도 어려움 가능 => 샤딩 이용</li>\n</ul>\n<h3 id=\"sharding-샤딩\" style=\"position:relative;\"><a href=\"#sharding-%EC%83%A4%EB%94%A9\" aria-label=\"sharding 샤딩 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Sharding 샤딩</h3>\n<ul>\n<li><strong>DB를 여러 컴퓨터에 조각내어 저장</strong>하는 방법. 그 각 분할본은 shard 라고 함.</li>\n<li>컴퓨터마다 갖고 있는 부분 다름 -> query router 통해 필요한 샤드로 쿼리 전달함</li>\n<li>클러스터 구성하는 컴퓨터 중 하나라도 중지시 해당 DB를 아예 못 쓰게 될 수도 있다. => 샤딩과 레플리케이션 병행해서 각 분할본마다 마스터-슬레이브 클러스터 운영</li>\n</ul>\n<h3 id=\"데이터-일관성\" style=\"position:relative;\"><a href=\"#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BC%EA%B4%80%EC%84%B1\" aria-label=\"데이터 일관성 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>데이터 일관성</h3>\n<ul>\n<li>레플리케이션 방식의 분산 DB에서 클러스터 구성하는 모든 컴퓨터의 동기화에는 시간 소요 -> 데이터의 일관성 깨질 수 있다.(data inconsistency)</li>\n<li>일관성과 성능은 반비례할 수밖에 없다. 질의 수행시 일관성을 강력히 강제하도록 하지 않는 것은 eventual consistency결과적 일관성 하의 작업</li>\n</ul>\n<h2 id=\"4-정보-교환-위한-직렬화-방식\" style=\"position:relative;\"><a href=\"#4-%EC%A0%95%EB%B3%B4-%EA%B5%90%ED%99%98-%EC%9C%84%ED%95%9C-%EC%A7%81%EB%A0%AC%ED%99%94-%EB%B0%A9%EC%8B%9D\" aria-label=\"4 정보 교환 위한 직렬화 방식 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 정보 교환 위한 직렬화 방식</h2>\n<ul>\n<li>데이터를 데이터베이스 외부에 저장해야할 떄도 있다. (백업, 다른 시스템에 보내는 등등) => 데이터를 serialization직렬화하여 특정 부호화 형식으로 변환</li>\n<li>\n<p>직렬화 방법</p>\n<ul>\n<li>SQL: RDBMS의 직렬화에 가장 많이 사용/대부분의 RDBMS는 dump(DB를 SQL직렬화 파일로 저장하는 명령) &#x26; restore 기능 제공</li>\n<li>XML: 관계형 뿐만 아니라 다양한 시스템에서 호환</li>\n<li>JSON: 관계형, 비관계형 모두 호환되며 가장 친숙하고 직관적/BSON, JSONLD등의 변형판도 있다.</li>\n<li>CSV: 콤마로 한 행씩 구분하며 데이터 보냄. 간단한 데이터 보낼 때 유용</li>\n</ul>\n</li>\n</ul>\n<br />\n<br />\n<p><strong>출처</strong> 블라드스톤 페헤이라 필루, 컴퓨터 과학 로드맵(인사이트, 2018)</p>\n</p>","frontmatter":{"title":"[DB] RDBMS, NoSQL, 분산 데이터베이스","date":"February 22, 2021"}}},"pageContext":{"slug":"/Database/RDBMS_NoSQL/","previous":{"fields":{"slug":"/Retrospective/2021/Feb_3rd/"},"frontmatter":{"title":"[회고] 2월 셋째 주 회고(2/16 ~ 2/21)","category":"retrospective","draft":false}},"next":{"fields":{"slug":"/CS/basic/"},"frontmatter":{"title":"[CS] 컴퓨터의 동작 원리","category":"cs","draft":false}}}},"staticQueryHashes":["3128451518","521680639"]}