在 perl 中关闭 AutoCommit 的情况下调用 SELECT 语句时,SQLite 是否执行磁盘活动?

2023-12-31

我在磁盘文件中创建了一个新的 SQLite 数据库,并使用以下命令关闭了 AutoCommit:

my $dsn      = "dbi:SQLite:dbname=folder/path/file.db";
my $user     = "";
my $password = "";
my $dbh = DBI->connect($dsn, $user, $password,{AutoCommit => 0});

#… Doing some processing on the database (Creating tables/Inserting rows/Updating fields)

#… Many query SELECT statements here
    # My question here: Does SQLite read data from memory or disk each time a SELECT statement is performed.

查询数据时(使用SELECT SQL语句),SQLite是从磁盘文件还是内存中读取数据? SQLite 是否执行任何磁盘活动(其性能低于内存 RAM 活动)?


旁注:

这个问题的答案将帮助指导我选择是否先将数据库从磁盘文件加载到内存,然后从中处理和查询数据,最后完成后保存回磁盘文件 https://stackoverflow.com/questions/53304184/,或仅使用关闭自动提交解决方案的其他选项。

Note:我创建的数据库不会变得太大,所以我不担心数据库填满内存的问题。

如果 SQLite 每次调用 SELECT 查询语句时都从磁盘读取数据,那么与我在我的文章中提到的将 DB 复制到内存解决方案相比,这将导致巨大的性能滞后。上一个问题 https://stackoverflow.com/questions/53304184.


有用的答案即将到来:
性能测试 https://gist.github.com/schwern/4cd618e7233aa71324dd84d878e31048 by Schwern https://stackoverflow.com/users/14660/schwern(提及here https://stackoverflow.com/questions/53304184/how-to-save-in-memory-sqlite-database-to-a-file-in-perl/53304435#comment93491144_53304435)表明,对内存数据库或磁盘数据库进行操作和查询会产生相同的性能。


一般来说,是的,如果您的数据库位于磁盘上,那么将访问磁盘以执行任何操作SELECT除非必要的数据缓冲在内存中的某个地方(很可能在 SQLite 本身或磁盘缓存中)。

但请注意这句话,“如果您的数据库位于磁盘上SQLite 还支持内存数据库。如果您有足够的备用 RAM 来保存数据库,并且您要对其执行足够的操作以弥补首先将其复制到内存中的成本,那么可能值得研究。

除了问题中的设置之外,您可以:

my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
$dbh->sqlite_backup_from_file('folder/path/file.db');

然后,您将拥有一个内存数据库,它是原始磁盘数据库的副本,您可以SELECT无需接触磁盘即可随心所欲(除非磁盘太大并且部分内存被换出)。

如果您对内存数据库进行任何更改,您还需要

$dbh->sqlite_backup_to_file('folder/path/file.db');

before $dbh如果您想将这些更改保存回磁盘,请断开连接。

