2011-12-01 3 views
14

mysql의 로그 테이블에 사용할 수있는 최고의 스토리지 엔진은 무엇입니까?로그 테이블을위한 MySQL 스토리지 엔진

id 필드 (ints)에 날짜 필드, varchar에 메시지 레벨, 텍스트 필드에 메시지가있는 경우 테이블에 쌍이 있습니다.

모든 종류의 작업, 사용자 작업, 시스템 이벤트 등을 기록합니다. 빠르게 커질 것으로 예상됩니다.

레코드는 수정되지 않으며 거의 ​​액세스되지 않습니다. 액세스 할 때 날짜 수준 및 ID별로 정렬 가능해야합니다.

재미있는 옵션은 아카이브 엔진입니다. 그것은 모든 기준을 충족 하나 큰 단점을 가지고 있으며, 레코드를 삭제할 수 없을뿐만 아니라 테이블을 제거 할 수도 없습니다. 표를 지우는 유일한 방법은 표를 삭제하고 다시 작성하는 것입니다.

제안 사항?

때문에

답변

23

글쎄, 귀하의 질문에 따라, InnoDB하지만 작업을 수행해야합니다

  1. 그것은 확장 성이다가의 MyISAM보다 훨씬 더
  2. 그것은 당신보다 더 쓰기를해야 할 것 때문에 경우, 행 잠금입니다 그것을 선택, 더 잘 맞는.
  3. 마지막으로, 사용자가 거의 액세스하지 않는다고 했으므로 MyISAM은 선택 쿼리에서 더 좋기 때문에 필요하지 않습니다.

Check this for more information

편집

글쎄, 당신은 다른 엔진에 대해 물어 코멘트한다. 다음은 엔진의 full list입니다. 그중 아카이브에 단점이 있다고 말했듯이 다른 것들은 당신의 요구에 맞지 않습니다. 당신은 당신이 말한대로 데이터를 많이 액세스하지 않는 메모리를 사용하려고하는 경우

  1. 과 표는 것이다 : 그러니까 기본적으로

    InnoDB has been designed for maximum performance when processing large data volumes. 
    Its CPU efficiency is probably not matched by any other disk-based relational database 
    engine. 
    

    : 여기에 MySQL은 웹 사이트에서 인용이다 너무 많이 자라. 이를 위해 많은 RAM이 필요할 것이며, 모든 데이터를 재부팅하면 데이터가 손실됩니다.

  2. MyISAM을 사용하려는 경우 쿼리를 선택하는 테이블 용으로 설계된 것이므로 삽입 및 업데이트보다 자주 발생합니다.
  3. 보관 파일은 선택 사항입니다. Here은 로그 테이블의 MyISAM과 archive를 비교 한 것입니다. I need InnoDB.
  4. Merge, Blackhole, Example 및 기타 엔진에 대해서는 언급하지 않겠습니다. (나는 CSV 엔진에 대한 지식이별로 없지만 내가 읽은 것만 큼 그런 종류의 테이블을위한 적절한 엔진이 아니다.

솔직하게 말하면, 나는 많은 것을 소비했다. 코딩에서 중요한 움직임을 만들기 전의 시간. 나는 어떤 방법이 가장 적절한지를 알기 위해 몇 시간 동안 또는 어쩌면 며칠 동안 연구했다. 나는 연구하는 것이 무엇인지 말해 줄 것이다. 그때 멈추고 커피를 마시고 곧바로 선택을해야합니다. 그러므로 가장 적합한 것을 시도해보십시오. 경험할 수있는 것처럼 자신을 시험하면 더 좋은 방법을 찾을 수 있습니다.나는 페이스 북이 그러한 볼륨을 위해 설계되었다고는 생각하지 않지만, 성장함에 따라 구조를 계속 변경했다. 그게 내가 믿는 것, 현실이 아닐 수도 있습니다 :) 어쨌든, 정보가 당신을 돕길 바랍니다. 아래에서

EDIT 2013

는 MySQL의 스토리지 엔진에 내장에 대한 간단한 설명을 찾을 수 있습니다.

의 MyISAM

이 테이블은 데이터에 대한 빠른 액세스를 제공하는 고급 캐시 및 인덱싱 메커니즘 등의 추가 최적화를 포함한다. MyISAM 스토리지 엔진은 테이블 수준 잠금을 사용하여 동시 작업을 제공합니다. 읽기 성능이 중요 할 때 일반적으로 MyISAM이 선택입니다.

메모리

라고도 힙 테이블은 메모리 테이블은 거의 (예 : 국가 코드, 우편 번호 또는 기타 조회 테이블로) 변경되지 않는 자주 사용되는 데이터의 빠른 retrievel에 이상적입니다. 이름에서 알 수 있듯이 데이터는 메모리에 저장되므로 액세스는 디스크에 저장된 데이터보다 훨씬 빠릅니다. 메모리 사용에 대한 한 가지 중요한 제한 사항은 데이터가 MySQL 세션 중에 유효하다는 것입니다. 데이터가 손상되거나 종료되면 데이터가 손실됩니다. 당신이 외래 키 또는 트랜잭션을 사용 할 때

이노이 스토리지 엔진을 사용해야합니다

한 경우입니다. InnoDB는 행 레벨 잠금을 제공하므로 MyISAM보다 동시 적입니다. 스토리지 엔진은 높은 신뢰성을 제공합니다. 이 스토리지를 사용하려는 또 다른 경우는 읽기보다 쓰기가 많은 경우입니다. 테이블에 데이터를 자주 쓰는 경우 MyISAM보다 더 많은 동시 저장이 가능합니다.

아카이브

는 그것은 압축 포맷으로 대량의 데이터를 저장하기 위해 설계된다. 이 스토리지 엔진의 사용 사례 중 하나는 아카이브 또는 기록 데이터 또는 보안 로그를 저장하는 것입니다. 테이블은 인덱스를 사용하지 않기 때문에 매일 데이터를 검색하고 저장하는 데는 좋은 선택이 아닙니다. 그것은 행 수준의 잠금이고 데이터는 요구 될 때 즉석에서 압축되지 않습니다. 또한, 테이블을 변경할 수 없습니다.

병합

병합은 동일한 컴퓨터에 상주 "병합"파티션 테이블에 사용된다. 큰 테이블을 여러 개의 작은 테이블로 분할하고 병합 테이블을 사용하여 동시에 액세스 할 때 가장 큰 이점은 속도입니다. 검색 및 정렬은 테이블에 데이터가 적기 때문에 더 빨리 실행됩니다.

+0

선택 사항이 MyISAM과 InnoDB 사이라면 선택이 쉽습니다. 다른 스토리지 엔진은 어떻습니까? InnoDB가 가장 적합합니까? – applechief

+0

@chaft 나는 대답을 편집 했으니 까, 그것을 보아라 :) –

+0

고마워,이 브리핑 내 하루를 저장 :) – Sal00m

관련 문제