You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQLite二进制转储加载到只读内存SQLite实例?

将SQLite二进制转储加载到Ruby的只读内存数据库

你当前的代码只是复制磁盘文件并打开,并没有把数据加载到内存中。要实现内存中的只读SQLite实例,正确做法是先初始化内存数据库,再从磁盘转储文件导入数据,最后设置只读模式。

实现步骤

  • 创建纯内存SQLite数据库实例
  • 从磁盘转储文件导入所有表数据到内存库
  • 启用只读模式保障性能与数据安全

完整代码示例

require 'sqlite3'

# 磁盘上的SQLite转储文件路径
binary_dump_path = 'path_to_your_binary_dump.db'

# 1. 初始化内存数据库
in_memory_db = SQLite3::Database.new(':memory:')

# 2. 将磁盘数据库数据导入内存
# 附加磁盘数据库到内存实例,批量拷贝所有表数据
in_memory_db.execute("ATTACH DATABASE '#{binary_dump_path}' AS disk_db")
in_memory_db.execute("SELECT name FROM disk_db.sqlite_master WHERE type='table'").each do |row|
  table_name = row[0]
  in_memory_db.execute("CREATE TABLE #{table_name} AS SELECT * FROM disk_db.#{table_name}")
end
in_memory_db.execute("DETACH DATABASE disk_db")

# 3. 设置为只读模式
in_memory_db.execute('PRAGMA query_only = ON')

# 示例:测试快速查询
in_memory_db.execute('SELECT * FROM your_directory_table LIMIT 10') do |row|
  puts row.inspect
end

关键说明

  • 使用:memory:创建的数据库完全驻留RAM,读取速度能满足亚毫秒级需求
  • 通过ATTACH DATABASE+批量表拷贝的方式,比逐行插入效率高得多,适合10MB级别的数据
  • 启用query_only后,数据库会拒绝所有写入操作,既避免数据意外修改,也能进一步提升查询性能

内容的提问来源于stack exchange,提问作者Niels Kristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:17:10