2011-02-03 119 views
0

我希望能够将media RSSiTunes podcast RSS订阅源存储到数据库中。这里的要求是我不想错过Feed中的任何元素或其属性。在Feed中查找所有最常见的元素并将它们作为单独的列存储在数据库中会很有意义。这里的问题是可能存在可能不是标准的饲料特定元素。我也想抓住他们。由于我不知道他们能做什么,所以我不会为他们设立专门的专栏。存储媒体RSS和iTunes播客数据库中的RSS订阅源

目前我有2个表称为饲料和feed_entries。对于像附件,类别这样的RSS 2.0标签,我有与feed/feed_entries关联的单独表格。我正在使用feedzirra解析提要。 Feedzirra要求我们知道我们想分析的饲料中的元素,因此我们不知道饲料是否包含feedzirra无法理解的元素。

什么是最好的方式去存储这些饲料在数据库中,不会错过任何一点信息? (因为我们想要查询大多数属性,因此将整个提要转储到数据库中将不起作用)。什么解析器会是最合适的? Feedzirra的选择是为了提高性能,但是将Feed中的所有数据都放到数据库中是一个优先事项。

更新

我使用MySQL作为数据库。

回答

0

将XML存储为CLOB,大多数数据库都具有XML处理扩展,使您可以将XPath类型查询作为SELECT语句的一部分包含在内。

否则,如果您的DBMS不支持XML查询,请使用您的语言XPath实现来查询CLOB。您可能需要将某些元素提取到表列中才能快速查询。

1

我在饲料和条目上建模我的数据库,并为RSS,RDF和Atom交叉映射字段,因此我可以捕获所需的数据字段作为起点。然后我添加了一些其他标签和我自己的饲料内部总结,以及一些家务和维护领域。

如果您从Feedzirra搬家,我建议您暂时将实际的订阅源XML存储在临时表中,以便在闲暇时使用Nokogiri进行后期处理。这样,您的HTTP进程就不会陷入处理文本的困境,它只是检索内容并将其归档,并更新处理时间的记录,以便知道何时再次检查。后期处理可以从存储的XML中提取所需的提要信息以存储在数据库中,然后删除该记录。这意味着有一个流程会尽可能快地周期性地提供Feed,另一个流程基本上在后台运行。

此外,Typhoeus/HydraHTTPClient都可以很好地处理多个HTTP请求,并且易于设置。