約 10MB の SQLite バイナリ ダンプがあります。ダンプされたデータベースにはカタログ データが含まれており、Ruby アプリケーションから非常に高速に (ミリ秒未満) 読み取ることができる必要があります。したがって、データダンプを SQLite のメモリ内の読み取り専用インスタンスにロードしようと考えていましたが、正確にどのようにすればよいのかわかりません。
私は次のようなことを試しましたが、データベースをメモリ内に保持しません。
require 'sqlite3'
require 'fileutils'
# Path to the binary database dump
binary_dump_path = 'path_to_your_binary_dump.db'
# Create a temporary file
temp_db_path = 'temp_database.db'
FileUtils.copy(binary_dump_path, temp_db_path)
# Open the temporary database
db = SQLite3::Database.new(temp_db_path)
# Optionally, set the database to read-only mode
db.execute('PRAGMA query_only = ON')
SQLite3::Backup クラスを使用してソース データベースをメモリにコピーし、それを使用できます。
# Load source DB
src_db = SQLite3::Database.new('source.db')
# Create destination memory DB
mem_db = SQLite3::Database.new(':memory:')
# Copy the source DB into the the memory DB
backup = SQLite3::Backup.new(mem_db, 'main', src_db, 'main')
backup.step(-1)
backup.finish
# Do your work on the memory DB
mem_db.execute('SELECT ...') { |row|
...
}