请记住,只有在您更改内存副本的同时没有其他进程可能对磁盘副本进行更改时,这才是安全的,因为两个进程都不会知道对另一个进程所做的更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 perl 中关闭 AutoCommit 的情况下调用 SELECT 语句时,SQLite 是否执行磁盘活动? 的相关文章

  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式
  • 为什么我的 Apache2::Log 输出用 \n 替换换行符?

    我在 apache2 mod perl 下设置了多个虚拟主机 我用的是ErrorLog指令为每个虚拟主机获取单独的错误日志 仅当我使用 Apache2 Log 时 这才按预期工作 警告 只会记录到常规错误日志中 这样就可以了 最后 但还存在
  • SQLite + SpatiaLite 问题

    我正在尝试使用 System Data SQLite 提供程序从 C 访问 SpatiaLite 当我尝试加载 SpatiaLite 扩展时 我总是得到 System Data SQLite SQLiteException SQLite e
  • SQLite.Net-PCL 连接未找到数据库

    我一直在尝试创建一个 Windows Phone 我想使用 SQLite 来存储我的数据并学习如何在 Windows Phone 应用程序上使用它 为此 我使用 SQLite Net PCL 但我不断收到文件未找到异常 这是我写的代码 St
  • Android中BaseColumns有什么用

    实现一个类有什么用BaseColumns在安卓中 The BaseColumns http developer android com reference android provider BaseColumns html接口提供了非常常见
  • 如何在 Xamarin.Forms 上使用 System.Data.SQLite Interop.dll?

    每次尝试运行移动应用程序时 我都会遇到以下问题 System DllNotFoundException SQLite Interop dll assembly
  • Perl regex:如何知道匹配数

    我循环遍历一系列正则表达式并将其与文件中的行进行匹配 如下所示 for my regex regexs ref LINE for rawfile regex do do something here next LINE 有没有办法让我知道我
  • 对于大型简单数据库,SQLite 和 DISQLite 有何比较?

    两者有什么区别SQLite http www sqlite org and DISQLite http www yunqa de delphi doku php products sqlite3 index为什么我要选择其中一个而不是另一个
  • SQLite 中的 NOT NULL 列和错误捕获

    我有一个由用户定义的 EditText 填充的数据库 所有编辑文本都不允许有空字段 我知道我可以通过几个简单的 if 语句来检查这一点 if myEditText getText toString equals display error
  • 使用 Visual Studio Code 调试 Perl

    我今天刚开始使用 Perl 并安装了活动Perl https en wikipedia org wiki ActivePerl5 24 1 一切都很顺利 我能够创建我的测试程序testPerl pl与简单的print命令并运行它consol
  • 从具有多行记录的文件中提取数据,将每个范围保存到单独的文件中

    我有一个看起来像这样的文件 TRANSACTION STARTED 020t CARD INSERTED 020tCARD 5845 DATE 01 02 16 TIME 05 45 52 05 46 26 GENAC 1 ARQC EXT
  • Python Sqlite3 获取 Sqlite 连接路径

    给定一个 sqlite3 连接对象 如何检索 sqlite3 文件的文件路径 The Python 连接对象 http github com python cpython blob master Modules sqlite connect
  • 如何在 Perl 中修改 Windows NTFS 权限?

    我在 Windows Server 2003 上使用 ActiveState Perl 我想在 Windows NTFS 分区上创建一个目录 然后授予 Windows NT 安全组对该文件夹的读取访问权限 这在 Perl 中可能吗 我必须使
  • 为什么python+sqlite3特别慢?

    我尝试使用 Python 2 7 4 sqlite3 和 Firefox SQLite Manager 0 8 0 处理对同一数据库的相同请求 在小型数据库 8000 条记录 上 Python 和 Firefox 都运行得很快并且给出了相同
  • 带有预填充 .sqlite 的核心数据 (Swift3)

    目前 我正在对现有 iOS9 应用程序进行 Swift3 iOS10 更新 该应用程序存储了欧洲各地约 10 000 个电动汽车充电点 到目前为止 我总是为应用程序提供预填充的数据库 xcappdata 包中的 sqlite sqlite
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • 在线和离线管理 iPhone 应用程序

    我被困在一个点上 我也在离线管理我的应用程序 第一次我从网络服务获取所有配置文件数据并将其路径存储到 sqlite 中时 我在更新这些数据时遇到问题 例如如果图像发生更改 我应该如何通知我的应用程序 我在 Google 上搜索了它 唯一的解
  • Perl 脚本的 shebang 行应该使用什么?

    哪一个用作 Perl 脚本的 shebang 行更好或更快 perl perl exe fullpath perl perl exe partialpath perl perl exe 并且 当使用 perl 当它在特定系统上运行时 我如何

