보급은 이진 직렬화 및 미리 쓰기 기록을 기반으로 메모리 내 개체 모델에 ACID 속성을 제공하는 간단한 기술입니다. 다음과 같이 작동합니다.
- 스냅 샷으로 시작하십시오. 객체 모델을 직렬화하여 파일에 씁니다.
- 저널 파일을 작성하십시오. 객체 모델에 대한 모든 호출에 대해 호출 및 인수를 직렬화하십시오.
- 저널이 너무 커지거나 종료되거나 편리한 경우 체크 포인트를 수행하십시오. 새 스냅 샷을 작성하고 저널을 자릅니다.
- 충돌 또는 전원 히트로부터 롤백 또는 복구하려면 마지막 스냅 샷을로드하고 저널에 기록 된 모든 통화를 다시 실행하십시오.
이 작업을 수행하는 데 필요한 예방 조치는 다음과 같습니다.
- 변경 가능한 객체 참조를 이스케이프 처리하거나 유병률 레이어로 들어 가지 마십시오. 마치 RPC를 수행하는 것처럼 일종의 프록시 또는 OID 체계가 필요합니다. (이것은 ' 세례 문제 ' 라는 별명을 가진 일반적인 초보자 실수 입니다.)
- 호출에서 도달 할 수있는 모든 논리는 완전히 결정적이어야하며 비즈니스 논리를 의미하는 I / O 또는 OS 호출을 수행하지 않아야합니다. 진단 로그에 쓸 수는 있지만 시스템 시간을 얻거나 비동기 대리자를 시작하는 것은 일반적이지 않습니다. 이는 다른 머신이나 다른 시간에 복원 된 경우에도 저널이 동일하게 재생되도록하기위한 것입니다. (대부분의 보급 코드는 트랜잭션 타임 스탬프를 얻기 위해 대체 시간 호출을 제공합니다.)
- 저자 동시성은 저널 해석에 모호성을 도입하므로 금지됩니다.
그 이유는 ...
- 사람들은 적합하지 않았다 프로젝트에 하나를 사용하려고 후에 대한 나쁜 맛을 개발 * 그것을?
- 클라우스 뷔 에스테 펠트의 설득력있는 옹호 는 사람들을 끌었다 ?
- 명령형 프로그래밍 모델을 좋아하는 사람들은 I / O를 계산에서 분리하는 것을 싫어하고 대신 I / O 및 스레딩 호출로 계산을 인터리브하는 것을 선호합니까?
- 유병률 계층은 개념적으로 매우 단순하고 그들이 거주하는 프레임 워크의 특성에 밀접하게 묶여있어 일반적으로 프로젝트에 맞게 사용자 지정되어 너무 외계인 / 비표준 / 위험한가?
- 하지 말아야 할 일을 똑바로 지키기가 너무 어렵다?
- 학교에서 쓰는 법을 배우는 것과 같은 2 계층 데이터베이스 중심 앱이 아닌 무언가에 직면했을 때 초보자의 머리가 폭발하는 것처럼 보입니까? ;)
* RAM의 전체 데이터 세트를 맞는이 , 당신은 작가의 동시성을 필요로하지 않으며, 당신은 데이터웨어 하우스에 임시 쿼리,보고 또는 내보내기를 수행 할 필요가 없습니다. SQLite에 대한 사과와 함께, 유병률은 저장 파일을 개선하는 것이지 Oracle을 대체하지는 않습니다.