PostgreSQL est un système de gestion de bases de données relationnelles (SGBDR) opensource qui suscite un engouement et une adoption de plus en plus large à travers le monde. Classé SGBD de l'année trois fois lors des quatre dernières années par le site DB-Engines, PostgreSQL va bien au-delà du simple moteur de bases de données. Il offre nativement un large ensemble de fonctionnalités auxquelles viennent se greffer plusieurs outils matures, en faisant une véritable plateforme pour tirer le meilleur des données qu'il gère.
Cette présentation proposée par le PGGTIE (Groupe de Travail Inter-Entreprises sur PostgreSQL - https://www.postgresql.fr/entreprises) de l'association PostgreSQL.fr a pour objet de partager des retours d'expériences de grandes entreprises françaises (IGN, SocGen, MAIF, leboncoin) dans la mise en oeuvre de fonctionnalités parfois méconnues et pourtant largement éprouvées (Usage Géographique, NoSQL, JSON, OnPrem/OnCloud, ...).
Un temps d'échange sera privilégié pour permettre aux participants de poser toutes leurs questions sur PostgreSQL aux experts du PGGTIE qui viendront témoigner : adoption, nouveautés, difficultés, succès, etc ...
3. Présentation PGGTIE
Groupe de Travail Inter-Entreprise sur PostgreSQL
https://entreprises.postgresql.fr/
Objectifs :
○ Partage de retours d'expériences, de bonnes pratiques, d'études
○ Contribuer à PostgreSQL
○ Encourager l'adoption et l'utilisation de PostgreSQL, notamment par les éditeurs
Chantiers :
○ Haute disponibilité
○ Migrations
○ Utilisation, supervision, monitoring
○ Promotion, formation...
4. Guide de transition vers PostgreSQL
En Français :
https://www.postgresql.fr/entreprises/guide-de-transition
En Anglais, participez !
https://github.com/postgresql-transition-guide/guide
6. Fonctionnalités
Système de Gestion de Bases de Données Relationnelles
Open-source (licence PostgreSQL) et gratuit (version communautaire)
Porté par une forte communauté => efficacité et sécurité du code, évolution
constante par ajout de fonctionnalités
En moyenne une nouvelle version majeure par an amenant son lot de nouveautés
et d'améliorations (performances)
7. Fonctionnalités
Bases de données relationnelle "classique" (très forte compatibilité avec la norme
SQL)
Utilisation NoSQL (données de type JSON)
Nombreux types de données en standard
Respect des propriétés ACID d'un SGBD
Reconnu pour sa très grande efficacité et sa robustesse
Multiplateformes : Linux, FreeBSD, OpenBSD, Windows, MacOS, etc.
Programmation au plus près des données (fonctions et procédures stockées)
dans différents langages
9. Historique des versions
1995 : première version publique
2005 : portage sous Windows
2010 : réplication streaming
2012 : support natif du JSON
2016 : parallélisation des requêtes, fonctions OLAP
2017 : réplication logique et partitionnement déclaratif
depuis : régulières améliorations de ces grandes fonctionnalités
10. Adoption
À travers le monde :
Apple (OS X Lion)
IMDB
Spotify
ISS
Instagram
Skype...
En France : PGGTIE :
Air France
Société Générale
IGN
MAIF
MétéoFrance
SNCF
Ministère de l'éducation nationale
Gendarmerie nationale
leboncoin...
14. PostGIS : l’extension spatiale de PostgreSQL
● extension de PostgreSQL, permet de représenter l'information spatiale dans
une base de données sous forme de géométries = points (lieux
remarquables), lignes (réseaux, rivières...) et polygones (surfaces),
● représentation en 3 dimensions (bâtiments par exemple)
● grilles de pixels = raster (modèle numérique de terrain, images spatiales
géoréférencées...)
15. PostGIS : l’extension spatiale de PostgreSQL
● extension également libre
● s'appuie sur des bibliothèques libres : GDAL (raster), OGR (vecteur), PROJ
(projections), GEOS (géométries), etc.
● permet les traitements de données spatiales et leur couplage avec les autres
données de la base de données
● facilement visualisable avec des logiciels libres (QGIS, GRASS, ...) ou non
(ArcGIS, MapInfo, ...)
17. PgRouting : le calcul d’itinéraires
● Extension de PostgreSQL / PostGIS pour apporter des fonctions de calculs
d'itinéraires
● Exemples de calculs :
○ trouver l'itinéraire le plus court d'un point A à un point B
○ trouver l'itinéraire le plus rapide entre deux point
○ utilisation de différents algorithmes de calcul
○ calculs d'isochrones...
18. PgPointcloud
● PgPointcloud pour les nuages de points LiDAR
● Stockage en base de données des nuages de points issus de LiDAR aérien et /
ou terrestre (géolocalisés)
● Stockage efficace avec compression, pour limiter la volumétrie et conserver
de bonnes performances des requêtes
● Interaction avec PostGIS pour traiter la donnée spatialisée :
○ évolution du trait de côte
○ suivi des crues (amélioration de la prévision)
○ délimitation du bâti
○ évaluation de la ressource forestière...
23. Les Foreign Data Wrappers
● Mise en œuvre de la norme SQL MED sous PostgreSQL
● Permet de connecter un serveur à une autre source externe de données
● Puis de croiser les données internes et externes depuis PostgreSQL
● En lecture et / ou écriture (dépend des FDW)
● Sources de données de natures diverses:
○ autre base de données PostgreSQL
○ autre SGBD (Oracle, SQL Server, MongoDB, MariaDB, SQLite…)
○ fichiers de données (CSV, Excel, LibreOffice Calc…)
○ sources de données sur Internet (Git, HTML, RSS, Twitter…)
24. ORACLE_FDW
● Développé par Laurenz Albe (PostGIS)
● Permet de se connecter à une base Oracle via le système de table externe
● Exemple d’implémentation Maif :
○ Consolidation de données de multiples bases dans une même base
PostgreSQL (Décisionnel)
○ Récupération de données de référence pour faire des traitements
massifs
○ Outil de migration de données d’Oracle Vers PostgreSQL
25. OGR_FDW
● Développé par Paul Ramsey (PostGIS)
● Supporte un très grand nombre de formats
● Fichiers “plats” :
○ CSV (détection automatique des entêtes)
○ Excel
○ LibreOffice
● Fichiers SIG :
○ shapefiles, GeoJSON, MapInfo...
○ fichiers raster
○ flux WFS (données vecteur par flux HTTP)
● Bases de données et plus :
○ PostgreSQL
○ SQL Server
○ MySQL
○ sources ODBC
○ Elasticsearch...
28. Pourquoi PostgreSQL est apprécié par nos développeurs
● Très bonne documentation (ouverte, accessible et à jour)
● Une grosse communauté
● Beaucoup de fonctionnalités intégrées ou en extension (json, PostGIS, search,
graph, full text search, index vectoriels …)
● L’opportunité de créer ses propres extensions et collation
● Un bon retour des développeurs qui donne envie aux autres de partir sur
cette technologie
29. Exemple de collation spécifique 1/2
Voici un exemple d’utilisation spécifique du moteur postgres : la création d’une collation
DROP TABLE IF EXISTS test;
DROP COLLATION IF EXISTS special;
CREATE COLLATION special (
provider = 'icu',
locale = 'fr_FR.utf8@colStrength=primary;colAlternate=shifted',
deterministic = false
);
CREATE TABLE test (
name text COLLATE special
);
INSERT INTO test VALUES
( 'Éléonore-Œdipe' ),
( 'Eléonore-Œdipe' ),
( 'Eleonore-Œdipe' ),
( 'éléonore-œdipe' ),
( 'eleonore-œdipe' ),
( 'ÉléonoreŒdipe' ),
( 'EléonoreŒdipe' ),
( 'EleonoreŒdipe' ),
( 'éléonoreœdipe' ),
( 'eleonoreœdipe' );
SELECT * FROM test WHERE name = 'eleonoreoedipe';
30. Exemple de collation spécifique 2/2
SELECT * FROM test WHERE name = 'eleonoreoedipe';
Éléonore-Œdipe
Eléonore-Œdipe
Eleonore-Œdipe
éléonore-œdipe
eleonore-œdipe
ÉléonoreŒdipe
EléonoreŒdipe
EleonoreŒdipe
éléonoreœdipe
eleonoreœdipe
33. Traitement de JSON avec PostgreSQL
Base transactionnelle
Base
évènements
Réplication
logique
(seulement
INSERT)
Base JSON
Micro-service Micro-service
Stockage du statut intermédiaire des traitements
Full sans stress sur la base transactionnelle
Compression du topic Kafka possible
34. ● PostgreSQL 12 (AWS RDS)
● Environ 500 Go sur disque
● 3 Champs JSON (stockés en JSONB)
● 4 cores, 8 vCPU, 64 Go RAM
● 9000 iops garantis
● 4,7 Gbps bande I/O garanti
● 10 Gbps réseau global garanti
● 1 worker INSERT (une connexion)
● 10 workers SELECT (10 connexions)
Specs de la base JSON
35. Optimisation
- 10 partitions
- Id (PK)
- horodatage dernière modif
- 3 colonnes JSONB “nullables”
- Colonne id modulus 10 - clé de partition
- Chaque worker lecture travaille sur un modulus - une partition
Résultats :
- CPU a 20%
- I/O a 100%
- Un peu plus de 5 minutes pour tout lire
- EXPLAIN - Le même seqscan de la partition