programing

메모리 내 데이터베이스 디스크에 저장

lastcode 2023. 10. 4. 21:58
반응형

메모리 내 데이터베이스 디스크에 저장

저는 c++에서 sqlite를 통해 데이터베이스를 만들었습니다.

DB는 매우 빠른 동작을 위해 (파일 이름 대신 ":memory:" 매개 변수를 사용하여) 메모리에 생성되었습니다.

데이터베이스는 다음 행으로 작성됩니다.

sqlite3* mem_database;
if((SQLITE_OK == sqlite3_open(":memory:", &mem_database)){
    // The db has been correctly created and
    // I can do some stuff with it.
}
sqlite3_close(mem_database);

문제는 인메모리 데이터베이스를 디스크에 쓰는 방법입니다.(물론 c/c++를 통해).

ATTACH 및 DETTACH sqlite 명령어에 대한 내용을 읽었지만 sqlite 대화형 셸(c/c++ 코드가 아닌)에서만 작동할 수 있습니다.

인사드립니다.

인메모리 데이터베이스 로드저장 예제를 확인합니다.

@Nick Dandoulakis의 답변에 의해 게시된 전체 문서를 읽을 충분한 시간이 없다면, 아래 기능(링크에서 이미 언급됨)을 코드에 복사하여 붙여넣기만 하면 됩니다.

int loadOrSaveDb(sqlite3 *pInMemory, const char *zFilename, int isSave) 
{
   int rc;                   /* Function return code */
   sqlite3 *pFile;           /* Database connection opened on zFilename */
   sqlite3_backup *pBackup;  /* Backup object used to copy data */
   sqlite3 *pTo;             /* Database to copy to (pFile or pInMemory) */
   sqlite3 *pFrom;           /* Database to copy from (pFile or pInMemory) */

   rc = sqlite3_open(zFilename, &pFile);
   if (rc == SQLITE_OK) 
   {

      pFrom = (isSave ? pInMemory : pFile);
      pTo = (isSave ? pFile : pInMemory);

      pBackup = sqlite3_backup_init(pTo, "main", pFrom, "main");
      if (pBackup) {
         (void)sqlite3_backup_step(pBackup, -1);
         (void)sqlite3_backup_finish(pBackup);
      }
      rc = sqlite3_errcode(pTo);
   }

   (void)sqlite3_close(pFile);
   return rc;
}

파일 호출에 SQLite DB의 데이터를 저장하려면 다음을 수행해야 합니다.

loadOrSaveDb(db_con, target_file, 1);

어떤.db_con데이터베이스 연결 개체 포인터입니다.target_file대상 파일 주소입니다.

비고: SQLite 데이터베이스 파일을 메모리에 로드하려면 다음을 실행하면 됩니다.

loadOrSaveDb(db_con, target_file, 0);

테이블에 작업을 수행하기 전에 트랜잭션 문을 사용합니다.이를 통해 빠른 핸들링과 롤백도 보장됩니다.이렇게 하면 데이터베이스를 메모리에 직접 구현할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/1437327/saving-to-disk-an-in-memory-database

반응형