lundi 8 octobre 2007

Des joies d'être un amateur

Pourquoi, mais pourquoi est-ce que tant de bases de données sont aussi peu adaptées au C++?

Les développeurs de bases de données ne sont pas bêtes: ils se concentrent sur leur segment de marché principal, c'est à dire l'utilisation des bases de données pour le web. L'on a ainsi des frameworks pas mauvais du tout en php, asp, et autres.

Mais côté serveur, et principalement côté C++, c'est particulièrement galère (peut-être que Java fait mieux?). SqlServer, par exemple. Déjà, il faut faire un choix entre OleDb et ODBC. Les différences ne sont pas claires, mais il semblerait que les meilleures performances puissent être obtenues avec le driver natif OleDb. Allons donc pour OleDb, donc!

Et c'est là que tout se corse. Microsoft a bien essayé de faire une bibliothèque vaguement plus haut niveau, la OleDb Templates Library, mais c'est la croix et la bannière d'essayer de faire quelque chose de vaguement hors du commun, par exemple faire du bulk copy (transfert très performant d'un gros paquet de données vers la base, sans passer par une requête SQL). Pour ce genre de tâches, il faut retourner sur les bons vieux appels COM mal documentés. Il m'a fallu par exemple une demie-journée pour me rendre compte que j'utilisais le driver générique OleDb et pas le natif, et que c'est cela qui m'empêchait d'utiliser le bulk copy. Et de toutes façons, en plus d'être mal documentée, certains choix techniques sont tellement étranges qu'il faut parfois tout essayer au hasard, jusqu'à ce que cela marche (ou pas). Par exemple, en fonction des templates choisis, certaines requêtes SQL vont échouer, et l'utilisation des tables temporaires est complexe. Je ne parle même pas des reconnexions, des bindings avec les données, et des procédures stockées qui ne renvoient que l'erreur de la première sous-procédure (si ça foire ensuite, tant pis pour vous!). Et tout ça, parce que le management, dans son extrême sagesse, nous oblige à utiliser une technologie manifestement pas adaptée à nos besoins...

Heureusement, pour AdH, nous avons pu choisir notre base de données. Nous avons choisi Postgres, qui a de plus l'avantage d'avoir des bindings de toute première qualité, et je n'ai pas regretté notre décision une seule seconde!

Aucun commentaire: