构建仿真性能数据数据库



目前,我的团队有一个脚本,每天晚上克隆我们代码的最新版本,并在我们的计算集群上运行一组长时间运行的案例。每个案例在其各自的目录中输出一个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循环;遍历所有存储库及其后续性能csv,并将其附加到数据库中。

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

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

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

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

cursor = connection.cursor()

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

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

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

我会给你的一大提示是,永远不要一次把记录放在一个记录中,我相信你可以一次做 1,000 条,但格式有点不同。

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

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

相关内容

  • 没有找到相关文章