Back

Guide Rapide : Configuration de Bun + SQLite

Guide Rapide : Configuration de Bun + SQLite

Besoin d’une base de données rapide et sans dépendances pour votre projet Bun ? La configuration de Bun SQLite ne prend que quelques minutes et vous offre une base de données locale puissante sans dépendances externes ni configurations complexes. Voici tout ce dont vous avez besoin pour démarrer avec bun:sqlite et l’intégrer dans vos projets.

Points Clés

  • Bun inclut un pilote SQLite intégré ne nécessitant aucun package npm
  • L’API synchrone offre des performances élevées pour les bases de données locales
  • Les requêtes préparées offrent à la fois sécurité et rapidité
  • Les transactions garantissent l’intégrité des données pour les opérations en plusieurs étapes

Démarrer avec Bun SQLite

Le module intégré bun:sqlite fournit un pilote SQLite synchrone et haute performance, parfait pour le développement local, les prototypes et les petites applications en production. Aucun package npm requis—il fait déjà partie de Bun.

Connexion Basique à la Base de Données

import { Database } from "bun:sqlite"

// Create or open a database file
const db = new Database("app.db")

// Or use an in-memory database for testing
const memDb = new Database(":memory:")

C’est tout—vous disposez maintenant d’une connexion Bun SQLite fonctionnelle. Le fichier de base de données est créé automatiquement s’il n’existe pas.

Exécuter Vos Premières Requêtes avec bun:sqlite

Création de Tables et Opérations de Base

// Create a table
db.run(`
  CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE
  )
`)

// Insert data using parameters (prevents SQL injection)
const insertUser = db.prepare("INSERT INTO users (name, email) VALUES (?, ?)")
insertUser.run("Alice", "alice@example.com")

// Query data
const getUser = db.prepare("SELECT * FROM users WHERE name = ?")
const user = getUser.get("Alice")
console.log(user) // { id: 1, name: "Alice", email: "alice@example.com" }

// Get all results
const allUsers = db.prepare("SELECT * FROM users").all()

L’API Bun SQLite utilise des requêtes préparées par défaut, rendant vos requêtes à la fois sûres et rapides. La méthode .get() renvoie une seule ligne, tandis que .all() renvoie un tableau de toutes les lignes correspondantes.

Travailler avec les Transactions

Pour les opérations qui doivent réussir ou échouer ensemble, utilisez les transactions :

const insertMany = db.transaction((users) => {
  const stmt = db.prepare("INSERT INTO users (name, email) VALUES (?, ?)")
  for (const user of users) {
    stmt.run(user.name, user.email)
  }
})

// This either inserts all users or none
insertMany([
  { name: "Bob", email: "bob@example.com" },
  { name: "Charlie", email: "charlie@example.com" }
])

Fonctionnalités Avancées de Bun SQLite

Utilisation des Paramètres Nommés

Les paramètres nommés rendent les requêtes complexes plus lisibles :

const query = db.prepare(`
  SELECT * FROM users 
  WHERE name = $name AND email = $email
`)

const result = query.get({
  $name: "Alice",
  $email: "alice@example.com"
})

Gestion des Différents Types de Retour

Bun SQLite offre plusieurs méthodes pour récupérer les données :

const stmt = db.prepare("SELECT * FROM users")

// Get first row as object
const firstUser = stmt.get()

// Get all rows as objects
const allUsers = stmt.all()

// Get values as arrays (useful for data processing)
const values = stmt.values()
// Returns: [[1, "Alice", "alice@example.com"], [2, "Bob", "bob@example.com"]]

// Execute without returning results (for INSERT/UPDATE/DELETE)
stmt.run()

Intégration avec Drizzle ORM

Pour les projets plus importants, combiner bun:sqlite avec Drizzle ORM offre la sécurité des types et une meilleure expérience développeur :

// Install Drizzle
// bun add drizzle-orm drizzle-kit

import { drizzle } from 'drizzle-orm/bun-sqlite'
import { Database } from 'bun:sqlite'

const sqlite = new Database('app.db')
const db = drizzle(sqlite)

// Now use Drizzle's type-safe query builder
const users = await db.select().from(usersTable)

Bonnes Pratiques et Conseils de Performance

Toujours Fermer les Connexions

Bien que Bun SQLite ferme automatiquement les bases de données lors du ramasse-miettes, les fermer explicitement est une bonne pratique :

// When done with the database
db.close()

Utiliser les Requêtes Préparées

Les requêtes préparées dans Bun SQLite sont mises en cache et réutilisées, offrant de meilleures performances pour les requêtes répétées :

// Good: Prepare once, use many times
const stmt = db.prepare("SELECT * FROM users WHERE id = ?")
for (const id of userIds) {
  const user = stmt.get(id)
  // Process user
}

// Less efficient: Creating new statement each time
for (const id of userIds) {
  const user = db.prepare("SELECT * FROM users WHERE id = ?").get(id)
}

Choisir le Bon Mode de Stockage

  • Utilisez des bases de données basées sur fichier (Database("app.db")) pour les données persistantes
  • Utilisez des bases de données en mémoire (Database(":memory:")) pour les tests ou les données temporaires
  • Utilisez le mode lecture seule (Database("data.db", { readonly: true })) pour les jeux de données statiques

Conclusion

Bun SQLite fournit tout ce dont vous avez besoin pour les opérations de base de données locales sans dépendances externes. Que vous construisiez un outil CLI, un prototype d’API ou un petit service en production, le module intégré bun:sqlite offre l’équilibre parfait entre simplicité et performance. Commencez avec l’API synchrone pour les scripts rapides, puis ajoutez Drizzle ORM lorsque vous avez besoin de la sécurité des types et des migrations. Avec seulement quelques lignes de code, vous disposez d’une base de données SQL entièrement fonctionnelle et prête à l’emploi.

FAQ

Bun SQLite utilise le mécanisme de verrouillage par défaut de SQLite qui prend en charge plusieurs lecteurs mais un seul rédacteur à la fois. Pour des écritures concurrentes intensives, envisagez d'utiliser le mode WAL en exécutant db.run('PRAGMA journal_mode = WAL') après l'ouverture de la base de données.

Bun SQLite est généralement 2 à 3 fois plus rapide que les bibliothèques SQLite de Node.js grâce à son implémentation native et son API synchrone. Sa nature intégrée élimine la surcharge JavaScript-vers-natif, le rendant particulièrement efficace pour les opérations de base de données locales.

Bun SQLite hérite des limites de SQLite, prenant en charge des bases de données jusqu'à 281 téraoctets. En pratique, les performances restent excellentes pour les bases de données de moins de 100 Go. Pour des ensembles de données plus volumineux, envisagez d'implémenter une indexation appropriée et d'utiliser les optimisations PRAGMA.

Oui, Bun SQLite est prêt pour la production pour les cas d'usage appropriés comme les applications monoserveur, les applications de bureau et les microservices. Pour les systèmes distribués nécessitant plusieurs nœuds d'écriture, envisagez plutôt PostgreSQL ou MySQL.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay