我正在解析扑克手牌历史,并将数据存储在 postgres 数据库中。这是一个快速的视图:
我的性能相对较差,解析文件需要几个小时。我可以看到数据库部分占用了总程序时间的 97%。因此,只需进行一点优化就会使这更快。
我现在设置的方式如下:
- 将下一个文件读入字符串。
- 解析一个游戏并将其存储到对象 GameData 中。
- 对于每个玩家,检查我们是否在 std::map 中有他的名字。如果是这样; 将 playerids 存储在一个数组中,然后转到 5。
- 插入播放器,将其添加到 std::map,将 playerids 存储在数组中。
- 使用 playerids 数组,插入本轮投注的移动,将 moveids 存储在数组中。
- 使用 moveids 数组,插入一个movesequence,将movesequenceids 存储在一个数组中。
- 如果这不是最后一轮比赛,请转到 5。
- 使用 movesequenceids 数组插入游戏。
- 如果这不是最后一场比赛,请转到 2。
- 如果这不是最后一个文件,请转到 1。
因为我要为每一个动作、每一个动作序列、每场比赛发送查询,我显然做了太多的查询。我应该如何捆绑它们以获得最佳性能?我不介意重写一点代码,所以不要退缩。:)
提前致谢。
CX