저와 비슷한 질문을 보았지만 일반적으로 SQL 데이터베이스에 대한 질문입니다. 데이터를 삽입하면 커밋 전에 명령 만 저장되고 RAM에 저장된다고합니다. 커밋 후에 만 RAM이 비워지고 데이터가 데이터베이스에 있습니다.
그러나 Python과 함께 sqlite3를 사용하여 다른 동작을 발견했다고 생각합니다. 나는 스크립트의 맨 끝에 커밋을 남겼습니다. 내 프로그램은 공간이 부족하여 도중에 중단되었지만 RAM이 가득 차서가 아닙니다. 디스크 공간이 꽉 찼다 고 말했고, 내 컴퓨터에서 실제로 꽉 찼다는 것을 확인했으며, 데이터베이스 파일이 상당 부분을 차지하고 있습니다.
이 데이터베이스를 만드는 데 더 많은 디스크 공간이 필요하다는 것을 알고 있지만 문제가되지는 않지만 적어도 구체적으로 sqlite3 및 Python (특정 경우가 중요한 경우)에서 이전에 내 데이터 / 명령에서 실제로 무슨 일이 일어나고 있는지 궁금합니다. 커밋? 즉, 어디에 어떻게 저장됩니까? 데이터베이스마다 다르나요? 끝까지 커밋하지 않고 데이터베이스 작업을 할 때 RAM을 모두 사용하는 것에 대해 걱정해야합니까?
SQLite는 임시 롤백 저널 파일 에 수정되지 않은 데이터 페이지를 복사 하고 변경 사항을 동일한 페이지의 메모리 사본에 적용합니다. 메모리가 문제가 될 정도로 충분히 변경하면 변경 사항이 원래 데이터베이스 로 플러시 됩니다 . 롤백 저널은 불완전한 트랜잭션을 롤백하는 데 사용됩니다.
서로 다른 데이터베이스가 롤백 저널을 처리하는 방법은 데이터베이스 구현에 따라 크게 달라집니다. ACID 호환 데이터베이스는 커밋되지 않은 트랜잭션 데이터를 어딘가에 저장해야 하며 디스크 기반 저널이 확실한 선택입니다.
SQLite 문서에는 트랜잭션을 정확히 구현하는 방법에 대한 철저한 설명이 포함되어 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다