查看“Better-sqlite3”的源代码
←
Better-sqlite3
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
Node.js中最快的、最简单的SQLite3库。 * 完整的事务支持 * 高性能、效率和安全性 * 易于使用的同步API ''(比异步API更好的并发性…是的,你正确地读到了这一点)'' * 支持用户自定义函数、聚合、虚拟表和扩展 * 64位整数 ''(直到你需要它们才可见)'' * 工作线程支持 ''(用于大型/慢速查询)'' <br> == 其他库的比较 == {| class="wikitable" |- ! ! select 1 row <code>get()</code> ! select 100 rows <code>all()</code> ! select 100 rows <code>iterate()</code> 1-by-1 ! insert 1 row <code>run()</code> ! insert 100 rows in a transaction |- | better-sqlite3 | 1x | 1x | 1x | 1x | 1x |- | [https://www.npmjs.com/package/sqlite sqlite] and [https://www.npmjs.com/package/sqlite3 sqlite3] | 11.7x slower | 2.9x较慢 | 24.4x较慢 | 2.8x较慢 | 15.6x较慢 |} <br> == 安装 == <syntaxhighlight lang="bash">npm install better-sqlite3</syntaxhighlight> <blockquote>你必须使用Node.js v14.21.1或更高版本。预构建的二进制文件可用于[https://nodejs.org/en/about/releases/ LTS版本]。 </blockquote> <br> == 用法 == <syntaxhighlight lang="js">const db = require('better-sqlite3')('foobar.db', options); const row = db.prepare('SELECT * FROM users WHERE id = ?').get(userId); console.log(row.firstName, row.lastName, row.email);</syntaxhighlight> <br> 虽然不是必需的,但通常建议出于性能原因设置WAL pragma。 <syntaxhighlight lang="js">db.pragma('journal_mode = WAL');</syntaxhighlight> <br> <span id="es6模块表示法"></span> === ES6模块表示法: === <syntaxhighlight lang="js">import Database from 'better-sqlite3'; const db = new Database('foobar.db', options); db.pragma('journal_mode = WAL');</syntaxhighlight> <br> <span id="我为什么应该使用这个而不是node-sqlite3"></span> == 我为什么应该使用这个而不是node-sqlite3? == * <code>node-sqlite3</code>使用CPU-bound或串行化任务的异步API。这不仅是错误的设计,而且浪费了大量资源。它还导致互斥竞争,对性能产生灾难性影响。 * <code>node-sqlite3</code>暴露了低级别的(C语言)内存管理函数。<code>better-sqlite3</code>以JavaScript的方式做这件事,允许垃圾回收器处理内存管理。 * <code>better-sqlite3</code>更简单易用,为某些操作提供了非常困难的或不可能的操作的实用程序。 * <code>better-sqlite3</code>在大多数情况下都比<code>node-sqlite3</code>快得多,在所有其他情况下也是如此。 <span id="这个库何时不适用"></span> === 这个库何时不适用? === 在大多数情况下,如果你试图使用<code>better-sqlite3</code>无法合理完成的事情,那么它可能无法合理地完成SQLite3中的一般事情。例如,如果你执行的查询需要一秒钟才能完成,并且你期望有大量并发用户执行这些查询,那么无论异步性如何都无法拯救你。幸运的是,SQLite3非常非常快。通过适当的索引,我们已经能够实现每秒超过2000个查询,每个查询处理5–50千字节的实际数据。 <br> 如果你有一个性能问题,最可能的原因可能是低效的查询、不正确的索引或缺少WAL模式——而不是<code>better-sqlite3</code>本身。然而,在某些情况下,<code>better-sqlite3</code>可能不适合: * 如果预期有大量的并发读取,每个返回许多兆字节的数据(即视频) * 如果预期有大量的并发写入(即一个社交媒体网站) * 如果数据库的大小接近千兆字节范围 <br> 对于这些情况,你应该可能使用一个完整的RDBMS,如[https://www.postgresql.org/ PostgreSQL]。 <br>
返回至“
Better-sqlite3
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息