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

标签 python database design-patterns simulation

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

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

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

我正在使用 Python 和 matplotlib 等来对数据进行后处理并编写适当的应用程序(现在正在考虑 pyQt 或 Django,但这不是问题的主题)。现在我想知道存储这些数据的最佳方式是什么?

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

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

最佳答案

不同的关注点:

除了考虑用于存储数据的技术(DBMS、CSV,或者可能是 specific formats for scientific data 之一)之外,请注意您要管理三种截然不同的数据:

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

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

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

寻找现有的解决方案:

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

许多其他模拟工具都具有类似的功能,因此请查看最适合您的工具。

关于python - 存储大量模拟配置、运行值和最终结果的首选(或推荐)方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242387/

相关文章:

database - 如何使用 Hibernate 更新数据库模式而不丢失数据?

java - Joshua Bloch 的有效 Java : Item1 - Static Factory Method

python - 如何使用 python statsmodel 计算 Cooks 距离、DFFITS

python - 建议在 python 中使用独特的随机字符串生成器??

php - 如何使用PHP检查数据是否已经在数据库中?

ruby-on-rails - 添加继承后检索现有的 MongoDB 集合

c# - 存储库模式逐步解释

java - 我们能得到的最接近 OO 软件设计中的概念和指导原则的明确列表是什么?

Python数据框匹配列表中的字符串

python - 如何从表单的扫描图像中提取数据?