首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轻量级内存数据库

问轻量级内存数据库
EN

Stack Overflow用户
提问于 2013-01-24 18:45:31
回答 2查看 3.4K关注 0票数 0

我们需要创建一个临时内存数据库,然后执行各种插入/选择/更新。

乍一看,SQLite满足了我们所有的需求。与内存中SQLite DB的连接可以简单地建立如下:

代码语言:javascript
复制
class SQLiteBase < ActiveRecord::Base
  self.abstract_class = true

  establish_connection(adapter:  'sqlite3', database: ':memory:')
end

不久前,我们开始研究一些性能问题,结果发现我们需要在SQLite表中执行大容量加载(特别是批量插入)数据(请参阅这些基准测试)。

不幸的是,SQLite似乎不支持批量插入。

那么,还有其他基于SQL的轻量级内存数据库,支持批量插入吗?

如果没有这样的-,是否有一种方法可以像内存数据库那样利用重量级数据库,如PostreSQL (MySQL或其他主要参与者)?

如果postresql/mysql不是一种可行的方法,那么还有其他的C级优化的数据结构,上面有一种查询语言吗?(有/没有红宝石装订)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 03:19:35

首先,SQLite使用以下方法支持批量插入:

  • 取代多值插入的穷人: 插入mytable (a,b,c)选择1 a,2b,'x‘c UNION全部选择2,5,'y’UNION全部选择3,7,'z‘.
  • 真正的多值插入,支持自SQLite 3.7.11: 插入mytable (a,b,c)值(1,2,'x'),(2,5,'y'),(3,7,'z');
  • 使用交易: 开始;插入mytable (a,b,c)值(1,2,'x');插入mytable (a,b,c)值(2,5,'y');插入mytable (a,b,c)值(3,7,'z');提交;

如果您问如何将这些转换成Ruby或Rails -我承认,我不知道,但我想这应该是可能的。

但是,即使SQLite不支持这些方法,对于内存中的数据库来说,这些都不应该是真正重要的--因为如果它确实都在内存中,插入速度不应该真正地取决于您是逐个插入行还是作为一个事务插入。您的速度限制实际上只是原始内存复制带宽。

票数 2
EN

Stack Overflow用户

发布于 2013-01-25 09:57:25

事实证明,SQLite支持3.7.11的批量插入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14508502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档