我目前面临的问题是必须经常在一个小型(700兆赫)设备上实时访问一个大而简单的数据集。数据集包含大约400000个从缩写到缩写词的映射,例如从“frgm”到“fragm”。在使用设备时,会频繁地进行读取,且不应超过15-20ms
我的第一次尝试是利用SQLite创建一个简单的数据库,它只包含一个表,其中两个字符串构成一个数据集:
CREATE TABLE WordMappings (key text, word text)
此表只创建一次,尽管可以进行更改,但只有读访问是时间关键的。在
在this guide之后,我的SELECT语句如下所示:
^{pr2}$然而,在一个包含20000个缩写的测试数据库上使用这段代码,我无法以大约60ms的速度获取数据,这太慢了。在
关于如何使用SQLite提高性能有什么建议吗?或者其他方法会产生更有希望的结果吗?在
结果表明,定义主键可以将单个查询的速度提高一个数量级。在
对于一个包含400000个随机创建的条目(10/20个字符长)的测试表,单个查询所用时间不超过5ms,满足要求。在
该表现在创建如下:
使用主键是因为
其他用户建议使用索引,但是,索引不一定是唯一的,而且根据the accept answer to this question,它们不必要地降低更新/插入/删除性能。然而,使用索引也可以提高性能。然而,这一点没有经过原作者的检验,虽然没有经过原作者的检验。在
通过为
key
列创建索引,可以加快对该列的查找:要检查查询是使用索引还是扫描整个表,请使用EXPLAIN QUERY PLAN。在
很久以前,我尝试使用SQLite来处理顺序数据,但它不够快,不能满足我的需要。当时,我正在将它与一个现有的内部二进制格式进行比较,最后我使用了这种格式。在
我没有亲自使用过,但是一个朋友使用PyTables来处理大量的时间序列数据;也许值得研究一下。在
相关问题 更多 >
编程相关推荐