2017-12-23 11 views
0

사용자 및 회사의 계정 잔액을 추적하는 간단한 앱을 개발 중입니다. 나는 이것을 위해 특정 틈새 사용을하고있다. (세부 사항을 알 필요가 없다.) 그러나 계정을 항상 최신 상태로 유지하기위한 여러 가지 방법을 고려하기 시작하면서 몇 가지 옵션이 있으며 모범 사례가 무엇인지 궁금합니다.간단한 "계정 잔액"원장 처리를위한 모범 사례

먼저 모든 거래 (크레딧과 차변)를 추적하는 표가 하나 있다고 가정 해 보겠습니다.

더 나은 옵션은 무엇입니까?

  1. 계정 잔액이 필요한 페이지가로드 될 때마다 테이블이 쿼리되고 모든 트랜잭션이 처리되어 최신 잔액을 계산합니다. 매우 리소스 집약적 인 것 같습니다 ...
  2. 모든 기능은이 "트랜잭션"테이블을 추가하지만 생성/업데이트/삭제가 수행 될 때마다 각 사용자의 실행 균형을 업데이트합니다. 그런 다음 필요할 때 거래가 표시 될 수 있지만 잔액 만 99 %가 쿼리됩니다.
  3. 아마도 CRON 작업으로 밤새 그 균형을 확인하기 위해 # 2, 그냥 놓친 게 없는지 확인하기 위해? 또는 이것은 매주 실행할 수 있습니다 (예를 들면).

다른 어떤 것도 제가 요구하는 주요 고려 사항입니까?

도움 주셔서 감사합니다. 가치가있는 부분에 대해서는 PHP/MYSQL을 사용하고 있지만이 질문/응답과 관련이 없어야합니다.

답변

0

차변 또는 대변 금액 외에도 recID 및 현재 잔액이 증가한 거래 테이블을 유지할 수 있습니다. 이 작업을 수행 할 수있는 방법 :

create table myTranstable (recID IDType, customerID integer, acctBalance long, transactionAmount long) 

begin a transaction 

lock customerID 

select max(recID),balance from myTransTable where customerID=thisCustomer 

if(recID==NULL) 
    createAZeroBalanceRecordFor(thisCustomer) 
else 
if(balance + thisTransactionAmount <0) 
    doSomethingAwfulTo(thisCustomer); 
else 
    insert into myTransTable values ($newMaxId,customerID,balance+thisTransactionAmount,thisTransactionAmount) 

unlock CustomerID 

end the transaction 

당신은 전체 테이블을 스캔하거나 의사를위한 cron 작업 등이 죄송 할 필요가 없습니다 이런 식으로, 내가 PHP 또는 어떤 데이터베이스는 가능한 몰라요.

+0

MySQL - 거대한 거래 테이블에서 max (recID)를 찾는 것이 효율적입니까? 사용자 테이블에서 단일 고유 레코드를 가져 와서 잔액을 확보하는 것입니까? – Shackrock