올바른 SQL 솔루션에 문제가 있습니다.SQL SUM 식 및 잠금
현재 상황 : 데이터베이스에 은행 거래 (신용 및 직불)가 포함 된 테이블이 있습니다.
- 신용 거래는 posivitive 양 (+)로 서명되고
- 직불 거래와 같은 음수 금액 (-).
DB를 사용하는 응용 프로그램은 다중 사용자 웹 응용 프로그램이므로 트랜잭션 테이블에는 여러 사용자가 참조하는 많은 행이 있습니다. 일부 webapp 작업은 트랜잭션 테이블을 사용하고 직불 거래 (작업 가격)를 사용하여 기록 된 사용자의 실제 잔액을 확인해야합니다.
나는이 메커니즘의 아키텍처에 대해 생각하고 몇 가지 질문이 있습니다
가 거래 신용 및 직불 결제 할 때마다 사용자 요청의 합으로 균형을 계산하는 것이 좋습니다를? db에 비효율적 일 수 있습니다. 아마 어딘가에 스냅 사진을 저장해야합니까?
한 사용자가 신용/직불 거래의 합계로 "잔액"을 확인하고 같은 시간에 다른 사용자가 차변 거래를 저장하면 (데이터가 빠르기 때문에) 데이터 통합을 보장하는 방법은 무엇입니까? 나는 비관적 인 자물쇠에 대해 생각하지만 잠겨 있어야하는 것은 무엇입니까? 나는 (내가 사용하는 데이터베이스) 집계 (SUM)와 잠금 PostgreSQL을에 불가능할 수 있음을 알고있다. "내 영어
죄송합니다, 나는 희망을 내 문제가 이해할 수있다. :
감사합니다. 따라서 트랜잭션을 datetime (주어진 AccountId)별로 정렬 한 다음 마지막 트랜잭션을 가져온 다음 실행 중에 잠급니다 : check-balance 및 다른 트랜잭션 저장? 내 TransactionId 기본 키는 UUID이므로 정렬 할 수 없습니다. Datetime 정밀도는 어떻습니까? 예 : 몇 가지 거래가 동일한 dateTime (DD/MM/YYYY HH : mm : ss.SSS) 일 때 상황이 가능합니까? – user6492999
@ user6492999 1) ** 잠금을 설정해야합니다 **. ** 새 거래를 ** 삽입 할 때 ** 마지막 ** 잔액을 선택했는지 확인하고 싶습니다. 트래픽이 많을 것으로 예상되는 경우 작업을 최적화하고 교착 상태를 피하기 위해 데이터베이스 트랜잭션에 대해 읽어야합니다. – Edu
@ user6492999 2) 정확도는 매우 높다고 생각하지만 두 개의 연속 삽입이 동일한 날짜 시간을 가질 수 있는지 테스트 할지라도 불일치가 발생할 수 있습니다. datetime 정밀도는 데이터베이스 엔진 설명서에서 확인할 수 있습니다. Postgresql의 경우 여기에서 최신 버전 (9.6)을 찾을 수 있습니다. https://www.postgresql.org/docs/9.6/static/datatype-datetime.html – Edu