pythonsqlite3 memory_python-SQLite性能基准测试-为什么:memory:这么慢...只有磁盘速度的1.5倍?...

本文探讨了使用Python的SQLite3库在内存和磁盘上进行数据库操作的性能差异。作者创建了一个基准测试,生成并加载了大量随机数据,然后在两种数据库上执行随机查询。结果显示,内存数据库的速度仅比磁盘快1.5倍,这低于作者的预期。文章提出了可能的原因,包括表大小、连接或操作系统级别的缓存,以及如何优化内存数据库以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么在sqlite中:memory:这么慢?

我一直在尝试查看通过使用内存中的sqlite与基于磁盘的sqlite是否可以获得任何性能改进。 基本上,我想以启动时间和内存为代价来获得非常快速的查询,这些查询在应用程序过程中不会对磁盘造成影响。

但是,以下基准测试仅能使我提高速度1.5倍。 在这里,我正在生成一百万行随机数据,并将其加载到同一表的基于磁盘和内存的版本中。 然后,我在两个数据库上运行随机查询,返回大小约为300k的集合。 我期望基于内存的版本会更快,但是如上所述,我的速度只有1.5倍。

我尝试了其他几种大小的数据库和查询集。 :memory:的优势似乎随着数据库中行数的增加而上升。 我不确定为什么优势如此之小,尽管我有一些假设:

所使用的表不够大(行)不足以构成:内存:一个巨大的赢家

更多的联接/表将使:memory:优势更加明显

在连接或操作系统级别进行某种缓存,以便以某种方式可以访问以前的结果,从而破坏了基准

我没有看到某种隐藏的磁盘访问(我还没有尝试过lsof,但是我确实关闭了PRAGMA的日志功能)

我在这里做错什么了吗? 为什么:memory:没有产生几乎即时的查询? 这是基准:

==> sqlite_memory_vs_disk_benchmark.py <==

#!/usr/bin/env python

"""Attempt to see whether :memory: offers significant performance benefits.

"""

import os

import time

import sqlite3

import numpy as np

def load_mat(conn,mat):

c = conn.cursor()

#Try to avoid hitting disk, trading safety for speed.</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值