none
Serialización de DataTable. 2 millones de registros. RRS feed

  • Pregunta

  • Muy buenas.

    Estoy realizando una aplicación que pasa datos desde cliente a un servicio WCF. La aplicación cliente abre un datatable, lo serializa en memoria y lo pasa al servicio WCF. he pasado grandes cantidades de datos, pero hoy he llegado a una que no tenía prevista... 2 millones de registros. Corresponde a la tabla de Tarifas de precios, que multiplica el número de clientes por los productos que se venden... y son muchos, la verdad.

    No se si existe alguna manera mejor de serializar en memoria, o simplemente me tengo que olvidar de hacerlo así e intentar otra aproximación.

    ¿alguna idea al respecto?

    Os pongo el código, para hacer un poco de bulto ;)

          Dim binaryFormatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
          parseResult.SourceData.RemotingFormat = SerializationFormat.Binary
          Dim memoryStream As New System.IO.MemoryStream
          binaryFormatter.Serialize(memoryStream, parseResult.SourceData)

    El dataTable es parseResult.SourceData

    Muchas gracias!!

    viernes, 28 de enero de 2011 12:14

Respuestas

  • Hola Antonio, la serialización generalmente es un proceso costoso, por lo que te recomiento ante tal cantidad de datos buscar una aproximación diferente, tal vez podrías serializar filtrando cliente por cliente, así puedes cambiar un proceso muy costoso, por varios un poco más livianos que te permitirán un poco más de flexibilidad al ejecutar el proceso.

    Por otro lado, valdría la pena revisar un poco el diseño de la aplicación ya que no es común un proceso que involucre esa cantidad de registros salvo casos muy especiales. Debes intentar pensar de manera jerárquica para que la gran mayoría de tus procesos usen la menor cantidad de datos posibles en un solo proceso.

     

    Cordial saludo,

     


    Mauricio Atanache G. - MCP
    Bogotá - Colombia
    "Bienaventurados los Pesimistas. Por que hacen BACKUPS."
    lunes, 31 de enero de 2011 2:32
  • Hola Mauricio, gracias por tu respuesta.

    La verdad que no tenía previsto tener que enfrentarme a tal cantidad de datos... pero efectivamente este es uno de esos casos especiales en los que no me queda más remedio. El tema está efectivamente en que realizaré particiones del datatable original, posiblemente por número de registros (realizar datatables de 50.000 en 50.000 por ejemplo) para enviar en vez de un gran mensaje, varios más pequeños.

    De esta manera podré enfrentarme a esas cantidades tan grandes... porque de verdad que no me queda otra...

    Lo dicho, gracias por tu ayuda!

    Un saludo, Antonio.

    lunes, 31 de enero de 2011 11:00

Todas las respuestas

  • Hola Antonio, la serialización generalmente es un proceso costoso, por lo que te recomiento ante tal cantidad de datos buscar una aproximación diferente, tal vez podrías serializar filtrando cliente por cliente, así puedes cambiar un proceso muy costoso, por varios un poco más livianos que te permitirán un poco más de flexibilidad al ejecutar el proceso.

    Por otro lado, valdría la pena revisar un poco el diseño de la aplicación ya que no es común un proceso que involucre esa cantidad de registros salvo casos muy especiales. Debes intentar pensar de manera jerárquica para que la gran mayoría de tus procesos usen la menor cantidad de datos posibles en un solo proceso.

     

    Cordial saludo,

     


    Mauricio Atanache G. - MCP
    Bogotá - Colombia
    "Bienaventurados los Pesimistas. Por que hacen BACKUPS."
    lunes, 31 de enero de 2011 2:32
  • Hola Mauricio, gracias por tu respuesta.

    La verdad que no tenía previsto tener que enfrentarme a tal cantidad de datos... pero efectivamente este es uno de esos casos especiales en los que no me queda más remedio. El tema está efectivamente en que realizaré particiones del datatable original, posiblemente por número de registros (realizar datatables de 50.000 en 50.000 por ejemplo) para enviar en vez de un gran mensaje, varios más pequeños.

    De esta manera podré enfrentarme a esas cantidades tan grandes... porque de verdad que no me queda otra...

    Lo dicho, gracias por tu ayuda!

    Un saludo, Antonio.

    lunes, 31 de enero de 2011 11:00