2010-09-10 20 views
6

Je suis en train de jouer avec cette idée depuis un certain temps maintenant, mais je n'ai vu aucune information sur les gens qui le font. J'ai un petit projet de site Web où j'ai besoin de charger et modifier 1 objet. Cet objet est assez simple, et ne devrait pas dépasser quelques kb. Au lieu d'exécuter un DB pour cette petite quantité de données, pourquoi ne pas simplement utiliser pickle et/ou shelve pour enregistrer ces données, et le charger? Je prévois d'utiliser un cadre de micro web comme Bottle ou Flask pour le projet.Y at-il un problème avec la création d'un site Web alimenté par Python Pickle?

Y a-t-il des raisons de ne pas utiliser cette méthode pour charger les données? Il chargera seulement le fichier pickle au moment où Apache démarre, donc je ne pense pas que la vitesse sera affectée (plus rapide que l'interrogation d'un db).

Merci pour toute contribution!

+0

Pourquoi utiliser le cornichon? Pourquoi pas un simple texte brut? Pourquoi pas le code source Python pour l'objet? Pourquoi se limiter à décaper l'objet? –

+1

Y at-il une raison de ne pas utiliser quelque chose comme SQLite? –

+1

@ S.Lott L'objet contient des sous-objets, avec des objets datetime dedans. Je pourrais faire du texte en clair si nécessaire. Il y a une page sur le site pour insérer un peu de nouvelles données, c'est pourquoi il ne peut pas être dans la source elle-même. J'essaie de garder le site simple, pas de base de données si je n'en ai pas besoin. –

Répondre

3

Il n'y a aucune raison pour laquelle vous ne pouvez pas implémenter la persistance d'objet via les modules standard Python pickle ou shelve. Assurez-vous simplement que vos objets sont propres et solidement picklable. L'évolutivité peut devenir une préoccupation si votre site se développe au-delà de votre portée actuelle, mais jusque-là, votre idée devrait fonctionner correctement. Si ce jour arrive, la prochaine étape évidente consistera à utiliser l'excellent SQLitemodule de Python fourni avec les versions récentes du langage.

+0

Quelque chose comme MongoDB serait une transition plus facile de Pickle que SQL serait. –

+0

Oui, il n'y a rien de mal à le faire fonctionner avec du pickle. Et qui sait, peut-être que le cornichon suffira à votre problème. Si ce n'est pas le cas, vous pouvez toujours passer à une base de données lorsque cela devient un problème. Restez simple jusqu'à ce qu'il exige plus. –

+0

@David MI a beaucoup travaillé avec SQL auparavant donc ça ne serait pas un problème, je choisirais juste d'utiliser MongoDB pour avoir plus d'expérience en NoSQL :) –

3

Je n'écrirais pas directement une chaîne décapée dans un fichier. Il y a trop de détails de bas niveau à s'inquiéter. Découvrez Durus, ZODB ou this post from FriendFeed pour stocker des objets Python dans MySQL. Ne pas jeter les bases de données relationnelles, cependant, ils vous donnent beaucoup de bang dès la sortie de la boîte (même pour des projets simples).

+0

Merci pour les liens. Si je vais utiliser n'importe quelle base de données, ça va être MongoDB. Je n'ai pas pensé au problème du framework exécutant plusieurs processus python et n'ayant pas accès au même objet si quelque chose est modifié. Il devrait déclencher une sorte de drapeau et chaque processus recharger le fichier pickled? Quels sont les autres "détails de bas niveau à s'inquiéter"? Merci! –

1

En plus des problèmes de simultanéité dont vous êtes déjà conscient, vous devez également vous assurer que le fichier est toujours dans un état cohérent. Par exemple, si le serveur tombe en panne au milieu de l'écriture du fichier, que se passe-t-il alors? C'est un cas que vous devez envisager et mettre en œuvre une solution pour si vous allez dans cette voie.