Aller au contenu

Guide de sélection de base de données

Navigation:


go-starter-kit supporte 3 options de base de données pour s'adapter aux besoins de votre projet.

Comparaison rapide

Base de données Idéal pour Complexité Prêt production Temps installation
PostgreSQL Apps production, requêtes complexes Moyen check_circle Oui 2 min (Docker)
MySQL Compatibilité large, hébergement partagé Moyen check_circle Oui 2 min (Docker)
SQLite Prototypage, petites apps, embarqué Faible error Limité 0 min

Comparaison détaillée

PostgreSQL (Par défaut)

Commande:

create-go-starter mon-app
# OU explicitement:
create-go-starter mon-app --database=postgres

Points forts:

  • check Fonctionnalités SQL avancées (JSON, arrays, recherche full-text)
  • check Excellentes performances et fiabilité
  • check Conforme ACID, forte intégrité des données
  • check Idéal pour les requêtes complexes et l'analytique
  • check Communauté active et écosystème riche

Limitations:

  • warning Nécessite Docker pour le développement local
  • warning Légèrement plus gourmand en ressources que MySQL

Quand l'utiliser: - Applications de production avec données complexes - Applications nécessitant des fonctionnalités SQL avancées - Projets nécessitant une forte intégrité des données

Configuration Docker:

# Automatiquement inclus dans docker-compose.yml
docker-compose up -d

Format DSN:

user:password@tcp(host:5432)/dbname?sslmode=disable


MySQL/MariaDB

Commande:

create-go-starter mon-app --database=mysql

Points forts:

  • check Large compatibilité et support d'hébergement
  • check Excellent pour les charges de lecture intensives
  • check Écosystème et outils matures
  • check Facile de trouver des fournisseurs d'hébergement

Limitations:

  • warning Moins de fonctionnalités avancées que PostgreSQL
  • warning Quelques variations entre MySQL et MariaDB

Quand l'utiliser: - Environnements d'hébergement partagé - Applications à forte charge de lecture - Équipes familières avec MySQL - Besoin de large compatibilité d'hébergement

Configuration Docker:

# Automatiquement inclus dans docker-compose.yml
docker-compose up -d

Format DSN:

user:password@tcp(host:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local


SQLite

Commande:

create-go-starter mon-app --database=sqlite

Points forts:

  • check Zéro configuration (pas de serveur nécessaire)
  • check Parfait pour le prototypage rapide
  • check Base de données en fichier unique (sauvegarde/partage facile)
  • check Idéal pour les tests et le développement
  • check Très rapide pour les petits jeux de données

Limitations:

  • warning Écritures concurrentes limitées (verrouille toute la DB)
  • warning Pas de gestion utilisateurs/permissions
  • warning Non adapté pour la production à fort trafic
  • warning Scalabilité limitée

Quand l'utiliser: - Prototypage rapide et MVPs - Applications desktop - Systèmes embarqués - Développement et tests - Production à petite échelle (<100 utilisateurs concurrents)

Pas besoin de Docker:

# Lancez simplement votre app, le fichier SQLite est créé automatiquement
go run ./cmd/main.go
# Crée: ./my_database.db

Format DSN:

./database.db


Matrice de décision

Choisir PostgreSQL si:

  • center_focus_strong Vous hésitez (c'est le choix par défaut pour une bonne raison)
  • center_focus_strong Vous avez besoin de fiabilité niveau production
  • center_focus_strong Vous avez des données relationnelles complexes

Choisir MySQL si:

  • center_focus_strong Vous utilisez un hébergement partagé
  • center_focus_strong Votre équipe connaît bien MySQL
  • center_focus_strong Vous avez des charges de lecture intensives

Choisir SQLite si:

  • center_focus_strong Vous prototypez ou construisez un MVP
  • center_focus_strong Vous voulez zéro infrastructure
  • center_focus_strong Vous avez une petite base d'utilisateurs (<100 concurrents)

Exemples de configuration

PostgreSQL

.env.example:

# Configuration base de données (PostgreSQL)
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=monapp
DB_SSLMODE=disable

MySQL

.env.example:

# Configuration base de données (MySQL)
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=root
DB_NAME=monapp

SQLite

.env.example:

# Configuration base de données (SQLite - embarqué)
DB_NAME=monapp.db


Guide de migration

Voir database-migration.md pour les instructions détaillées de migration entre bases de données.


Considérations de performance

PostgreSQL

  • Idéal pour: Requêtes complexes, transactions ACID, écritures concurrentes
  • Performance écriture: Excellente (architecture MVCC)
  • Performance lecture: Excellente avec indexation appropriée
  • Connection pooling: Recommandé pour la production

MySQL

  • Idéal pour: Charges de lecture intensives, requêtes simples
  • Performance écriture: Bonne (verrouillage au niveau ligne)
  • Performance lecture: Excellente (cache de requêtes)
  • Connection pooling: Recommandé pour la production

SQLite

  • Idéal pour: Scénarios mono-utilisateur, faible concurrence
  • Performance écriture: Limitée (verrouillage au niveau base de données)
  • Performance lecture: Excellente pour petits jeux de données
  • Connection pooling: Non applicable (fichier)

Questions fréquentes

Puis-je changer de base de données plus tard?

Oui, mais cela nécessite de régénérer le projet avec le nouveau flag de base de données et de migrer les données. Voir database-migration.md pour les détails.

Quelle base de données dois-je utiliser pour mon SaaS?

Pour une application SaaS de production, nous recommandons PostgreSQL pour sa fiabilité, conformité ACID et fonctionnalités avancées. MySQL est aussi un bon choix si vous le connaissez mieux.

Puis-je utiliser SQLite en production?

SQLite peut être utilisé pour de la production à petite échelle (<100 utilisateurs concurrents), mais nous recommandons PostgreSQL ou MySQL pour les applications qui prévoient de croître.

Ai-je besoin de Docker?

  • PostgreSQL: Oui (pour le développement local)
  • MySQL: Oui (pour le développement local)
  • SQLite: Non (base de données embarquée)

Qu'en est-il de MongoDB ou NoSQL?

Le support NoSQL (MongoDB) a été considéré mais reporté aux versions futures. L'accent actuel est mis sur les bases de données SQL avec support GORM.


Ressources additionnelles


Dernière mise à jour: 2026-02-09