我有大量的国际象棋游戏(大约500万)存储在几个pgn文件中(便携式游戏符号)。如果您不熟悉PGN,结果将在解析时基本上是一个csv文件,其中几个字段包含有关播放器,位置等的信息,然后是一个较大的文本字段,其中的移动由一些分隔符分隔,可能是空间。每场比赛将有一行包含此类数据。
抓住的可能是重复的游戏。最终,我想在Postgres中存储独特的设置,但到达那里的最佳方式是什么?我有两种方法:
1.一次插入一个游戏,然后在每个后续插入时运行一个唯一性测试脚本,该脚本仅在游戏唯一时插入游戏。当然,我会根据需要对字段进行索引以优化此过程(我应该为所有字段编制索引,还是只为“仅仅为整数的评级”等便宜的
)2.从生成的csv中进行批量插入,然后检查重复项。我想到的算法只是循环通过1 ..(#games)id,在Postrgres中找到具有该唯一ID的游戏(如果尚未删除)然后期待所有相同的游戏,删除除了一个之外的所有游戏,然后转到下一个id / game。
第二种方法插入速度要快得多,但每次搜索都需要搜索n个游戏。第一个插入速度会更慢,但平均只能搜索n / 2个游戏。人们对每种方法效率的期望是什么?