查看“Better-sqlite3 性能”的源代码
←
Better-sqlite3 性能
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
在SQLite3数据库中,在某些情况下同时进行读写操作可能会非常慢。由于并发性在Web应用程序中通常非常重要,建议启用[https://www.sqlite.org/wal.html WAL模式]以大大提高整体性能。 <br> <syntaxhighlight lang="js">db.pragma('journal_mode = WAL');</syntaxhighlight> <br> WAL模式有一些需要考虑的缺点: * 涉及附加数据库的事务对于每个单独的数据库是原子的,但对于所有数据库作为一个集合来说不是原子的。 * 在极少数情况下,[https://www.sqlite.org/wal.html WAL文件]可能会遇到“检查点饥饿”(见下文)。 * 有些硬件/系统限制可能会影响一些用户,[https://www.sqlite.org/wal.html 在这里列出]。 <br> 然而,在大多数Web应用程序中,你用这些缺点换取了极快的性能。 <br> == 检查点饥饿 == 检查点饥饿是指SQLite3由于持续对数据库进行并发读取而无法回收[https://www.sqlite.org/wal.html WAL文件]。如果发生这种情况,WAL文件将无限制地增长,导致不可接受的磁盘使用量和性能下降。 <br> 如果你不同时从多个进程或线程访问数据库,你永远不会遇到这个问题。 <br> 如果你确实同时从多个进程或线程访问数据库,只需在WAL文件变得过大时使用[https://www.sqlite.org/pragma.html#pragma_wal_checkpoint <code>wal_checkpoint(RESTART)</code>]语句。 <syntaxhighlight lang="js">setInterval(fs.stat.bind(null, 'foobar.db-wal', (err, stat) => { if (err) { if (err.code !== 'ENOENT') throw err; } else if (stat.size > someUnacceptableSize) { db.pragma('wal_checkpoint(RESTART)'); } }), 5000).unref();</syntaxhighlight> <br> == 关于持久性的说明 == 这个SQLite3分发版使用了<code>SQLITE_DEFAULT_WAL_SYNCHRONOUS=1</code> [https://sqlite.org/compile.html#default_wal_synchronous 编译时选项],这使得处于WAL模式的数据库默认为[https://sqlite.org/pragma.html#pragma_synchronous “NORMAL”同步设置]。这允许应用程序实现极高的性能,但在WAL模式下引入了轻微的[https://en.wikipedia.org/wiki/Durability_(database_systems) 持久性]损失。 <br> 你可以通过运行<code>db.pragma('synchronous = FULL')</code>来覆盖此设置。 <br> <span id="better-sqlite3-安装问题排查"></span> = better-sqlite3 安装问题排查 = 如果你在安装<code>better-sqlite3</code>时遇到问题,请按照以下清单进行检查: <br> <span id="安装最新版本的node.js"></span> == 安装最新版本的Node.js == # 确保你使用的是Node.js v14.21.1或更高版本。 # 如果你使用的是Windows系统,在安装过程中,一定要选择”工具为本地模块”页面上的”自动安装必需工具”选项,并按照其余步骤操作,包括打开管理员PowerShell和安装Visual Studio以及Python。所有步骤_应该_都能顺利进行。 <br> == 安装<code>node-gyp</code>工具链 == # 确保你已经全局安装了[https://github.com/nodejs/node-gyp#installation <code>node-gyp</code>]。 # 确保所有的[https://github.com/nodejs/node-gyp#on-unix <code>node-gyp</code>依赖项已经安装]。在Windows上,你可能需要进行一些手动配置[https://github.com/nodejs/node-gyp#on-windows]。使用<code>npm ls node-gyp</code>来确保你的本地包没有安装一个过时版本的<code>node-gyp</code>,而这个版本被用作全局版本。 <br> == 项目路径中没有特殊字符 == # 确保你的项目路径中没有空格:<code>node-gyp</code>可能无法正确转义空格或特殊字符(如<code>%</code>或<code>$</code>)。 <br> <span id="electron"></span> == Electron == # 如果你在使用[https://github.com/electron/electron Electron],尝试运行[https://www.npmjs.com/package/electron-rebuild <code>electron-rebuild</code>]。 <br> <span id="windows"></span> == Windows == 如果你仍然在Windows上遇到问题并且使用的是较旧版本的Node,请尝试以下步骤: # 安装'''最新'''的Node 14、16、18或19。 # 安装'''最新'''的Visual Studio Community版和桌面开发C++扩展。 # 安装'''最新'''的Python。 # 运行以下命令: <pre>npm config set msvs_version 2019 npm config set msbuild_path "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuildCurrent\Bin\MSBuild.exe"</pre> <ol start="5" style="list-style-type: decimal;"> <li>删除你的<code>node_modules</code>子目录。</li> <li>删除你的<code>$HOME/.node-gyp</code>目录。</li> <li>运行<code>npm install</code>。</li></ol> <br> == 如果以上方法都无效 == 如果这些方法都无法解决你的问题,请浏览[https://github.com/JoshuaWise/better-sqlite3/issues?q=is%3Aissue 先前的问题]或者新开一个问题[https://github.com/JoshuaWise/better-sqlite3/issues/new]。 <br>
返回至“
Better-sqlite3 性能
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息