우리가 고객에게 제공하는 많은 LOB 응용 프로그램은 마케팅/홍보 성격 (경품 행사, 이벤트 등록 등)입니다. 대부분의 응용 프로그램은 매우 간단하지만 데이터베이스에서 매우 까다로운 작업을 수행합니다. 예를 들어 슈퍼 보울 중 방송되는 상업용 광고의 뒷받침으로 "등록"유형 사이트를 상상해보십시오 (예, 몇 가지 있습니다).쓰기가 많은 웹 응용 프로그램의 데이터베이스 디자인
웹 응용 프로그램 코드를 최적화하는 데 매우 능숙했지만 응용 프로그램이 비교적 간단 함에도 불구하고 데이터베이스는 항상 문제가되었습니다. 흐름은 일반적으로 같은 것입니다 : 기록이 많은 경우
새로운 경우 기록을 데이터베이스에
- 읽기,이 모든 데이터는 우리의 응용 프로그램에 필요에 액세스입니다 행하다. 그러나 응용 프로그램의 유일한 목적이므로이 간단한 프로세스를 크게 최적화하는 것이 중요합니다.
이 질문에서 우리는 하나의 서버에 데이터 파일에 대한 RAID 5 디스크 배열과 로그에 대한 RAID 5 배열을 실행합니다. 현재 OS는 Windows 2003 표준 32 비트이고 서버는 4GB의 메모리를 가지고 있습니다. 일부 응용 프로그램은 SQL 2005 표준을 사용하는 반면, 일부 응용 프로그램은 MySQL 5.1을 사용합니다. 저는 입니다. 여기에서는 특정 OS 및 하드웨어 최적화가 가능하지만 소프트웨어 측면에서 먼저 필요를 충족시키기 위해 노력하고 있습니다. 광범위한 프로파일 링은 디스크 IO가 일반적으로 주 병목 인임을 가르쳐 왔습니다.
대부분의 읽기가 고유하고 매우 적은 데이터 (종종 레코드가 존재하는지 여부를 나타내는 비트)를 반환하기 때문에 캐싱이별로 도움이되지 않는다는 것을 알고 있다면, 필자는 실제 데이터베이스에 대한 쓰기 캐시 계층의 일종 인 메모리 내 데이터베이스의 영역. 이것은 대용량 트래픽의 대부분이 본질적으로 산발적이며 몇 시간 동안 지속되지 않는다는 점을 고려할 때 적합합니다. 또한 대부분의 경우 서버 충돌로 인한 몇 분의 데이터 손실 가능성이 있습니다.
- 쿼리 기존 레코드
- 것도, 메모리 DB에 데이터를 쓸 경우의 디스크 DB와 메모리 DB : 가장 단순한 형태에서
, 나는 다음을 수행하는 전형적인 등록 앱을 수정 것 디스크 DB에
- 정기적으로 세척 메모리 DB를 반환
내 질문은입니다 :이 중간 나를 - 내 옵션이 무엇입니까 메리 데이터베이스? 나는 메모리 내 해시 테이블, 데이터 테이블 등을 실험했지만 다른 옵션이나 완전히 다른 접근법에 대한 제안을 찾고있다.
특정 캠페인 전에 카운트를 차별화 할 수있는 레코드 수와 크기의 순서를 정하십시오 (예 : 캠페인 중 추가 레코드 수를 대략적으로 포함) – mjv
일반적인 애플리케이션에서 TV 광고 또는 라디오 방송국과 같은 교통량이 많은 운전자가 현장을 찾은 후 15-30 분에 걸쳐 약 200,000 건 이상의 등록 시도를 볼 수 있습니다. 이것의 대부분은 그 자리 바로 다음에 3-5 분의 기간 내에 오게되며, 따라서 논쟁 이슈가된다. 순수한 볼륨은 문제가 아니며 문제의 동시성입니다. 이러한 성격의 단일 단기 응용 프로그램에 대한 우리의 가장 큰 데이터베이스는 2 개월에 걸쳐 1 천만 개의 레코드에 접근했으며, 대부분의 트래픽은 TV 명소 및 이메일 캠페인에서 발생했습니다. – Chris
또 다른 옵션은 UPSERT 논리를 저장 프로 시저에 캡슐화하여 데이터베이스 트립 (& 관련 오버 헤드)을 줄이는 것입니다. –