나는 sqlite3을 실험하고있다. 스레드간에 공유되는 데이터의 모든 잠금 및 원 자성을 해결하기 위해 다중 스레드 응용 프로그램에서이 메서드를 사용하려고합니다. 속도를 높이기 위해 그리고 프로그램 실행 사이에 저장된 데이터가 필요 없기 때문에 대부분의 시간에 < 100 rows, 최악의 경우 < 500 행을 포함하는 메모리 내장 데이터베이스를 사용하려고합니다.sqlite가 "메모리 부족"이라고 말하는 이유는 무엇입니까?
저는 libsqlite3 버전 3.7.9-2ubuntu1.1을 사용하여 Ubuntu 12.04 x64에서 실행됩니다.
여기 내 코드의 다음 sqlite3_open 라인
#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char *argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open_v2("file::memory:?cache=shared", &db, SQLITE_OPEN_FULLMUTEX, NULL);
/* This should never ever happen! */
if (rc != SQLITE_OK) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return(1);
}
rc = sqlite3_exec(db, "CREATE TABLE Players (id int, ip varchar(15), x int, y int);", NULL, NULL, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}
, 나는 변화의 톤을 시도하고 나는 두 가지 문제가있다. 나는이 변화를 시도 할 때, 나는 아이러니하게도 "일어나지 말았어야"로 주석 절에 "아웃 메모리의"오류가 발생합니다 :
rc = sqlite3_open_v2("file::memory:?cache=shared", &db, SQLITE_OPEN_FULLMUTEX, NULL);
rc = sqlite3_open_v2(":memory:", &db, SQLITE_OPEN_FULLMUTEX, NULL);
나는이 단순한 라인을 시도하는 경우, 파일을 만들어 문서를 무시 "file :: memory :? cache = shared"라는 디스크에 :
rc = sqlite3_open("file::memory:?cache=shared", &db);
내가 여기서 잘못하고있는 것은 무엇입니까?