解析大型XML提要时处理重复数据
我正在编写一个组件,用库存报价解析xml提要并将结果保存在数据库中。问题相当简单,除了不能逐步读取Feed。也就是说,没有办法指定你只想要X最后一次引用更改,或者只更改比X分钟更新的更改。我知道真正的问题是feed是愚蠢的,提供者应该修复他们的东西,但这不是一个选项。
Feed是一个巨大的xml文件,其中包含提供商的100000个最后股票报价。每分钟对进料进行一次轮询,在此期间有大约50-100个变更的报价。其余的是重复的引号,一次又一次地读取。
在每次调查Feed时,我会将所有引号(使用lxml)解析为对象。然后,对于每个引用对象,我检查引用是否已存在于数据库中。如果是的话,我会丢弃它,如果没有,我保存它。这个过程非常浪费,因为只有大约0.1%是新数据,其余的是重复数据。为了优化它,我通过查询数据库一次创建查找表,以获取在过去X小时内更新的报价。引号在(last_update,stock_id)键的数据库中是唯一的,因此此优化将查询数量减少约50%。
但是仍然有50k db查询,如果它们存在与否,则必须单独检查每个引用,这对数据库非常重要。
所以我正在寻找的是关于如何更快地使我的feed解析器的想法。也许有一种方法可以将最后一个获取的xml文件与新文件区分开来?
没有找到相关结果
已邀请:
2 个回复
扫窟
扫窟