Pregunta Manera preferida (o recomendada) para almacenar grandes cantidades de configuraciones de simulación, valores de ejecución y resultados finales


Estoy trabajando con algún simulador de red. Después de hacer algunas extensiones, necesito hacer muchas simulaciones y pruebas diferentes. Necesito grabar:

  • Configuraciones de escenarios de simulación
  • valores de algunos parámetros (por ejemplo, tamaños de búfer, calidades de señal, posición) por dispositivos por unidad de tiempo t
  • Resultados finales calculados a partir de los valores registrados.

Se necesitan segundos datos para realizar alguna visualización después de que se realizó la simulación (animación simple, mostrando algunas estadísticas a lo largo del tiempo).

Estoy usando Python con matplotlib, etc., para el procesamiento posterior de los datos y para escribir una aplicación adecuada (ahora estoy considerando pyQt o Django, pero este no es el tema de la pregunta). Ahora me pregunto cuál sería la mejor manera de almacenar esta información.

Mi primera suposición fue usar archivos XML, pero puede ser una sobrecarga de la sintaxis XML (es decir, los archivos pueden crecer hasta tamaños muy grandes, especialmente para la segunda parte del tipo de datos). Así que intenté diseñar una base de datos ... Pero esto también me parece que no es la forma correcta ... ¿Tal vez una combinación de ambas?

He tratado de encontrar algunas pistas en Google, pero no encontré nada especial. ¿Alguna vez ha tenido la necesidad de almacenar tales datos? ¿Cómo has hecho eso? ¿Hay algún "patrón de diseño" para eso?


5
2018-06-28 10:12


origen


Respuestas:


Preocupaciones separadas:

Además de reflexionar sobre la tecnología que se utilizará para almacenar datos (DBMS, CSV, o tal vez uno de los Formatos específicos para datos científicos.), tenga en cuenta que tiene Tres tipos de datos muy diferentes. administrar:

  • Configuraciones de escenarios de simulación: estos son (típicamente) bastante pequeños, pero deben ser fáciles de editar, reutilizar y deben permitir reproducir una ejecución de simulación. Aquí, archivos de texto o código Parece ser una buena opción (estas también deberían estar controladas por versión).

  • Datos de simulación en bruto: aquí es donde debe tener mucho cuidado si le preocupa el rendimiento de la simulación, ya que la escritura de 3 GB de datos durante una ejecución puede llevar una enorme cantidad de tiempo si se implementa mal. Una forma de proceder sería Utilice los formatos de archivo existentes para este propósito. (ver más abajo) y ver si funcionan para usted. Si no es así, todavía puede utilizar un DBMS. Además, generalmente es una buena idea incluir una descripción del escenario que generó los datos (o al menos una referencia), ya que esto ayuda a administrar los resultados.

  • Datos para post-procesamiento: cómo almacenar esto principalmente Depende de las herramientas de post-procesamiento.. Por ejemplo, si ya tiene una estructura de clase para su aplicación de visualización, podría definir un formato de archivo que facilite la lectura de los datos requeridos.

Busque las soluciones existentes:

El problema al que te enfrentas (¿Cómo gestionar los datos de simulación?) es fundamental y hay muchas soluciones potenciales, cada una con ciertas compensaciones. Mientras trabajas en simulación de red, Compruebe qué capacidades ofrecen otras herramientas utilizadas en su comunidad.. Podría ser que sus desarrolladores se encontraran con problemas que ni siquiera estaba anticipando (en relación con la reproducibilidad, etc.), y ya encontraron una buena solución. Por ejemplo, puedes ver cómo OMNeT ++ está manejando la salida de simulación: las configuraciones de simulación se definen en un archivo separado, los resultados se escriben en vec y sca Archivos (dependiendo de su naturaleza). Hasta donde entendí sus problemas con los datos jerárquicos, esto también es compatible (los vectores obtienen ID únicos y están asociados con un atributo de alguna entidad modelo). Las herramientas adicionales ya funcionan con estos formatos de archivo, por ejemplo, a convertir a otros formatos como archivos CSV / MATLAB, por lo que incluso podría pensar en crear archivos en el mismo formato (documentado aquí) y para Utilice las herramientas / convertidores existentes para el procesamiento posterior.

Muchas otras herramientas de simulación tendrán características similares, así que eche un vistazo a lo que funcionaría mejor para usted.


4
2018-06-30 07:55



Parece que necesitas registrar más o menos el mismo tipo de información para cada caso, por lo que una base de datos relacional parece ser una buena opción. ¿Por qué crees que "no es la forma correcta"?

Si sus datos encajan en una colección de archivos CSV, ¡ya está casi en la forma de una base de datos relacional! Simplemente almacene en las tablas de la base de datos y tendrá soporte para consultas y claves externas. Si va a implementar una solución orientada a objetos, puede inicializar sus objetos desde la base de datos.


1
2018-06-28 11:57



Si sus estructuras de datos son bien conocidas y estables Y necesita algunas de las funciones de cálculo / consulta de SQL, entonces una base de datos relacional liviana como SQLite podría ser la solución (solo asegúrese de que pueda manejar sus eventuales datos de 3 + GB) .

De lo contrario, es decir, es posible que cada escenario de simulación necesite una estructura de datos dedicada para almacenar los resultados, y no necesita ninguna característica de SQL, entonces podría ser mejor usar una solución de forma libre (base de datos orientada a documentos, base de datos OO, sistema de archivos + csv, lo que sea).

Tenga en cuenta que aún puede usar una base de datos SQL en el segundo caso, pero tendrá que crear tablas dinámicamente para cada conjunto de resultados y, por supuesto, también crear las consultas SQL relevantes de forma dinámica.


1
2018-06-28 12:15