将XML转换为数据库,我应该采取哪种方法?

3
我可以从一个交通数据服务器获取XML文件,里面包含我需要的信息(例如:从A点到B点:20分钟的行驶时间,18英里的距离等等)。我下载这个XML文件(已经被压缩),然后解压、处理并存储到数据库中。每次请求仅允许下载一次XML文件,但是必须满足上一次下载已经过去5分钟。交通服务器上的XML每30秒至5分钟更新一次。在这5分钟内,任何请求网页的用户都将从数据库中检索数据(没有更新),因此限制了向交通服务器发出的请求数量。
我的问题在于当前的方法需要一些时间(3-7秒)来处理新的XML文件,这使得用户在获得任何内容之前等待太久。但是,当不需要下载XML文件且所有数据直接从数据库显示时,处理速度非常快。归档的XML大约100-200KB,而未压缩的文件大约2MB。XML文件包含3或4个州的交通数据,而我只需要一个州的数据。这就是为什么我目前使用数据库方法的原因。
这种方法好吗?我想知道是否应该针对每个请求直接从下载的XML文件中提取数据,并以某种方式限制XML文件的下载频率。或者,有人能指点我更好的方法吗?
XML文件样例: sample of the XML file 这是它在我的网站上的样子: This is how it looks on my website

您可以创建一个CRON作业,定期访问XML文件,解析并将数据存储到数据库中。然后用户只需访问数据库数据。这样,当用户访问数据时就不会有任何明显的延迟。 - Tomasz Cz.
说实话,如果用户被通知了正在进行的操作(例如“加载中...”状态栏或旋转器),3-7秒并不是什么大问题。您可以使用AJAX来实现这一点。 - Tomasz Cz.
@Cristian 如果每个请求都从数据库中读取数据,但当您读取过期数据时,它也会触发XML下载怎么办?多个请求(在下载期间)仍将从数据库中读取数据。 - Adriano Repetti
不是AJAX,而是服务器端。您将返回旧数据,然后在服务器端触发更新(用户不会看到)。下一次(或下一个用户)将获得更新的数据。如果您将过期时间缩短为2.5 / 3分钟,则更新时间将更多或更少相同(但没有延迟)。 - Adriano Repetti
@AdrianoRepetti 我不能在5分钟内下载XML文件,因为服务器管理员不允许。我该如何触发服务器端更新?使用exec还是shell_exec?但是经过思考,我怀疑这样做不会很好,因为第一个用户将无法获得新数据。例如,如果在晚上没有人发出请求,那么数据将至少有3-5个小时的延迟。当新用户发出请求时,他们将获得非常旧的数据,因此需要重新加载。 - Cristian
显示剩余4条评论
1个回答

0

每次 XML 文件更改时,您需要下载它。

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

由于您无法预见未来,因此不知道是否会在接下来的 7 秒内收到用户请求。

但是,您可以通过 HEAD 请求可能找出 XML 文件是否已更新。

因此,您可以创建一个服务,每次远程系统更改 XML 时都从该系统下载。如果确实不需要那么频繁地使用该日期,则可以将该服务配置为不经常检查和/或下载。

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

如果您需要更实时的服务,则需要基于其他系统的更改数据配置新服务,然后需要在这两个系统之间双向交换数据,这更加复杂,可能会导致更多的副作用。但根据您提供的数字,可能并不需要这种详细级别,因此我不会关心它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接