2010-09-10 16 views
6

He estado jugando con esta idea durante bastante tiempo, pero no he visto ninguna información sobre las personas que lo hacen. Tengo un proyecto de sitio web pequeño donde necesito cargar y modificar 1 objeto. Este objeto es bastante simple, y no debe ser más que unos pocos kb. En lugar de ejecutar un DB para esta pequeña cantidad de datos, ¿por qué no simplemente usar pickle y/o shelve para guardar estos datos y cargarlos? Estoy planeando usar un marco micro web como Bottle o Flask para el proyecto.¿Hay algún problema con la creación de un sitio web con Python Pickle?

¿Hay alguna razón para no usar este método para cargar los datos? Solo cargará el archivo de pickle en el momento en que Apache se inicie, por lo que no creo que se acelere (más rápido que consultar un db).

¡Gracias por cualquier entrada!

+0

¿Por qué usar pickle? ¿Por qué no simple texto plano? ¿Por qué no el código fuente de Python para el objeto? ¿Por qué limitarse a encurtir el objeto? –

+1

¿Hay alguna razón para no usar algo como SQLite? –

+1

@ S.Lott El objeto contiene sub-objetos, con algunos objetos de fecha y hora allí. Podría hacer texto sin formato si es necesario. Hay una página en el sitio para insertar un poco de datos nuevos, por eso no puede estar en la fuente misma. Estoy tratando de mantener el sitio simple, sin DB si no necesito uno. –

Respuesta

3

No hay ninguna razón por la que no se puede implementar la persistencia de objetos a través de los módulos estándar Python pickle o shelve. Solo asegúrate de que tus objetos estén limpios y se puedan cosechar. La escalabilidad puede convertirse en una preocupación si su sitio crece más allá de su alcance actual, pero hasta entonces su idea debería funcionar bien. Si ese día llega, el siguiente paso obvio sería considerar utilizar el excelente SQLite de Python que viene pre-empacado con las versiones más recientes del lenguaje.

+0

Algo así como MongoDB sería una transición más fácil de Pickle de lo que sería SQL. –

+0

Sí, no hay nada de malo en ponerlo en funcionamiento con pickle. Y quién sabe, quizás salmuera será suficiente para su problema. De lo contrario, siempre puede cambiar a una base de datos cuando se convierte en un problema. Mantenlo simple hasta que exija más. –

+0

@David MI he trabajado mucho con SQL antes, entonces o no sería un problema, simplemente elegiría usar MongoDB para obtener más experiencia en NoSQL :) –

3

No escribo una cadena en escabeche a un archivo directamente. Hay demasiados detalles de bajo nivel de los que preocuparse. Consulte Durus, ZODB o this post from FriendFeed para almacenar objetos de Python en MySQL.

No descartes las bases de datos relacionales, sin embargo, te dan un montón de golpes desde el primer momento (incluso para proyectos simples).

+0

Gracias por los enlaces. Si voy a usar cualquier base de datos, va a ser MongoDB. No pensé en el problema del framework que ejecuta múltiples procesos de python y que no tiene acceso al mismo objeto si algo se modifica. Tendría que activar algún tipo de bandera y hacer que cada proceso vuelva a cargar el archivo en escabeche. ¿Cuáles son algunos otros "detalles de bajo nivel de los que preocuparse"? ¡Gracias! –

1

Además de los problemas de simultaneidad que ya conoce, también debe asegurarse de que el archivo esté siempre en un estado coherente. Por ejemplo, si el servidor falla en el medio de escribir el archivo, ¿qué ocurre entonces? Es un caso que necesita considerar e implementar una solución para si sigue esta ruta.

Cuestiones relacionadas