데이터베이스 기술의 현재와 미래 데이터 모델링 : 서비스 중에서 어떤 데이터 항목을 취급할지를 정리하고 그것을 테이블 관계에 반영하는 것 데이터베이스 제품 측에서의 구현 전략은 '클라이언트 측의 처리가 일체 정지되는 일이 없이 서비스 도중에 정의를 바꿀 수 있다' 라는 방향성과 '본래 테이블 정의조차 하지 않고도 일정 이상의 품질로 동작하도록 하는' 방향성을 지닌 제품이 등장하고 있다. 온라인 상태에서의 정의 변경을 제품에서의 기능으로서 갖추지 못한 현재의 mysql에서는 이것을 어떻게든 처리하기 위한 눈물겨운 노력을 하고 있다. 1. 트리거를 사용하여 변경 내용을 기록하고 나중에 한꺼번에 반영 이 구조를 제대로 작동시키기 위해서는 '잠금을 걸지 않고 SELECT한다' 와 '시작 시점에서 커밋된 데이터를..
스토리지 기술의 변천과 데이터베이스에 끼치는 영향 하드웨어 성능 개선의 역사 랜덤 엑세스 : 인덱스와 실제 데이터는 물리적으로 인접해 있지 않기 때문에 각각 별도로 액세스할 필요가 있다.(두 번) 액세스하려는 그 데이터가 메모리에 있는가, 아니면 디스크에 있는가에 따라 속도 차이가 크다. HDD로의 액세스를 하게되면 엄청 느려 예전에는 데이터를 수평 분할했다.(샤딩) 서버를 여러 대로 나열하여 처리 메모리의 가격 하락과 64비트 OS의 대두 => 한 대당 탑재 가능한 데이터베이스의 크기가 증가 => 많은 사용자 처리 가능 => 데이터베이스의 서버 대수를 크게 줄임 단일 스레드에서 행하는 타입의 작업에 시간이 너무 오래 걸려(마스터는 병렬화된 처리지만 MYSQL 복제는 단일 스레드라서 갱신 처리가 직렬화(..
데이터베이스가 없으면 무엇이 곤란한가 대량의 데이터 중에서 필요한 것을 빨리 반환할 수 없다. 대량의 데이터를 메모리 내에서만으로는 취급할 수 없다. 장애가 발생했을 때 빠른 복구가 어렵다. 병렬성 제어가 어렵다. 데이터 무결성을 보장하는 것은 어렵다. 인덱스로 고속 액세스 실현하기 B+Tree 인덱스 O(log(m)N) B+Tree 인덱스는 Tree 구조로 된 인덱스다. 정상이 root 블록, 최하층이 leaf 블록이며, 그 사이에 branch 블록이 있다. 루트 블록과 브랜치 블록은 검색의 키인 사용자 ID에 대해 해당 블록이 어디에 있는지에 대한 정보를 가지고 있다. 그리고 최하층의 리프 블록은 실제 저장 위치의 정보를 가지고 있다. 루트 -> 브랜치 -> 리프 순으로 도달하여 데이터 얻음 테이블 ..