adminslog/dokus/js-ts/better-sqlite3.md

113 lines
4.4 KiB
Markdown
Raw Permalink Normal View History

2025-08-06 19:22:59 +02:00
# 🛠️ better-sqlite3: Die leistungsstarke SQLite-Bibliothek für Node.js
- [🛠️ better-sqlite3: Die leistungsstarke SQLite-Bibliothek für Node.js](#-better-sqlite3-die-leistungsstarke-sqlite-bibliothek-für-nodejs)
- [📜 Entstehung und Motivation](#-entstehung-und-motivation)
- [📦 Installation](#-installation)
- [⚖️ Lizenz](#-lizenz)
- [🌐 Community und Unterstützung](#-community-und-unterstützung)
- [🚀 Features](#-features)
- [🔍 Unterschiede zu `node-sqlite3`](#-unterschiede-zu-node-sqlite3)
- [🧠 Best Practices](#-best-practices)
- [📚 Quellen](#-quellen)
- [🧩 Fazit](#-fazit)
---
**better-sqlite3** ist eine moderne, synchron arbeitende SQLite-Bibliothek für Node.js, die sich durch hohe Performance, einfache Bedienung und umfassende Funktionalität auszeichnet. Sie wurde entwickelt, um die Schwächen anderer SQLite-Bindings wie `node-sqlite3` zu überwinden und bietet eine robuste Alternative für Entwickler, die mit SQLite in JavaScript arbeiten möchten.
---
## 📜 Entstehung und Motivation
Die Bibliothek wurde von [Joshua Wise](https://github.com/JoshuaWise) entwickelt und wird unter dem GitHub-Projekt [WiseLibs/better-sqlite3](https://github.com/WiseLibs/better-sqlite3) gepflegt. Ziel war es, eine SQLite-Binding zu schaffen, die:
- **Synchron arbeitet**, um die Komplexität asynchroner APIs zu vermeiden
- **Sicher und effizient** ist, ohne auf Low-Level-C-APIs zurückgreifen zu müssen
- **Einfach zu bedienen** ist, mit klaren Methoden und verständlicher API
---
## 📦 Installation
```bash
npm install better-sqlite3
```
Erfordert Node.js **v14.21.1 oder höher**. Prebuilt-Binaries sind für LTS-Versionen verfügbar.
---
## ⚖️ Lizenz
Die Bibliothek steht unter der **MIT-Lizenz**, was eine freie Nutzung, Modifikation und Verbreitung erlaubt.
---
## 🌐 Community und Unterstützung
- Über **6.000 GitHub-Stars** und eine aktive Entwicklergemeinschaft
- Unterstützt durch Spenden via GitHub Sponsors, Patreon und PayPal
- Wird von tausenden Entwicklern täglich verwendet
---
## 🚀 Features
- **Schnelle Performance**: Benchmarks zeigen, dass `better-sqlite3` in vielen Fällen deutlich schneller ist als `node-sqlite3`
- **Sichere Transaktionen**
- **Benutzerdefinierte Funktionen und Aggregate**
- **Virtuelle Tabellen und Erweiterungen**
- **64-Bit-Integer-Unterstützung**
- **Worker-Thread-Support für große/langsame Abfragen**
- **Einfache API**: z.B. `db.prepare(...).get()` für eine einzelne Zeile
---
## 🔍 Unterschiede zu `node-sqlite3`
| Merkmal | better-sqlite3 | node-sqlite3 |
|-------------------------------|----------------------------------|----------------------------------|
| API-Typ | Synchron | Asynchron |
| Speicherverwaltung | JavaScript (GC) | Low-Level C |
| Performance | Sehr hoch | Deutlich langsamer in Benchmarks |
| Komplexität | Einfach | Komplexer |
| Erweiterbarkeit | Hoch | Eingeschränkt |
> Benchmarks zeigen z.B. beim Einfügen von 100 Zeilen eine bis zu **15-fache Geschwindigkeitssteigerung** gegenüber `sqlite3`.
---
## 🧠 Best Practices
- **WAL-Modus aktivieren** für bessere Performance:
```js
db.pragma('journal_mode = WAL');
```
- **Transaktionen nutzen** für Bulk-Inserts:
```js
const insert = db.prepare('INSERT INTO users (name) VALUES (?)');
const insertMany = db.transaction((names) => {
for (const name of names) insert.run(name);
});
insertMany(['Alice', 'Bob', 'Charlie']);
```
---
## 📚 Quellen
- [better-sqlite3 auf npm](https://www.npmjs.com/package/better-sqlite3)
- [GitHub-Projektseite](https://github.com/WiseLibs/better-sqlite3)
- [Vergleich mit node-sqlite3 auf npm](https://www.npmjs.com/package/better-sqlite3)
---
## 🧩 Fazit
**better-sqlite3** ist eine exzellente Wahl für Node.js-Projekte, die SQLite nutzen möchten. Die Kombination aus Performance, einfacher API und aktiver Community macht sie zur bevorzugten Lösung gegenüber traditionellen Bindings wie `node-sqlite3`.
Wenn du mit SQLite arbeitest und dir Synchronität, Geschwindigkeit und Klarheit wichtig sind dann ist better-sqlite3 dein Werkzeug der Wahl.