2014-12-05 6 views
2

나는 이벤트의 그룹화 순서를 하나의 원자 적 트랜잭션으로 저주하고있다.산성 상태에서 일련의 이벤트를 원자 상태로 만들기

Map이 산성 상태로 저장되어 있다고 가정하고 Data.Map.alter을 구현한다고 생각해보십시오. 어쩌면 값을 취하여 하나를 반환하는 함수는 변경 로그에 저장할 수 없기 때문에 산성 이벤트 Alter을 정의 할 수는 없습니다. 그러나 이전 값을 조회하기 위해 query st Lookup ...을 호출 한 다음 새 값을 쓰려면 (또는 오래된 값을) update st Insert ...을 호출하는 함수를 작성하면 경쟁 조건이 발생하고 그 사이에 발생한 업데이트 정보가 손상 될 수 있습니다.

https://github.com/acid-state/acid-state/pull/48에서 나는 수동 잠금을 수행하기 위해 여분의 MVar을 사용했지만 더 나은 해결책이 있어야합니다.

아이디어가 있으십니까?

답변

3

저자의 산성 상태는 여기에 있습니다.

해결 방법은 '변경'과 같은 고차 함수를 사용하지 않는 것입니다. 산 상태 (ACID 보증, 원격 코드 실행 등)의 이점은 직렬화 가능 데이터 만 사용하는 비용입니다. 이 제한은 해제 될 것 같지 않습니다.

일반적으로 큰 문제는 아닙니다. 코드를 전문화하십시오. 이렇게하지 않으면 MVar에 상태를 유지하려고 할 수 있습니다.

건배, David.

관련 문제