The fastest and simplest library for SQLite3 in Node.js.
- Full transaction support
- Geared for performance, efficiency, and safety
- Easy-to-use synchronous API (faster than an asynchronous API... yes, you read that correctly)
- Custom SQL function support
- 64-bit integer support (invisible until you need it)
select 1 row get() |
select 100 rows all() |
select 100 rows iterate() 1-by-1 |
insert 1 row run() |
insert 100 rows in a transaction | |
---|---|---|---|---|---|
better-sqlite3 | 1x | 1x | 1x | 1x | 1x |
sqlite and sqlite3 | 8.4x slower | 3.7x slower | 28.2x slower | 3.6x slower | 6.0x slower |
You can verify these results by running the benchmark yourself. Both npm/sqlite and npm/sqlite3 have nearly identical performance because they both use the same engine.
npm install --save better-sqlite3
If you have trouble installing, check the troubleshooting guide.
var Database = require('better-sqlite3');
var db = new Database('foobar.db', options);
var row = db.prepare('SELECT * FROM users WHERE id=?').get(userId);
console.log(row.firstName, row.lastName, row.email);
Why should I use this instead of node-sqlite3?
node-sqlite3
uses asynchronous APIs for tasks that are either CPU-bound or serialized. That's not only bad design, but it wastes tons of resources. It also causes mutex thrashing which has devastating effects on performance.node-sqlite3
exposes low-level (C language) memory management functions.better-sqlite3
does it the JavaScript way, allowing the garbage collector to worry about memory management.better-sqlite3
is simpler to use, and it provides nice utilities for some operations that are very difficult or impossible innode-sqlite3
.better-sqlite3
is much faster thannode-sqlite3
in most cases, and just as fast in all other cases.