【问题标题】:Constructing database for simulation performance data构建仿真性能数据数据库
【发布时间】:2023-03-26 22:13:01
【问题描述】:

目前,我的团队有一个脚本,每晚都会克隆我们最新版本的代码,并在我们的计算集群上运行一组长时间运行的案例。每个案例在其各自的目录中输出一个performance.csv。这导致了一个庞大的目录结构,每个晚上都充满了 git 存储库,可以追溯到大约 2 年前。

我想将此性能数据存储在数据库中,以便我们了解我们的代码在性能方面随时间发生的变化。

我对数据库一无所知,也不确定制作表格的最佳方法是什么。

我编写了一个 python 脚本,它获取每个 git-repo 的所有性能数据并将其填充到一个没有索引或键的 sqlite 数据库中。

这是我的文件系统的简化示例

- projects/git/
  - git_20200501/
      |---- assessment/test01/performance.csv
      |---- assessment/test02/performance.csv
      |---- assessment/test03/performance.csv
  - git_20200502/
      |--- assessment/test01/performance.csv
      |--- assessment/test02/performance.csv
      |--- assessment/test03/performance.csv
  - git_20200503
      |--- assessment/test01/performance.csv
      |--- assessment/test02/performance.csv
      |--- assessment/test03/performance.csv

我使用 pandas 读取数据并添加了几列来帮助使每条记录都独一无二。生成的 dfs 看起来像这样

repo_root                   repo_hash  repo_date path                              simulation_alive_time
/projects/git/git_20200501  8cdf06...  20200501  assessment/test01/perfomance.csv   0.000000
/projects/git/git_20200501  8cdf06...  20200501  assessment/test01/perfomance.csv   0.438507
/projects/git/git_20200501  8cdf06...  20200501  assessment/test01/perfomance.csv   0.614212
/projects/git/git_20200501  8cdf06...  20200501  assessment/test01/perfomance.csv   0.710791
/projects/git/git_20200501  8cdf06...  20200501  assessment/test01/perfomance.csv   0.808077

然后我只做一个嵌套的for循环;循环遍历所有 repos 及其后续性能 csvs 并将其附加到数据库中。

我这样做的方法是否正确?

【问题讨论】:

    标签: python-3.x sqlite csv database-design


    【解决方案1】:

    sqlite3 非常适合这个项目,不需要太多知识就可以启动和运行。

    from sqlite3 import connect
    connection = connect('database/YourDatabaseName.db') 
    

    connect 将为您创建一个数据库。这也是您在创建数据库后访问数据库的方式

    cursor = connection.cursor()
    

    从这里开始,您的 sql 将根据您要执行的操作而有所不同。那里有大量的 sql 复制和粘贴数据,但其中一些主要方法是创建表和添加值。这些数据库中的数据存储在表中,因此要输入数据,您必须在数据库中创建一个表。

    sql = "CREATE TABLE TableName (DataFeature1 DataType1, DataFeature2 DataType2);"
    cursor.execute(sql)
    connection.commit()
    

    commit 将您的更改保存到您的数据库。 SQL 有它自己的特定数据类型,具体取决于您的用例,您必须查找确切的类型,但就像我之前所说的那样,查找和复制/粘贴非常容易的东西

    我要给你的一个重要提示是永远不要一次将记录放入一个记录中,我相信你可以一次完成 1,000 个,但格式有点不同。

    sql = "INSERT INTO `TableName` (`col1`, `col2`) VALUES (Entry1Col1, Entry1Col2),(Entry2Col1,Entry2Col2), ...;"
    

    然后您将执行此 sql 以上传您的所有条目及其对应的列。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多