Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Estándar para Serializar datos (https://www.clubdelphi.com/foros/showthread.php?t=77445)

Walterdf 26-01-2012 14:04:54

Estándar para Serializar datos
 
Hola a todos

Antes que nada, gracias desde ya por leer mi consulta.

Utilizo Delphi 6 y Firebird.
Hasta el momento utilizaba clientdataset para manipular datos y guardarlos en un archivo propio de los clientdatasets (.cds) para transportar esta información hacia otras aplicaciones Delphi.

Ahora, los entornos cambiaron y necesito compartir esta informacion pero también desde sistemas linux.
Desarrollé unas pruebas en python en Linux que toma datos de la base, los serializa (cPickle), los comprime y los guarda en un archivo binario. También hice su contrapartida, abre, descomprime, deserializa. La información es texto e imágenes.

El problema es que necesito que ese archivo pueda ser procesado también por una aplicación en Delphi para lo cual necestaría que el método, sobre todo el de serializar/desarializar, sea standard y pueda ser reconocido por otros lenguajes. En este sentido estoy algo perdido y hasta el momento no he encontrado nada.

Podría ejecutar el python desde Delphi, pero digamos que esto es casi inviable ya que las máquinas donde va a correr la aplicación delphi son de clientes y sería complicado instalar python en cada una de ellas.

Mi mayor problema es la serialización/desarialización, necesitaría un método standard, rápido y que maneje los datos en forma binaria para ocupar menos espacio.

Muchas gracias nuevamente

Un abrazo

Walter

Casimiro Notevi 26-01-2012 16:46:33

Cita:

Empezado por Walterdf (Mensaje 423754)
Mi mayor problema es la serialización/desarialización, necesitaría un método standard, rápido y que maneje los datos en forma binaria para ocupar menos espacio.

No tengo claro de a qué te refieres exactamente con serialización/desarialización.

Walterdf 26-01-2012 17:15:07

Casimiro

Tengo entendido que para persistir o transmitir datos y asegurarnos de que la estructura y el contenido de los mismos se mantengan durante el proceso, lo mejor es serializar la información. Por ejemplo, para manejar datos a través de internet se puede utilizar JSON, XML, etc

Gracias por tu atención y cualquier sugerencia es bienvenida.

Casimiro Notevi 26-01-2012 17:32:55

Bien, puedes usar lo que comentas o cualquier otro que te venga bien. En mi caso los envios/recepciones de datos entre sucursales/representantes/etc. las hacemos en formato texto normal, comprimido con clave, obviamente.
Realmente se envian a un servidor ftp y los demás se encargan de comprobar si hay algo para ellos en el ftp y descargarlo, descomprimirlo, instalarlo, etc. todo automáticamente, sin necesidad de que el usuario intervenga.

Walterdf 26-01-2012 17:52:54

El tema es que no trabajo solo texto, si no que también deben viajar imágenes tomadas de un campo BLOB de la base.
Lo que quiero hacer es "imitar" el comportamiento de los archivos que generan los clientdatasets ya que hasta hoy era lo que manejabamos y funcionaba de 10.
La traba es que ahora estos archivos deben ser generados desde una plataforma Linux y leídos por aplicaciones en Delphi en Windows.

Casimiro Notevi 26-01-2012 18:20:08

Entonces creo que no he entendido el problema, todos los servidores de mis clientes tienen instalados linux+firebird.
Puedes guardar las imágenes con un nombre que sea la referencia/código y empaquetarlas juntas para enviarlas, luego en su destino se desempaquetan y se importan a la base de datos destino.

roman 26-01-2012 18:23:15

¿Y cómo empaquetas o qué significa empaquetar la imagen?

// Saludos

Casimiro Notevi 26-01-2012 19:59:24

Con empaquetar me refiero simplemente a almacenar en un .zip

roman 26-01-2012 20:16:29

¡Ah! O sea que tu método consiste en mandar el archivo de texto junto con uno o más zip que contienen los datos binarios. ¿Es así?

Pienso que también podría usar un XML como mencionaba. En el caso de las imágenes, podría codificarlas con base64 o similar para convertirlas en texto y poderlas poner en el xml.

// Saludos

Casimiro Notevi 26-01-2012 21:36:35

Sí, depende de lo que se haya actualizado en la base de datos, pueden ir sólo textos, imágenes o ambos ficheros juntos en un archivo zip.
Cuando se hizo esa opción no estaba muy difundido xml, o mejor dicho, yo no lo conocía :D, de eso hace unos 14 años y es el mismo sistema que he ido implementando en cada nuevo proyecto. Es sencillo, rápìdo, eficaz, seguro... así que para qué cambiarlo :)

marcoszorrilla 26-01-2012 22:02:33

Una conocida máxima en programación dice: "Si funciona no lo arregles."


Un Saludo.

Walterdf 26-01-2012 22:05:56

El problema que tengo es que las imágenes no las quieren en archivos, por eso se extraen de una base de datos y al transmitirlas se vuelven a guardar en otra base.

El problema con xml y json es que agregan notaciones y eso hace crecer considerablemente el tamaño del archivo, a pesar de comprimir antes guardar.

El método que creé en python para probar, comprime y serializa los datos en forma binaria y es muy fácil deserializarlos, desde python obviamente.

De todos modos, probé utilizar xml y efectivamente el tamaño del archivo crece demasiado.

La variante que encontré (y tal vez sea no intentar reinventar la rueda) es utilizar una base de datos intermedia, sqlite. Que soporta campos blobs, es cross-plataform, existen drivers para muchos lenguajes, el archivo de la base es transportable y además no necesita ninguna instalación en el cliente. Por supuesto me cambia bastante el manejo de la aplicación teniendo que agregar componentes y demás, pero bueno, por el momento me parece que voy a demorar menos que seguir intentando reproducir el cds de los clientdatasets.

Si a alguien se le ocurre alguna otra sugerencia, bienvenido sea.

Un abrazo y mil gracias por las sugerencias y comentarios.

roman 27-01-2012 16:38:19

No había pensado en sqlite. Creo que es una excelente opción.

// Saludos

Walterdf 27-01-2012 16:59:40

Gracias Roman, espero que si, aún no lo he probado

Un abrazo


La franja horaria es GMT +2. Ahora son las 17:04:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi