데이터를 파티션으로 쪼개는 작업을 샤딩이라고 함. 파티셔닝의 주 목적은 확장성이다. 트랜잭션, 분석용 작업 부하 완화 파티셔닝과 복제 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장한다. 한 노드에 여러 파티션이 속할 수 있다. 키-값 데이터 파티셔닝 파티셔닝을 해도 데이터가 고르게 분포되지 않아 특정 파티션이 다른 파티션보다 데이터가 많거나 질의를 많이 받을 수 있다(skewed 됐다고 함). 불균형하게 부하가 높은 파티션을 핫스팟 이라고 하는데 이런 현상이 발생한다면 파티셔닝의 효과가 매우 떨어지게됨. 키의 범위 기준 파티셔닝 백과사전 처럼 A~B, C~D, D~F, …, T~Z 각 파티션 내에선 키를 정렬된 순서로저장할 수 있다. 키 범위기준 파티셔닝은 특정한 접근 패턴이..
복제: 네트워크로 연결된 여러장비에 동일한 데이터의 복사본을 유지한다는 의미 노드 간 변경을 복제하기 위한 세 가지 인기 있는 알고리즘(단일 리더, 다중 리더, 리더없는 복제)가 있으며 이번 장에서 살펴볼것임. 리더와 팔로워 데이터베이스의 복사본을 저장하는 각 노드를 복제 서버라고 함. 그 중 하나를 리더(마스터 or 프라이머리), 나머지를 팔로워(복제 서버, 슬레이브) 라고 함. 클라이언트는 리더에 쓰기 요청을 하고 리더는 로컬 저장소에 새로운 데이터를 기록. 리더는 복제로그나 변경 스트림의 형태로 팔로워에게 변경 내용을 전송, 팔로워는 복사본을 갱신. 읽기는 팔로워에게 질의 하지만 쓰기는 리더에게만 허용됨. 동기식 대 비동기식 복제 동기식 복제 : 팔로워1의 복제. 팔로워의 ok 메시지를 기다림 비동..
애플리케이션은 필연적으로 시간이 지남에 따라 변한다. 애플리케이션의 기능을 변경하려면 저장하는 데이터(타입이나 스키마)도 변경해야 한다. 그런데 대규모 애플리케이션에선 데이터 타입이나 스키마의 변경을 즉시 반영할 순 없다. 그래서 데이터를 변경 할 때 하위 호환성과 상위 호환성을 지켜줘야 한다. 데이터 부호화 형식 데이터를 파일에 쓰거나 네트워크를 통해 전송하려면 바이트열의 형태로 부호화(직렬화, 마샬링)해야함. 반대는 복호화(파싱, 역직렬화, 언마샬링) 언어별 형식 프로그래밍 언어에는 객체를 부호화 하는 자체 라이브러리가 있지만 문제점들이 많아서 일반적으로 사용하지 않는것이 좋다. Json과 XML 이진 변형 xml 은 장황하다. json 은 xml 대비 단순하고 csv도 어느 정도 인기 있는 언어 독..
데이터베이스의 두 가지 작업. 데이터 저장 데이터 제공 데이터베이스를 강력하게 만드는 데이터구조 간단한 디비를 생각해보자. 추가 작업은 간단하고 성능이 좋다. → 맨 뒤에 한줄 추가. 로그 형태 읽기 작업은 레코드 양이 비례하여 성능이 안좋아짐.(O(n)) 이에 읽기 성능을 끌어올리기 위해(특정 키의 값을 효율적으로 찾기 위해) 부가적인 메타데이터(색인) 을 유지한다. 부가적인 메타데이터를 유지하기 위하여 필연적으로 오버헤드가 발생함. 색인을 사용할지, 어떤 색인을 사용할지, 어떤 데이터를 색인 할지 트레이드오프를 잘 따져보고 선택해야함. 해시 색인 키-값 저장소로 대부분의 프로그래밍 언어에서 볼 수 있는 사전타입과 매우 유사. 해시색인의 간단한 예시 로그 형식으로 데이터를 저장한다고 가정 → 데이터가 ..
데이터 모델은 문제를 어떻게 생각해야 하는지에 대해서도 지대한 영향을 미친다. 관계형 모델과 문서 모델 관계형 모델 데이터는 관계(relation)로 구성 각 관계는 순서없는 튜플(tuple)의 모음 비지니스 데이터 처리에 근원이 있음. 요즘엔 웹에서 볼 수 있는 대부분의 서비스(온라인 게시물, 토론, 소셜 네트워크, 전자 상거래, 게임, SaaS)는 여전히 관계형 데이터베이스를 통해 제공 NoSQL 의 탄생 대규모 데이터셋이나 매우 높은 쓰기처리량 달성을 관계형데이터베이스보다 쉽게 할 수 있는 확장성 필요 무료 오픈소스 소프트웨어 선호 확산 관계형 모델에서 지원하지 않는 특수 질의 관계형 스키마의 제한에 대한 불만과 동적이고 표현력 풍부한 데이터 모델에 대한 바람 객체 관계형 불일치 임피던스(imped..
오늘날 많은 애플리케이션은 데이터 중심적 애플리케이션의 성능은 CPU 성능보다는 데이터의 양, 복잡도, 변화 속도에 영향을 받는다. 데이터 시스템 데이터베이스 : 데이터를 저장 캐시 : 읽기 속도 향상을 위하여 값비싼 수행 결과를 기억 검색 색인 : 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공 스트림 처리 : 비동기 처리를 위해 다른 프로세스로 메세지 보내기 batch 처리 : 주기적으로 대량의 누적된 데이터를 분석 데이터 시스템에 대한 생각 데이터베이스, 큐, 캐시 등 다른 범주에 속한 도구로 생각이 되지만 데이터 시스템이라는 포괄적인 용어로묶어야함. 분류간 경계가 흐려지고 있고 redis, apache kafka 많은 애플리케이션이 단일 도구로는 더 이상 데이터처리와 ..
1. 인스타그램이 뭔가요? 인스타그램은 유저들이 사진과 비디오를 올리고 다른 유저들과 공유 할 수 있는 소셜 네트워킹 서비스 이다. 인스타그램 유저들은 정보를 공개/비공개 설정을 할 수 있다. 퍼블릭 으로 공유된 모든것들은 다른 유저에게 보여질 수 있고, private 하게 공유된 컨텐츠는 특정 사람들만 볼 수 있다. 인스타그램은 Facebook, Twitter, Flickr, Tumblr와 같은 다른 sns와 공유하기가 가능하다. 2. 시스템 요구사항 우리는 인스타그램 디자인을 하기위해 다음과 같은 요구사항을 충족시켜야 한다. Functional Requirements 사용자는 사진을 업로드/다운로드 하고 볼 수 있어야 한다. 사용자는 사진/비디오 제목을 검색할 수 있어야 한다. 사용자는 다른 사용자를..
educative 의 시스템 디자인 인터뷰 가이드를 번역한 글 이다. 1. 문제 이해 및 설계 범위 확정 질의를 통해 요구사항을 파악한다. 디자인 질문은 정답이 없다. 최종 산출물을 선명히 도출해내기 위한 질문에 공을 많이 들이면 인터뷰를 성공적으로 진행할 가능성이 높아진다. 따라서 질의를 통해 면접관이 제시한(?) 시스템이 어떤 점에 포커싱 하고 있는지를 명확히 해야한다. tweet like system 아래와 같은 질문을 할 수 있다. 사용자가 트윗을 포스팅 하고 다른 사람을 follow 할 수 있나요? 사용자의 타임라인을 생성하고 표시 해 줘야 하나요? 트윗에 사진과 비디오가 포함 되어 있나요? 백엔드만 개발? 프론트엔드 까지? 유저가 트윗을 검색 할 수 있나요? 인기 있는 토픽을 표시해 줘야 하나..
- Total
- Today
- Yesterday