随机推荐

  • 高图表中的条件标记颜色

    我正在使用 Highcharts 我想用不同的颜色填充折线图中的标记 例如 当变量 a 为 1 时 则用红色填充标记 否则用绿色填充 可以这样做吗 这是代码 http jsfiddle net EnyCJ 1 http jsfiddle n
  • 如何获取mysql中两个日期之间的时间记录?

    我正在制作一个考勤系统 它包含两个日期之间的时间表 例如 晚上 10 00 到凌晨 3 00 如何从 mysql 数据库中检索时间范围在 2 个日期之间的行 我已经知道如何在 mysql 中使用 BETWEEN 我的问题是如何在不知道确切时
  • 如何从时间戳转换为 Mongo ObjectID

    我知道我们可以使用getTimestamp 从 ObjectId 中检索时间戳 但是有什么方法可以从时间戳生成 ObjectId 吗 更具体地说 如果我有一个输入month and year 然后我想将其转换为Mongo对象ID要在数据库中
  • 使用 jquery 遍历表格单元格

    我有一个包含可变数量列的表 我编写了一个函数来迭代每行中的每个单元格以执行以下操作 检查是否存在输入 检索输入的值 将饼图附加到条件 1 计算结果为 true 的任何单元格 这是我的代码 function addPieCharts var
  • Kubernetes minikube 教程后无法停止 10 个容器

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7523fd2c20c7 gcr io google containers k8s dns sidecar am
  • Drupal 7 示例模块,找不到页面,为什么?

    我编写了一个简单的测试模块示例 2个文件 test module test info 并在drupal 7模块中启用了它们 我清除了所有缓存 但当我尝试访问 localhost drupal hello 时 我得到 drupal 404 页
  • 如何在python中实现multiprocessing.Queue的LIFO?

    我了解队列和堆栈之间的区别 但是如果我生成多个进程并在它们之间发送消息multiprocessing Queue如何访问首先放入队列中的最新元素 您可以使用多处理管理器 https docs python org 3 library mul
  • 构建 Clojure 源代码的惯用方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对人们如何构建 Clojure 源代码感兴趣 由于习惯了 Java 我非常熟悉每个源代码文件一个类的范例 将所有数据和方法定义与适当的注释和注
  • Spring Security授权无需认证

    我有一个 Java JSF 2 Spring 3 Hibernate 4 Java EE 应用程序 它使用第三方库来对用户进行身份验证 我将所需的 CA 证书导入到 JVM 中 将第三个库添加到项目中并在 web xml 中进行配置 图书馆
  • 在 mechanize 中禁用 ssl 证书验证

    我是 python 新手 我试图使用 mechanize 访问网站 br mechanize Browser r br open https 172 22 2 2 这给了我以下错误 Traceback most recent call la
  • 如何动态调整静态 UITableViewCell 的大小? [复制]

    这个问题在这里已经有答案了 可能的重复 带有包装标签的静态表格单元格的动态高度 https stackoverflow com questions 11981071 dynamic height for static table cells
  • z-index 不适用于绝对位置

    我打开控制台 chrome firefox 并运行以下几行 body append div style width 100 height 100 background color black div body append div styl
  • 枚举和定义语句之间的区别

    在 C C 中使用 Define 语句和 enum 语句有什么区别 在 C 或 C 中使用它们时有什么区别 例如 什么时候应该使用 enum BUFFER 1234 over define BUFFER 1234 enum定义语法元素 de
  • 为什么引用计数器需要内存顺序限制?

    在示例中boost atomic the unref功能 void intrusive ptr release const X x if x gt refcount fetch sub 1 boost memory order releas
  • Vue html 注释处理

    我正在使用 Vue 生成一些 html 模板 我需要按照下面的代码包含 html 条件注释 var productTemplate new Vue el myApp div div class some content This is so
  • 库的 stylePreprocessorOptions,我应该放在 angular.json 中的哪里?

    我正在尝试使用stylePreprocessorOptions为了包含我的变量文件夹的路径对于图书馆项目像这样 stylePreprocessorOptions includePaths styles variables 然后我用 impo
  • 有没有什么技巧可以创建电视静态的 gif 动画,使其相对较小?

    提前道歉 但这并不是一个真正的 Photoshop 问题 相反 我试图想出一些令人信服的东西 但尽可能地利用 gif 格式的压缩和功能来生成尽可能小的动画文件 一些限制 它至少需要 20 或 30 帧 我尝试过使用更少的帧 因为它们基本上是
  • 工作树清理时出现结帐错误

    请 我收到错误 您对以下文件的本地更改将被签出覆盖 但我的工作树是干净的 有人知道这里发生了什么吗 git status On branch experiment nothing to commit working tree clean g
  • 如何排除 SOLR 查询中的字段

    我有一个 SOLR 查询 它应该获取我存储的所有字段 除了一个字段 说我有20字段 我需要硬编码吗19我想要获取的字段 fl f f f f 或者有没有办法做类似的事情 fl f f 代表字段名称 不幸的是 通过查询字符串删除字段名称的能力
  • 在 perl 中关闭 AutoCommit 的情况下调用 SELECT 语句时,SQLite 是否执行磁盘活动?

    我在磁盘文件中创建了一个新的 SQLite 数据库 并使用以下命令关闭了 AutoCommit my dsn dbi SQLite dbname folder path file db my user my password my dbh