문제

아주 직설적으로 쓰고 있어요 e-commerce app ~에 asp.net, 저장 프로시저에서 트랜잭션을 사용해야 합니까?

읽기/쓰기 비율은 약 9:1입니다.

도움이 되었습니까?

해결책

많은 사람들이 묻습니다. 거래가 필요합니까?왜 필요한가요?언제 사용하나요?

대답은 간단합니다.아주 타당한 이유가 없는 한(예를 들어 기업 간의 "장기 실행 활동"을 위해 원자 트랜잭션을 사용하지 않음) 항상 이를 사용하십시오.기본값은 항상 yes여야 합니다.의심스럽나요?- 트랜잭션을 사용합니다.

거래가 왜 유익한가요?충돌, 실패, 데이터 일관성, 오류 처리 등을 처리하는 데 도움이 되며 더 간단한 코드를 작성하는 데 도움이 됩니다.그리고 혜택 목록은 시간이 지남에 따라 계속해서 늘어날 것입니다.

다음은 추가 정보입니다. http://blogs.msdn.com/florinlazar/

다른 팁

SQL Server에서는 모든 단일 문 CRUD 작업이 기본적으로 암시적 트랜잭션에 있다는 것을 기억하세요.여러 문이 원자 단위로 작동하도록 하려면 명시적 트랜잭션(BEGIN TRAN)을 켜기만 하면 됩니다.

대답은 상황에 따라 다릅니다.항상 거래 안전이 필요한 것은 아닙니다.때로는 과잉입니다.때로는 그렇지 않습니다.

예를 들어 결제 프로세스를 구현할 때 모든 데이터 등을 수집한 후에만 결제를 마무리하고 싶어한다는 것을 알 수 있습니다.결제 실패에 대해 생각해 보세요. 롤백할 수 있습니다. 이는 거래가 필요한 경우의 예입니다.아니면 사용하는 것이 현명할 수도 있습니다.

새 사용자 계정을 만들 때 거래가 필요합니까?아마도 이유가 무엇이든 10개의 테이블에 걸쳐 있다면 아마도 단일 테이블이라면 그렇지 않을 것입니다.

또한 귀하가 고객을 판매한 대상, 고객이 누구인지, 고객이 요청했는지 등에 따라 달라집니다.하지만 결정을 내리는 것이 당신에게 달려 있다면 현명하게 선택하라고 말하고 싶습니다.

내 결론은 조기 최적화를 피하는 것입니다.애플리케이션을 빌드하고 나중에 필요할 때 다시 돌아가 리팩터링/최적화할 수도 있다는 점을 명심하세요.몇 가지 오픈소스 프로젝트를 살펴보고 그들이 앱의 다양한 부분을 어떻게 구현했는지 확인하고 그로부터 배워보세요.대부분은 거래를 전혀 사용하지 않지만 이를 사용하는 거대한 온라인 상점이 있다는 것을 알 수 있습니다.

물론 상황에 따라 다릅니다.

이는 특정 저장 프로시저가 수행하는 작업에 따라 달라지며 아마도 제안하는 "읽기/쓰기 비율"은 그다지 크지 않을 것입니다.일반적으로 동시에 실행되는 다른 쿼리의 영향을 받을 수 있는 쿼리인 경우 트랜잭션 내에 작업 단위를 포함하는 것을 고려해야 합니다.이것이 비결정론적으로 들린다면, 그렇습니다.어떤 상황에서 특정 작업 단위가 이에 대한 후보로 적합할지 예측하기 어려운 경우가 많습니다.

시작하기 좋은 곳은 정확한 내용을 검토하는 것입니다. 크루드 작업 단위 내에서(이 경우에는 저장 프로시저 내에서) 수행되고 있는지 확인하고, a) 다른 동시 작업의 영향을 받을 수 있는지, b) 다른 작업이 수행 중인 이 작업의 최종 결과에 중요한지(또는 , 심지어 그 반대도 마찬가지입니다).두 가지 모두에 대한 대답이 "예"라면 트랜잭션 내에서 작업 단위를 래핑하는 것을 고려하십시오.

이것이 시사하는 바는 항상 단순히 둘 중 하나를 결정할 수는 없다는 것입니다. 거래 사용 여부s, 오히려 의미가 있을 때 적용해야 합니다.다음에 의해 정의된 속성을 사용합니다. (원자성, 일관성, 격리 및 내구성)은 이러한 경우가 언제인지 결정하는 데 도움이 됩니다.

고려해야 할 또 다른 사항은 일부 상황, 특히 시스템이 많은 작업을 연속적으로 빠르게 수행해야 하는 경우(예: 대용량 트랜잭션 처리 애플리케이션) 트랜잭션의 상대적 성능 비용을 평가해야 할 수도 있다는 것입니다.작업 단위의 크기에 따라 트랜잭션의 커밋(또는 롤백)은 리소스 비용이 많이 들 수 있으며, 시스템 성능에 불필요하게 또는 최소한 제한적인 이점만 가지고 부정적인 영향을 미칠 수 있습니다.

불행하게도 이것은 정확하게 대답하기 쉬운 질문이 아닙니다."때에 따라 다르지."

다음과 같은 경우에 사용하세요:

  1. 테스트하고 잡아야 할 몇 가지 오류가 있으며, 일반적으로 트랜잭션 내에서 롤업할 수 있도록 나가서 작업(검색, 값 테스트 등)을 수행하는 경우를 제외하고는 포착되지 않습니다. 전체 작업을 취소합니다.
  2. 어떤 종류의 다단계 작업이라도 실패할 경우 논리적으로 그룹으로 롤백되어야 합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top