Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2012, 11h47   #1
Modérateur
 
Avatar de ymoreau
 
Homme Yoann Moreau
Ingénieur en laboratoire de recherche
Inscription : septembre 2005
Messages : 724
Détails du profil
Informations personnelles :
Nom : Homme Yoann Moreau
Âge : 26
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur en laboratoire de recherche
Secteur : Enseignement

Informations forums :
Inscription : septembre 2005
Messages : 724
Points : 1 130
Points : 1 130
Par défaut Programmer une extension de Postgresql, que choisir

Bonjour, je dois programmer des traitements assez complexes (parcourir du XML, travailler sur du texte, avoir des listes et des maps). Certains points du projets ont besoin de performances, tandis que d'autres auraient surtout la priorité sur une facilité à être relus/repris et évoluer.

Pour le moment j'ai travaillé avec pl/pgsql et des scripts ruby clients. J'aimerais avoir des avis sur les différentes possibilités. J'imagine que les extensions C sont les plus performantes, mais on m'a également dit qu'il est assez compliqué d'y gérer les caractères spéciaux, encodages etc. Je ne connais ni le perl ni le python, est-ce qu'il y a une grosse différence de performances par rapport au C, puis au pl/pgsql ? et est-ce que ces langages au sein postgresql sont réduits par rapports à leur version normale ? (surtout pour le XML et les chaînes)
Ça ne me dérangerait pas d'utiliser plusieurs langages pour les différentes procédures, selon le besoin de performance/lisibilité.

Et enfin, est-ce que tout faire en procédure dans postgresql n'est pas trop contraignant par rapport à une appli cliente (qui pourrait être développée en langage objet).

Merci d'avance !
ymoreau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 00h41   #2
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 577
Points : 1 209
Points : 1 209
Bonjour,

pour ce qui est des performances du C face au PL/pgSQL, elles peuvent être assez importantes en fonction de ce que tu fais.

Maintenant, peut-être que tu peux décomposer le travail et faire des petites fonctions "bas niveau" en C et les utiliser dans des fonctions PL/pgSQL pour la lisibilité et les modifications.

Pour ce qui est de la programmation Unicode en C, elle n'est pas liée à PostgreSQL mais au C. Il y a un lien sur stackoverflow assez intéressant sur le sujet: http://stackoverflow.com/questions/5...am-for-unicode.

L'intérêt d'utiliser des procédures stockées vs du code client c'est de centraliser le code métier quand tu as des clients hétérogènes (plusieurs services qui font la même chose ou presque, du code écrit dans différents langages, etc...), de réduire la taille et le nombre de requêtes qui passent du client au sgbd, d'accélérer les traitements (oui, le PL/pgSQL est pré-compilé) vs du SQL classique, d'effectuer du typage et des transactions (même si tout ça peut-être fait via odbc/jdbc), etc...

Bref, je dirais que c'est à choisir au cas par cas. Si les traitements que tu compte faire sont lourds et peuvent être faits hors de la base de données, c'est mieux car c'est souvent plus facile et moins cher de rajouter des machines qui effectuent ce traitement que de dimensionner la base de données pour prendre tout ça dans la g.....

Un dernier point, tu as parlé de travailler sur du texte. Il y a une extension qui peut (ou pas) t'être assez utile là dessus: http://www.postgresql.org/docs/9.0/s...extsearch.html
__________________
Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


Code C :
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(int argc, char **argv) {
 
    printf("So long, and thanks for the fish, Dennis...\n");
    return 0;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 14h51   #3
Modérateur
 
Avatar de ymoreau
 
Homme Yoann Moreau
Ingénieur en laboratoire de recherche
Inscription : septembre 2005
Messages : 724
Détails du profil
Informations personnelles :
Nom : Homme Yoann Moreau
Âge : 26
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur en laboratoire de recherche
Secteur : Enseignement

Informations forums :
Inscription : septembre 2005
Messages : 724
Points : 1 130
Points : 1 130
Merci! J'utilise déjà l'extension textsearch.

Je pensais également utiliser le C pour optimiser les procédures de plus bas niveau et soit le pl/pgsql pour le reste, soit le pl/python si le pg ne permet de faire tout ce dont j'ai besoin. Ce qui sera surement le cas, car j'utilise des listes chaînées, peut être des hashmaps.

C'est vrai que laisser les gros traitements côté client permet de les faire tourner sur d'autres machines, d'un autre côté le gain que l'on a en évitant les connexions et les requêtes client/serveur peut vraiment valoir le coup, au moins pour une partie de mes fonctionnalités.

Merci pour le lien sur la discussion de l'unicode en C !
ymoreau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h08.


 
 
 
 
Partenaires

Hébergement Web