13.1 개요13.1.1 파티션을 사용하는 이유보통 파티션을 사용하는 경우는 다음과 같다.테이블이 너무 커서 인덱스 크기가 물리적인 메모리보다 큰 경우데이터의 주기적인 삭제 작업이 필요한 경우즉, 데이터와 인덱스를 조각화하여 물리적인 메모리를 효율적으로 사용할 수 있게 해준다.또한 테이블의 데이터를 활발하게 사용하는 워킹 셋과 그렇지 않은 부분으로 나눠서 파티션할 수 있다면 상당히 효과적으로 성능을 개선할 수 있다. 파티션을 사용했을 때 대표적인 장점은 다음과 같다.SELECT 와 단일 INSERT 의 빠른 처리 가능데이터의 물리적 저장소 분리이력 데이터 효율적인 처리MySQL 에서는 다음의 2가지가 불가능하다.파티션 단위 인덱스 생성파티션 별 인덱스를 다르게 갖기 13.1.2 MySQL 파티션의 내부 ..
11.1 쿼리 작성과 연관된 시스템 변수 11.1.1 SQL 모드 STRICT_ALL_TABLES: 트랜잭션 지원 여부와 무관하게 모든 스토리지 엔진에 대해 엄격한 모드 STRICT_TRANS_TABLES: InnoDB 같은 트랜잭션 지원 스토리지 엔진에만 엄격한 모드 엄격한 모드 MySQL 에서는 INSERT 나 UPDATE 문장으로 데이터를 변경하는 경우, 컬럼의 타입과 저장되는 값의 타입이 다를 때 자동으로 타입 변경을 수행한다. 이때 적절한 타입 변환이 어렵거나 컬럼에 저장될 값이 없거나, 컬럼의 최대 길이를 초과하는 경우 INSERT나 UPDATE 를 계속 실행할지 아니면 에러를 발생시킬지 결정한다. 엄격한 모드일 경우 에러를 발생시킨다. ANSI_QUOTES: MySQL 에서 홀따옴표로 문자열..
9.3 고급 최적화 MySQL 서버의 옵티마이저가 실행계획 수립 시 통계 정보와 옵티마이저 옵션을 결합하여 최적의 실행 계획을 수립한다. 옵티마이저 옵션은 크게 조인관련 옵션, 옵티마이저 스위치 로 구분할 수 있다. 9.3.1 옵티마이저 스위치 옵션 조인이 많이 사용되는 서비스에서는 알아야 하는 부분 위 옵티마이저 스위치 옵션들은 글로벌과 세션별 모두 설정할 수 있는 시스템 변수이다. // MySQL 서버 전체적으로 옵티마이저 스위치 설정 SET GLOBAL optimizer_switch='index_merge=on,index_merge_union=on,...'; // 현재 커넥션의 옵티마이저 스위치만 설정 SET SESSION optimizer_switch='index_merge=on,index_mer..
5.1 트랜잭션 5.1.1 MySQL 에서의 트랜잭션 트랜잭션은 실행하는 쿼리 개수가 중요한 게 아니다. 논리적인 작업 셋 자체가 100% 적용될지 되지 말아야 할지를 보장하는 것이 중요하다. MyISAM : 트랜잭션 지원 X Partial Update 가능 -> 실패에 대한 재처리가 복잡해지고, 테이블 데이터의 정합성 맞추기 어려워짐 InnoDB : 트랜잭션 지원 O 쿼리 중 일부라도 오류가 발생하면 전체를 원 상태로 만든다. -> 실패 처리가 간단함 5.1.2 주의사항 트랜잭션 범위는 최소한으로 설정해야 한다. DBMS 작업이 시작될 때 트랜잭션 시작 IO. Network 통신 작업은 트랜잭션에서 반드시 제외 필요 작업들끼리 트랜잭션으로 묶고, 단순 조회 작업은 트랜잭션이 불필요함. 5.2 MySQL..
구글 드라이브 파일 저장 및 동기화 서비스로, 문서, 사진, 비디오, 기타 파일을 클라우드에 보관할 수 있도록 한다. 컴퓨터, 스마트폰, 태블릿 등 어떤 단말에서도 이용 가능해야 한다. 보관된 파일은 친구, 가족, 동료 들과 손쉽게 공유할 수 있어야 한다. 제공 API 1. 파일 업로드 API 단순 업로드: 파일 크기가 작을 때 사용 이어 올리기: 파일 사이즈가 크고 네트워크 문제로 업로드가 중단될 가능성이 높은 경우 사용 이어 올리기 URL 을 받기 위한 최초 요청 전송 데이터를 업로드하고 업로드 상태 모니터링 업로드에 장애 발생 시 장애 발생시점부터 업로드를 재시작 2. 파일 다운로드 API 3. 파일 갱신 히스토리 API 위 API 모두 사용자 인증을 필요로 하고, HTTPS 프로토콜을 사용해야 한..
주어진 시간에 적절한 기술을 골라 설계를 마치는 것이, 그 기술 각각이 어떻게 동작하는지 상세히 설명하는 것보다 중요하다. 예를 들어 비디오를 저장하기 위해 BLOB 저장소를 쓸 것이라면 그 사실만 언급해도 충분하다. 다른 빅 테크 기업들도 모든 것을 스스로 구축하지는 않는다. 유튜브 시스템을 개략적으로 보면 세 개 컴포넌트로 구성된다. CDN: 비디오는 CDN 에 저장되고, 재생 버튼을 누르면 CDN으로부터 스트리밍이 이루어진다. API 서버: 비디오 스트리밍을 제외한 모든 요청은 API 서버가 처리 피드 추천 비디오 업로드 URL 생성 메타데이터 데이터베이스와 캐시 갱신 사용자 가입 개략적 설계 비디오 업로드 절차 메타데이터 캐시: 비디오의 메타데이터와 사용자 객체는 캐시 원본 저장소: 원본 비디오를..