我正在写一个组件,该组件使用股票报价分析xml供稿,并将结果保存在数据库中。这个问题相当简单,除了feed不能递增阅读。也就是说,没有办法指定您只希望X最后一次报价更改或仅更改比X分钟更新,比如说。我知道真正的问题是饲料是愚蠢的,供应商应该修理他们的东西,但这不是一个选项atm。解析巨大的XML供稿时处理重复的数据
Feed是一个巨大的xml文件,其中包含提供商的最后100000个股票报价。饲料每分钟轮询一次,在此期间大约有50到100次更改报价。其余部分是重复的引号,它们会一遍又一遍读取。
在每次对feed进行轮询时,我将所有引号(使用lxml)解析为对象。然后,对于每个报价对象,我检查报价是否已经存在于数据库中。如果是这样,我就放弃它,如果没有,我保存它。这个过程非常浪费,因为只有大约0.1%是新数据,其余部分是重复的。为了优化一下,我通过查询数据库一次,在最近X小时内更新报价来创建一个查找表。 (last_update,stock_id)键中的引号在数据库中是唯一的,因此该优化将查询数减少了大约50%。
但仍然有50k db查询,每个引号必须单独检查,如果存在或不存在,这对数据库非常重要。
所以我在找的是关于如何使我的提要解析器更快的想法。也许有一种方法来区分上一次获取的XML文件与新的?
哪个数据库? – ajreal 2011-04-01 08:41:14