2012-04-06 15 views
1

많은 쓰기가 필요한 앱을 작성 중입니다 (초당 최대 100 개). 나는 또한이 표를 자주 읽으 려합니다. 그러나 필자가 작성하게 될 대다수의 글은 중복 키 인덱스로 인해 실제로 실패 할 것입니다. 이것은 의도 된 것입니다. 실패한 쓰기가 MySQL 테이블 리소스를 소비합니까? 이 나쁜 습관인가?MySQL : 실패하려는 테이블에 많은 쓰기. 나쁜 생각?

+0

필자는 쓰기가 실패하는 이유를 알고 싶습니다. 실제로 저장하려는 내용에 대해 자세히 설명해 줄 수 있습니까? 내 걱정은 모든 인덱스가 독창성 제약을 검사하여 읽기 스레드를 멈추게하는 잠금을 유발할 수 있다는 것입니다. 당신이 떠날 수있는 것,하지만 인덱스가 포함될 때 그것은 아마도 매우 나쁠 것입니다. –

+0

. 나는 점점 더 많은 소스로부터 데이터를 끌어낼 컨텐트 어 그리 게이터를 설계하고 있습니다. 각 데이터 레코드에 대해 URL과 user_id를 갖습니다. 나는 모든 레코드에 중복 URL 및 user_id의 인스턴스를 갖고 싶지는 않지만 잠재적 인 중복이 존재할 많은 인스턴스가있을 것으로 기대합니다. 내 생각은 인덱스의 자연스러운 기능이 나를 위해 필터링 작업을하도록하는 것이 었습니다. 그러나 그것이 내가 읽는 테이블을 잠글 경우 다른 방법을 찾아야 할 것 같다. (또한 중요하다.) – phirschybar

답변

3

제약 조건 위반 여부를 확인하기 위해 테이블 ​​색인을 참조해야하므로 실패한 쓰기는 시스템 리소스를 소비합니다. 악의적 인 실행인지 아닌지는 의도적으로 실패 할 것으로 예상되는 많은 쓰기를 던지기는 다소 이례적인 것처럼 보이지만, 반면에 RDBMS의 작업은 데이터를 저장, 구성 및 검색하는 것입니다. 데이터베이스가 고유 제약 조건을 위반할 수있는 INSERT을 시도하는 것이 더 빠르며 응용 프로그램 코드로 키를 삽입 한 다음 삽입 할 때 먼저 쿼리해야합니다 (여전히에서 제약 조건을 확인해야 함). RDBMS에서).

+1

인덱스에 대한 읽기는 인덱스 에스컬레이션이 인덱스가 생성 될 때까지 기다리는 락 에스컬레이션을 유발할 것인가? 더러운 '이 가장 좋습니다. –

+0

@RussC - 그게 바로 제가 궁금해하는 것입니다. – phirschybar

+0

http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html InnoDB 스토리지 및 잠금 문서는 잠금 에스컬레이션이 사용되지 않는다고 제안하는 것 같습니다. –

1

일반적으로 응용 프로그램에는 무결성 문제를 개념적으로 정의한 비즈니스 규칙 추상화 계층이 있습니다. 그렇다면 대부분의 개발자는 유효성 검사가 발생하기를 기대하고 나서야합니다. OTOH 이것이 일회성 유틸리티이거나 영원히 유일한 개발자라면 작동 할 것입니다. 해킹은 아마도 인덱스 필드를 읽는 것과 비교하여 효율성면에서 큰 향상을 얻지 못할 것이고, 오류 트래핑 및 포팅을 다루는 것은 불쾌한 곳입니다. 여러분을 제외하고는 오류가 아닙니다. (마치 "그것은 기능이 아닌 버그입니다 ...")

관련 문제