我们需要创建一个临时内存数据库,然后执行各种插入/选择/更新。
乍一看,SQLite满足了我们所有的需求。与内存中SQLite DB的连接可以简单地建立如下:
class SQLiteBase < ActiveRecord::Base
self.abstract_class = true
establish_connection(adapter: 'sqlite3', database: ':memory:')
end不久前,我们开始研究一些性能问题,结果发现我们需要在SQLite表中执行大容量加载(特别是批量插入)数据(请参阅这些基准测试)。
不幸的是,SQLite似乎不支持批量插入。
那么,还有其他基于SQL的轻量级内存数据库,支持批量插入吗?
如果没有这样的-,是否有一种方法可以像内存数据库那样利用重量级数据库,如PostreSQL (MySQL或其他主要参与者)?
如果postresql/mysql不是一种可行的方法,那么还有其他的C级优化的数据结构,上面有一种查询语言吗?(有/没有红宝石装订)。
发布于 2013-01-25 03:19:35
首先,SQLite使用以下方法支持批量插入:
如果您问如何将这些转换成Ruby或Rails -我承认,我不知道,但我想这应该是可能的。
但是,即使SQLite不支持这些方法,对于内存中的数据库来说,这些都不应该是真正重要的--因为如果它确实都在内存中,插入速度不应该真正地取决于您是逐个插入行还是作为一个事务插入。您的速度限制实际上只是原始内存复制带宽。
发布于 2013-01-25 09:57:25
事实证明,SQLite支持3.7.11的批量插入。
https://stackoverflow.com/questions/14508502
复制相似问题