我正在编写一个组件,它解析带有股票报价的 xml 提要并将结果保存在数据库中。问题相当简单,只是无法增量读取提要。也就是说,没有办法指定您只希望 X 最后报价更改或仅更改比 X 分钟更新,例如。我知道真正的问题是提要很愚蠢,提供商应该修复他们的东西,但这不是 atm 的选择。
提要是一个巨大的 xml 文件,其中包含供应商的 100000 条最新股票报价。提要每分钟轮询一次,在此期间大约有 50-100 个更改的报价。其余的是重复的引号,一遍又一遍地阅读。
在每次提要轮询期间,我将所有引号(使用 lxml)解析为对象。然后,对于每个报价对象,我检查数据库中是否已经存在报价。如果是,我丢弃它,如果不是,我保存它。这个过程非常浪费,因为只有大约 0.1% 是新数据,其余的都是重复的。为了稍微优化一下,我通过在数据库中查询一次最近 X 小时内更新的报价来创建一个查找表。引号在 (last_update, stock_id) 键上的数据库中是唯一的,因此此优化将查询数量减少了约 50%。
但是仍然有 50k 数据库查询,其中每个报价必须单独检查是否存在,这对数据库来说非常繁重。
所以我正在寻找关于如何使我的提要解析器更快的想法。也许有一种方法可以将最后获取的 xml 文件与新文件进行比较?