XML到数据库,我应该走啥路线?

Posted

技术标签:

【中文标题】XML到数据库,我应该走啥路线?【英文标题】:XML to Database, what route should I take?XML到数据库,我应该走什么路线? 【发布时间】:2015-07-01 16:20:44 【问题描述】:

我可以访问流量数据服务器,从该服务器获取包含所需信息的 XML 文件。 (例如:A 点到 B 点:行程时间 20 分钟,距离 18 英里等)。

我下载 XML 文件(已存档),解压缩,然后对其进行处理并将其存储到数据库中。我只允许每个请求下载 XML 文件,但前提是距离上次下载已过去 5 分钟。流量服务器上的 XML 每 30 秒到 5 分钟更新一次。在 5 分钟内,任何请求网页的用户都会从数据库中检索数据(不更新),因此会限制向流量服务器发出的请求数。

我目前的方法的问题是,当我获得新的 XML 文件时,整个过程需要一些时间(3-7 秒),这使得用户在获得任何东西之前等待太多。但是,当不需要下载 XML 并且所有数据都直接从数据库中显示时,该过程非常快。 归档的 XML 约为 100-200KB,而未归档的 XML 约为 2MB。 XML 文件包含来自 3 或 4 个州的交通数据,而我只需要一个州的数据。这就是我目前使用 DB 方法的原因。

这种方法好用吗?我想知道是否应该为每个请求直接从下载的 XML 文件中提取数据,并以某种方式限制从流量服务器下载 XML 文件的频率。或者,谁能指出更好的方法?

XML 文件示例

这是我网站上的样子

【问题讨论】:

定义“好”。什么衡量标准对您很重要? 我想到了 CRON 作业路线,但这意味着无论是否有任何用户请求数据,它都会被更新。现在它只有在被请求并且自上次更新后不超过 5 分钟时才会更新。即使在请求新的 XML 时也能更快地访问! 您可以创建一个定期访问 XML 文件、解析它并将数据存储到数据库中的 CRON 作业。然后用户将只能访问数据库数据。这样用户访问数据时就不会出现任何明显的延迟。 老实说,如果用户被告知正在发生的操作(例如“正在加载...”状态栏或微调器),那么 3-7 秒并不是什么大问题。您可以使用 AJAX 来实现。 @Cristian 如果每个请求都从数据库读取,但当您读取过期数据时,它也会触发 XML 下载怎么办?多个请求(下载期间)仍会从 DB 中读取。 【参考方案1】:

每次更改时都需要下载 XML。

但只有当您在下一个时间段内有活跃用户时才需要下载文件。

因为你无法预见未来,所以你不知道你是否会在接下来的 7 秒内收到用户的请求。

但是,如果 XML 文件已更新,您可以通过 HEAD 请求查明。

因此,您可以自己创建一个服务,该服务在每次更改时从远程系统下载 XML。如果确实不经常需要该日期,您可以将该服务配置为不经常检查和/或下载。

只要你能通过对用户行为的统计分析,了解下载服务的最佳配置,你系统的其余部分就可以独立于它。

如果您需要更高的实时性,您需要根据来自其他系统的更改数据配置新服务,然后您需要开始在这两个系统之间双向交换数据,这更复杂并且可能导致更多副作用。但从你给出的数字来看,这种程度的细节可能无论如何都不需要,所以我不会在意。

【讨论】:

以上是关于XML到数据库,我应该走啥路线?的主要内容,如果未能解决你的问题,请参考以下文章

.Net可以走啥方向?在学校学了c#语言,出来找实习,发现c#的面试很难,该怎么办?

大数据开发内容太多了,我到底应该怎么学?(附应届生学习路线)

算法和数据结构的学习路线

使用 POST 数据的数组键或数组值的 RESTful api

我在将数据从 XML 文件移动到具有 CDATA 节点类型的 ARRAY 时遇到问题

android获取和解析谷歌路线