2016-10-21 6 views
0

동일한 SQLite 데이터베이스에 두 개의 Perl 스크립트가 연결되어 있다고 가정합니다. 스크립트 중 하나가 데이터베이스에 쓰고 있고 다른 스크립트도 데이터베이스에 쓰려고하면 두 번째 스크립트 연결이 끊어 집니까? 또는 입력이 일부 SQLite 캐시에 저장되고 SQLite가 첫 번째 스크립트의 쓰기가 완료된 후 결국 쓰기를 커밋 할 것인가?Perl에서 SQLite로 여러 번 쓰기

첫 번째 스크립트의 쓰기 때문에 SQLIte가 db를 잠그기 때문에 두 번째 스크립트 연결이 죽는 것을 원하지 않습니다. 두 스크립트가 모두 데이터베이스에 쓰면 어떻게됩니까?

감사합니다.

답변

1

수 없습니다. SQLite는 동시 쓰기를 허용하지 않습니다. official documentation에서

:

데이터베이스에 기록하려면, 프로세스는 첫 번째 ( 뜨거운 저널가있는 경우 가능성이 완료되지 않은 변경 롤링) 위에서 설명한 같은 공유 잠금을 획득해야합니다. SHARED 잠금을 얻은 후에 RESERVED 잠금은 이어야합니다.

예약 잠금은 프로세스가 향후 어느 시점에 데이터베이스 파일에 쓰기를 계획하고 있지만 현재 파일에서 읽는 것만 제외하면 임을 의미합니다. 여러 SHARED 잠금이 RESERVED 잠금과 공존 할 수 있지만 하나의 RESERVED 잠금 만 활성 일 수 있습니다. RESERVED는 잠겨있는 잠금이있는 동안 의 새 SHARED 잠금을 얻을 수 있다는 점에서 PENDING과 다릅니다.

+0

응용 프로그램이 과부하가 아닌 경우 단순히 'try/catch'로 쓰기를 래핑하고 여러 번 다시 시도하면 모든 문제가 해결됩니다. – choroba

+0

이 의견은 질문에 대한 것 같습니다. 어쨌든 나는 접근을 오히려 동기화하고 싶다. – m0skit0

관련 문제