存储大量仿真配置、运行值和最终结果的首选(或推荐)方式

2024-09-29 00:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一些网络模拟器。在对它做了一些扩展之后,我需要做很多不同的模拟和测试。我需要记录:

  • 模拟场景配置
  • 每个设备每时间单位t的某些参数值(例如缓冲器大小、信号质量、位置)
  • 根据这些记录值计算出的最终结果

第二个数据需要在模拟完成后执行一些可视化(简单的动画,显示一些随时间变化的统计数据)。在

对于Pyango应用程序来说,这是一个不合适的问题。现在我想知道存储这些数据的最佳方式是什么?在

我的第一个猜测是使用XML文件,但是XML语法会带来太多的开销(我的意思是,文件可能会增长到非常大的大小,特别是对于数据类型的第二部分)。所以我试着设计一个数据库。。。但在我看来,这也不是正确的方法。。。也许两者兼而有之?在

我试图在谷歌上找到一些线索,但没有发现什么特别的。您是否曾经需要存储这些数据?你是怎么做到的?有什么“设计模式”吗?在


Tags: 文件数据网络信号可视化记录时间场景
3条回答

单独关注:

除了考虑用于存储数据的技术(DBMS、CSV或specific formats for scientific data之一),请注意,要管理的数据有三种非常不同的类型:

  • 仿真场景配置:这些配置(通常)相当小,但它们需要易于编辑、易于重用,并且应允许重现模拟运行。在这里,文本或代码文件似乎是一个不错的选择(它们也应该是版本控制的)。

  • 原始模拟数据:如果您关心模拟性能,这是您应该非常小心的地方,因为在运行期间写入3gb的数据如果执行不好,可能会花费大量的时间。一种方法是使用现有的文件格式,看看它们是否适合您。如果没有,您仍然可以使用DBMS。另外,通常最好包括生成数据的场景的描述(或者至少是引用),因为这有助于管理结果。

  • 用于后处理的数据:如何存储这些数据主要取决于后处理工具。例如,如果您已经有了可视化应用程序的类结构,那么您可以定义一种文件格式,以便于读取所需的数据。

寻找现有解决方案:

您面临的问题(如何管理模拟数据?是基本的,有许多潜在的解决方案,每种方案都有一定的权衡。当您在进行网络模拟时,请查看社区中使用的其他工具提供了哪些功能。可能是他们的开发人员遇到了你甚至还没有预料到的问题(关于再现性等),并且已经找到了一个好的解决方案。例如,您可以查看OMNeT++是如何处理模拟输出的:模拟配置在单独的文件中定义,结果写入vec和{}文件(取决于它们的性质)。据我所知,分层数据的问题也受支持(向量获得唯一的id,并与某个模型实体的属性相关联)。 其他工具已经可以处理这些文件格式,例如,将它们转换为其他格式,如CSV/MATLAB文件,因此您甚至可以考虑创建相同格式的文件(已记录的here),并使用现有的工具/转换器进行后处理。

许多其他的模拟工具都有类似的功能,所以看看什么最适合您。在

听起来您需要为每种情况记录或多或少相同的信息,所以关系数据库听起来很适合,为什么您认为这是“不合适的方式”?在

如果您的数据适合CSV文件的集合,那么您已经是关系数据库的主要来源了!只需存储在数据库表中,就可以支持外键和查询。如果继续实现面向对象的解决方案,则可以从数据库初始化对象。在

如果你知道SQL/ITE的一些查询功能是稳定的,那么你就可以确保你的SQL/ITE结构是稳定的。在

否则-也就是说,每个模拟场景可能需要一个专用的数据结构来存储结果-,而且您不需要任何SQL功能,那么您可能会更好地使用更自由形式的解决方案(面向文档的数据库、OO数据库、文件系统+csv等等)。在

请注意,在第二种情况下,您仍然可以使用sqldb,但是您必须为每个resultset动态创建表,当然还必须动态地创建相关的SQL查询。在

相关问题 更多 >