J'ai remarqué qu'une partie importante de mon code (pur Python) concerne les tables. Bien sûr, j'ai class Table
qui supporte la fonctionnalité de base, mais je finis par y ajouter de plus en plus de fonctionnalités, telles que les requêtes, la validation, le tri, l'indexation, etc.Avantages et inconvénients de l'utilisation de sqlite3 par rapport à l'implémentation d'une table personnalisée
Je me demande si c'est une bonne idée d'enlever mon class Table
, et refactoriser le code pour utiliser une base de données relationnelle régulière que je vais instancier en mémoire.
Voilà ma façon de penser à ce jour:
Performance des requêtes et indexation améliorerait mais la communication entre le code Python et le processus de base de données séparée pourrait être moins efficace que entre les fonctions Python. Je suppose que c'est trop frais, donc je devrais aller avec sqlite qui vient avec Python et vit dans le même processus. I espérons cela signifie que c'est un gain de performance pure (au prix d'une définition SQL non standard et de fonctionnalités limitées de sqlite). Avec SQL, j'obtiendrai des fonctionnalités beaucoup plus puissantes que je ne voudrais jamais me coder moi-même. On dirait un avantage évident (même avec sqlite). Je n'aurai pas besoin de déboguer ma propre implémentation de tables, mais les erreurs de débogage dans SQL sont difficiles car je ne peux pas mettre de points d'arrêt ou imprimer facilement l'état intermédiaire. Je ne sais pas comment juger de l'impact global de la fiabilité de mon code et du temps de débogage.
Le code sera plus facile à lire, car au lieu d'appeler mes propres méthodes personnalisées, j'écrirais SQL (tout le monde qui a besoin de maintenir ce code connaît SQL). Cependant, le code Python à traiter avec la base de données pourrait être plus laid et plus complexe que le code qui utilise Python pur
class Table
. Encore une fois, je ne sais pas quel est le meilleur équilibre.
Une correction à ce sujet ou quoi que ce soit d'autre que je devrais penser?
Yup, c'est pourquoi je suppose que sqlite est le seul choix raisonnable pour une base de données en mémoire. Je ne sais pas s'il y a d'autres problèmes de performance; et je ne suis pas sûr si même IPC ne sera pas un problème (ce qui me laisserait envisager des bases de données plus sophistiquées sur sqlite). – max
Je ne voulais pas déboguer sqlite; Je voulais déboguer mon propre code: je pense qu'il est plus facile de voir ce qu'il y a dans la table et de casser des conditions différentes quand j'utilise ma propre 'table Table' que sqlite. En ce qui concerne les auteurs multiples, pourriez-vous préciser ce que vous entendez par là (mon code est bien sûr monothread). – max
@max: Je pense que j'ai mis à jour ma réponse pour répondre à cela ... – derobert