2010-09-10 18 views
6

Ich habe schon eine Weile mit dieser Idee gespielt, aber habe keine Informationen über Leute gesehen, die es tun. Ich habe ein kleines Website-Projekt, wo ich 1 Objekt laden und ändern muss. Dieses Objekt ist ziemlich einfach und sollte nicht mehr als ein paar KB sein. Anstatt eine Datenbank für diese kleine Datenmenge zu erstellen, warum nicht einfach pickle und/oder shelve verwenden, um diese Daten zu speichern und sie zu laden? Ich plane für das Projekt ein Micro-Web-Framework wie Bottle oder Flask zu verwenden.Ist etwas falsch mit der Erstellung einer Python Pickle powered Website?

Gibt es Gründe, diese Methode nicht zum Laden der Daten zu verwenden? Es wird nur die Pickle-Datei zum Zeitpunkt des Starts von Apache laden, daher glaube ich nicht, dass die Geschwindigkeit beeinflusst wird (schneller als das Abfragen einer Datenbank).

Danke für jede Eingabe!

+0

Warum Essiggurke verwenden? Warum nicht einfacher Klartext? Warum nicht Python-Quellcode für das Objekt? Warum beschränken Sie sich darauf, das Objekt zu beizen? –

+1

Gibt es irgendeinen Grund, etwas wie SQLite nicht zu verwenden? –

+1

@ S.Lott Das Objekt enthält Unterobjekte, in denen sich einige Datetime-Objekte befinden. Ich könnte, wenn nötig, Klartext machen. Es gibt eine Seite auf der Website, um ein paar neue Daten einzufügen, deshalb kann es nicht in der Quelle selbst sein. Ich versuche, die Seite einfach zu halten, keine DB, wenn ich keine brauche. –

Antwort

3

Es gibt keinen Grund, warum Sie keine Objektpersistenz über die Standardmodule Python pickle oder shelve implementieren können. Stellen Sie nur sicher, dass Ihre Objekte sauber und sicher pickbar sind. Die Skalierbarkeit kann zu einem Problem werden, wenn Ihre Website über Ihren derzeitigen Umfang hinaus wächst, aber bis dahin sollte Ihre Idee gut funktionieren. Wenn dieser Tag kommt, wäre der nächste naheliegende Schritt, Pythons exzellentes SQLitemodule zu verwenden, das vorinstalliert ist mit den neuesten Versionen der Sprache.

+0

Etwas wie MongoDB wäre ein leichterer Übergang von Pickle als SQL wäre. –

+0

Ja, es ist nichts falsch daran, es mit Essiggurke in Gang zu bringen. Und wer weiß, vielleicht reicht Essiggurke für Ihr Problem. Wenn nicht, können Sie jederzeit zu einer Datenbank wechseln, wenn es zu einem Problem wird. Halten Sie es einfach, bis es mehr verlangt. –

+0

@David MI habe schon viel mit SQL gearbeitet, also wäre das kein Problem, ich würde einfach MongoDB verwenden, um mehr Erfahrung in NoSQL zu bekommen :) –

3

Ich würde eine gebeizte Zeichenfolge nicht direkt in eine Datei schreiben. Es gibt zu viele Low-Level-Details, über die man sich Gedanken machen muss. Informationen zum Speichern von Python-Objekten in MySQL finden Sie unter Durus, ZODB oder this post from FriendFeed.

Verwerfen Sie keine relationalen Datenbanken, aber sie geben Ihnen eine Menge Knall direkt aus der Box (auch für einfache Projekte).

+0

Danke für die Links. Wenn ich irgendeinen DB benutze, wird es MongoDB sein. Ich habe nicht über das Problem nachgedacht, dass das Framework mehrere Python-Prozesse ausführt und keinen Zugriff auf dasselbe Objekt hat, wenn etwas geändert wird. Es müsste eine Art Flag auslösen und jeder Prozess die eingelegte Datei neu laden? Worum geht es bei anderen "Low-Level-Details"? Vielen Dank! –

1

Zusätzlich zu den Ihnen bereits bekannten Nebenläufigkeitsproblemen müssen Sie auch sicherstellen, dass die Datei immer in einem konsistenten Zustand ist. Zum Beispiel, wenn der Server während des Schreibens der Datei abstürzt, was passiert dann? Es ist ein Fall, den Sie berücksichtigen müssen, wenn Sie diese Route gehen.