2012-10-12 2 views
3

PostgreSQL은 비동기 커밋을 지원합니다. 즉, 데이터베이스가 미리 쓰기 로그 동기화를 완료하지 않은 경우에도 데이터베이스 엔진이 성공을보고하도록 구성 할 수 있습니다.Django PostgreSQL 비동기 커밋

http://www.postgresql.org/docs/8.3/static/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT

이 데이터베이스 충돌의 경우에, 그것은 일관성있는 상태로 유지 것이라는 점을 보장하는 방식으로 일부 쿼리를 실행 사이의 유용한 타협을 제공하지만, 일부 주장 커밋 된 트랜잭션이 나타나는 것처럼 그들은 깔끔하게 취소되었습니다.

분명히 일부 트랜잭션의 경우 커밋이 최종 상태로 유지되는 것이 중요합니다. 따라서 트랜잭션 당 플래그를 구성 할 수 있습니다.

어떻게 장고에서이 기능을 활용할 수 있습니까?

+1

트랜잭션을 시작한 후에는 [.raw ('SET LOCAL synchronous_commit TO OFF;');'] (https://docs.djangoproject.com/en/dev/topics/db/)를 호출 한 것처럼 보입니다. sql /) –

+0

매우 유용합니다. 특정 모델을 저장하면 자동으로 실행되도록 구성 할 수 있습니까? – qdot

답변

3

첫 번째 두 번째 프랭크 노트. 그렇게하는 방법입니다.

그러나 이렇게하면 커밋 할 수있는 각 API에이 기능을 설정하는 것이 좋습니다. 이것은 오류가 발생하기 쉬운 것 같아서 나는 그걸로 엉망이되지 않을 것이고 대신에 트랜잭션을 동일한 트랜잭션으로 일괄 적으로 적용하여 의미있는 범위 내에서 시도 할 것입니다. 나는 당신이 적절하게 단위 테스트를 할 수 있도록 설정 (SHOW synchronous_commit)을 보여주기 위해 모델에 더 많은 메소드를 제안 할 것이다.

다시 세션 설정이기 때문에이 방법으로이 문제를 해결하는 것이 위험하지만, 필요한 예방 조치를 취하는 것이 가능합니다.

+0

실제로 트랜잭션을 일괄 처리하는 것은 어렵습니다. 기본적으로 시스템은 아직 배포되지 않은 로그 데이터를 잡기 위해 설계된 또 다른 로그 분석기 솔루션입니다. 따라서 config 테이블과 분석 테이블에는 엄격한 ACID 보장이 필요하지만 실제 로그 테이블은 깨끗한 재시작 만하면됩니다. 실패한 경우 일부 항목이 손실 될 수 있습니다. 더 많은 항목을 잃어 버리거나 성능이 크게 향상 될 수 있습니다. . 아마도 저는 단지 두 개의 데이터베이스 연결을 대신 사용합니다. 하나는 안전한 모델 용이고 하나는 빠른 스트림 모델 용입니다. – qdot

관련 문제