clsql

2014-12-04 4 views
2

을 사용하여 sqlite3 메모리 내 데이터베이스를 파일에 씁니다. 쓰기/삽입 쿼리 성능을 높이기 위해 ":memory:"clsql:with-database을 사용하여 메모리 내장 데이터베이스를 만들었습니다. 그러나 결국에는 하드 드라이브에 채워진 데이터베이스의 영구 사본을 갖고 싶습니다.clsql

(clsql:with-database (db (":memory:") :database-type :sqlite3) 
    ;;entering db-scheme 
    ;;entering a bunch of data 
    (magically-write-database-to-file db file-path)) 

가 어떻게이를 수 있습니다 : 그것은의 모양은

?

답변

4

, 그냥 보통의 데이터베이스 파일을 사용하고 transactionsdisk synchronization을 해제하도록 구성 : 상당히 쓰기/삽입 속도를 증가

(execute-command "PRAGMA journal_mode = OFF") 
(execute-command "PRAGMA synchronous = OFF") 
+0

. 나는 설명에 대해 궁금 할 것이다. – Sim

+0

'synchronous'는 트랜잭션 완료시 데이터가 디스크에 기록되도록합니다. 실패 또는 중단 된 트랜잭션을 롤백하려면 저널이 필요합니다. 이 옵션이 없으면 데이터베이스 쓰기를 중단하거나 중단하면 데이터베이스가 손상됩니다. –

1

create-view-from-class으로 테이블을 만든 다음 개체에 update-records-from-instance을 호출하면됩니다.

그러나 명시 적 메모리 내 데이터베이스 생성이 실제로 의미가 있는지 여부는 확실하지 않습니다. 먼저 개체 컬렉션을 만든 다음 update-records-from-instance을 사용하여 데이터베이스에 넣을 수 있습니다. CLSQL의 "뷰 클래스"는 실제로 클래스를 저장 /로드하는 방법에 대한 정보가있는 평범한 클래스입니다. 저장하지 않고 개체를 변경하면 계속 진행되는 마법은 없습니다. 데이터베이스 생성이 완료되기 전에 데이터 일관성 걱정하지 않는 경우