2012-10-28 4 views
0

ALL, 데이터가있는 DB가 있습니다. DB와 통신하는 C++ 응용 프로그램도 있습니다.어느 시나리오가 더 효율적입니까?

어느 시나리오가 더 효율적입니까?

시나리오 1 :

  1. 사용자는 "데이터 편집"버튼을 누르십시오.
  2. 프로그램 DB에서 데이터를 읽고
  3. 사용자 편집 데이터를 편집하고 공격을 위해 그것을 제시
  4. 프로그램은 다음 새로 저장된 데이터를 새로운 개체를 만들고 기존 개체와 비교를하게 버튼 "저장"을 선택합니다.
  5. 프로그램에서 일부 UPDATE 문을 실행합니다.

는 시나리오 2 :

  1. 1-3 단계

    은 동일합니다.
  2. 프로그램은 이전 개체 데이터를 새 데이터로 덮어 씁니다.
  3. 프로그램은 한 트랜잭션에서 DELETE/INSERT 문을 발행합니다.

나는 효율적이고 트랜잭션 소리 2.

+3

나는 옵션 1을 말하려고한다. 그러나 일반적인 대답은 없다. 질문에 많은 변수가있다. 대답을 얻는 유일한 방법은 두 가지 방법을 시도하고 ** 시간을 정하는 것입니다 **. – john

+0

@john, DB 관점에서 이야기하는 거지? C++의 관점은 어떻습니까? 문자열, 정수 및 벡터가 있습니다. – Igor

+1

"더 효율적"이라고하는 것이 무엇을 의미합니까? 빨리? 적은 메모리를 사용합니까? 다른 자원을 덜 사용합니까? 진정으로 더 "효율적"인 것을 알 수있는 유일한 방법은 측정하는 것입니다! 두 가지 방법을 시도하고 중요한 것으로 생각하는 것을 측정하면 확실하게 알 수 있습니다. –

답변

1

그 질문이있는 시나리오에게 말을하는 경향이 있어요. 업데이트를 수행하기 위해 기존 객체를 삭제하는 것은 트랜잭션 적으로 효과가 없습니다. 데이터베이스의 기존 엔티티를 업데이트하는 업데이트가 있습니다. 합성 키를 사용한다면이 방법을 전혀 사용할 수 없습니다.

대부분의 시스템에서 재실행 (데이터베이스에서 요청한 이후 수정하려는 객체가 적어도 수정되었는지 최소한 확인)은 필수입니다.

4 단계는 데이터베이스에서 개체를 다시 읽어 와서 변경되지 않았는지 확인한 다음 업데이트 또는 롤백을 커밋해야합니다.

+0

stackmonster, 사용자는 변경 만 할 수 없으며 일부 데이터를 제거하거나 새로 추가 할 수 있습니다. 그것은 복잡한 거래이고 나는 삭제/삽입으로 안전한쪽에 있기를 원했다. 이것은 "아주 새로운"레코드 생성이 아니며 레코드 제거가 아닙니다. 3 가지 작업을 모두 수행 할 수 있습니다. 그리고 데이터는 대부분 벡터에 저장됩니다. – Igor

+0

두 번째 사용자가 동일한 데이터에 대한 참조를 가지고 있으면 삭제하고 다른 사용자는 다시 업데이트합니다. 하지만 그곳에는 없습니다.단지 복잡한 것으로 보이지 않기 때문에 트랜잭션을 제대로 수행하는 데 걸리는 시간을 줄일 수 있습니다. –

관련 문제