2013-06-29 2 views
1

내가 살고있는 세상에서 벽에 모든 다트를 던지게하는 솔루션을 구축하고 황소 눈에 타격을 가하는 것이 매우 좋지 않은 솔루션 방법론이라고 희망합니다.INSERT IGNORE 우수 사례를 사용하는 경우는 언제입니까?

그래서 내 질문에, 생산 시스템에서 규칙에 의해 수용 INSERT IGNORE 사용할 때 발생합니까?

는 내가 쓰고 싶은 상황을 가지고 TRIGGER (#17353080 참조)가 발견되지 않는 경우, 다음이 INSERTed이며, 기존 데이터를 검색하는. 제안은 INSERT IGNORE을 사용하고 primary keying 개의 고유 필드를 사용하는 것입니다.

  1. 은 내가
  2. 내가 반복 목표 테이블을 쿼리 마십시오 반복의 INSERT들 실패, 독특한 유지하고 싶은 INSERT IGNORE를 사용하고 primary keying 필드에 의존 마십시오

    그래서, 나는 곤경을 고유하게 유지하려는 필드 값이 존재하는지 확인하려면 INSERT 그렇지 않은 경우 확인 하시겠습니까? 이 질문 이후

는 INSERT 사용 무시하는 규칙에 의해 허용되는 경우 이해하고 싶습니다,이 특정 매체에 물어 너무 퍼지, 그리고 내 특정한 경우에 나의 자신의 판단을 할 수 있습니다.

감사합니다,

매트

메타 :

나는 conventions 때문에 기존의 태그가 설명되어 그것을 가지고 같은 :

어떤 허용 다루는 일반적인 태그 어떤 일을하는 방법. 은 n을 포함 할 수있다. 간격, 코딩, 주석 달기 등이 포함됩니다.

이 유형의 질문을 사용할 수 있습니다.

+0

그러나 이것은 "의견 전용"플래그 지정 규칙에 해당됩니다 ... 개인적으로 이러한 유형의 기능은 절대로 심각한 엔진에 포함되어서는 안됩니다. 삽입 된 데이터의 유효성을 확인하고 그 방법을 무시할 필요가있을 때마다 저장 프로 시저를 사용해야합니다. 이것은 나에게 게으른 프로그래밍처럼 보입니다. 나는 통신 회사 빌링 소프트웨어 회사를 위해 글을 쓰고, 이와 같은 것을 사용하려고 시도한다면, 보이지 않는 데이터 부정확성을 초래할 수 있으므로 내 머리가 도려내 기가 될 것이다. – Trent

+1

나는 이것이 결코 좋은 습관은 아니라고 생각하지만, 이미 잘못되어 있다면 오류/문제를 수정하는 것이 편리 할 수 ​​있습니다. – Wolph

+0

이 질문에는 양적 일 수 있기 때문에이 질문에만 받아 들일 수있는 '의견'에 의한 대답이 있다는 것에 동의하지 않습니다 (질의 대기 시간 [및 그 효과]가 하나의 측정 값이 될 수 있음). 나는 최소한의 데이터 부정확성이 필요한 상황에 처해 있으므로 귀하의 의견을 진심으로 감사드립니다. 당신이 당신의 방법론을 추천하는 이유에 대해 좀 더 이야기 할 수 있습니까? TRIGGER가 프로 시저를 호출해야 함을 의미합니까 (어쨌든 차단됩니다)? INSERT를 수행하는 클라이언트는 효과적인 버퍼링을가집니다. 당신이 올바른 길에 있다고 생각 하듯이 대답으로 게시하십시오. – mbrownnyc

답변

1

논리적으로는 장애 발생시 수행해야 할 작업에 따라 달라집니다.

일괄 삽입을 수행하고 있고 값이 이미 테이블에있는 지 상관하지 않는 경우 (고유 한 경우) INSERT IGNORE이 합리적입니다. 용어에서 알 수 있듯이 은 삽입되지 않은 것을 무시하게되어 기쁘게 생각합니다..

사용자에게 조언하는 등 실패한 인서트로 작업해야하는 경우 별도의 검사를 수행해야합니다.

그러나 가장 중요한 질문은 "왜 테이블에 값이 이미 있습니까?"입니다.

+0

"왜 테이블에 값이 이미 있습니까?" 네트워크 흐름 소프트웨어에서 (소스 주소 + 대상 주소) 쌍을 기록합니다. 쌍이 이전에 발생했는지 여부를 추적하여 발생하지 않은 경우 해당 흐름에 가중치를 부여하려고합니다. 그것은 [argus 소프트웨어 "시스템"] (http://qosient.com/argus/)에 의해 만들어진 플로우 데이터에 의존하여 개발하려고하는 침입 탐지 시스템의 일부입니다. 마지막으로 수정 한 시간을 상태 테이블에 삽입하고 클라이언트와의 마지막 수정 시간을 추적합니다. – mbrownnyc

1

나를 위해,이 "기능"에 대한 경고음은 침묵입니다. 결제 세계에서; 이해에 "유일한"여러 기록을받는 경우; 당신은 그들에 대해 알고 싶습니다. 전기 통신의 경우 스위치가 30-100 열의 레코드를 볼 수 있습니다. 그 중 5 개가 기록을 독특하게 만든다. 그러나, 때때로 이것을 변화 시키십시오.여기서 문제는 WAS가 더 이상 존재하지 않으며이 사실을 알아야합니다.

다른 문제는 다음과 같습니다. 프로덕션 시스템에서 복제본을 무시하는 것에 만족하는 것이 정말로 필요한 이유는 무엇입니까? 아주 최소한; 우리는 일반적으로 데이터 스트림 (들어오는)에서 더 높은 유형의 문제를 제안하기 때문에 검토 할 사람에 대한 중복 레코드를 기록하는 감사 테이블을 갖게됩니다.

성능에 관해서 ... 현대 하드웨어로, 이것은 정말로 질문입니까? 엄청난 업데이트를하는 것은 클라이언트 인터랙티브가 아닐 가능성이 높습니다 (백그라운드 프로세스 일 가능성이 높습니다). 대화 형 클라이언트 인 경우 테이블 파티셔닝, 우선 순위 등과 같은 상황을 처리 할 데이터베이스 서버 디자인 설정이 필요합니다.

이 외에도, INSERT INGORED의 경고는 끔찍한 특징으로 만듭니다.

  • NOT NULL 제약 조건이있는 열에 NULL을 삽입합니다.
  • 분할 된 테이블에 행을 삽입하지만 삽입 한 값은 분할 영역에 매핑되지 않습니다.
나는 확실히 데이터가 안 된 NULL에 온 경우 알고 싶은 것

...

는 다시,이 명령은 "당시 좋은 일"것 같아 - 내가 생각 것입니다 미키 마우스 프로그래밍.