【发布时间】:2015-11-13 23:00:37
【问题描述】:
我正在尝试找出完成以下任务的最佳方法:
- 每天从第三方网站下载一个大型 XML (1GB) 文件
- 将该 XML 文件转换为我服务器上的关系数据库
- 添加搜索数据库的功能
对于第一部分,这是需要手动完成的事情,还是可以通过 cron 完成?
大多数与 XML 和关系数据库相关的问题和答案都涉及 Python 或 PHP。这也可以用 javascript/nodejs 来完成吗?
如果这个问题更适合不同的 StackExchange 论坛,请告诉我,我会将其移到那里。
下面是xml代码示例:
<case-file>
<serial-number>123456789</serial-number>
<transaction-date>20150101</transaction-date>
<case-file-header>
<filing-date>20140101</filing-date>
</case-file-header>
<case-file-statements>
<case-file-statement>
<code>AQ123</code>
<text>Case file statement text</text>
</case-file-statement>
<case-file-statement>
<code>BC345</code>
<text>Case file statement text</text>
</case-file-statement>
</case-file-statements>
<classifications>
<classification>
<international-code-total-no>1</international-code-total-no>
<primary-code>025</primary-code>
</classification>
</classifications>
</case-file>
以下是有关如何使用这些文件的更多信息:
所有 XML 文件都将采用相同的格式。每条记录中可能有几十个元素。这些文件由第三方每天更新(并在第三方网站上以压缩文件的形式提供)。每天的档案代表新的案例档案以及更新的案例档案。
目标是允许用户搜索信息并在页面上(或在生成的 pdf/excel 文件中)组织这些搜索结果。例如,用户可能希望查看在 <text> 元素中包含特定单词的所有案例文件。或者,用户可能希望查看包含主代码 025(<primary-code> 元素)并在特定日期(<filing-date> 元素)之后提交的所有案例文件。
输入数据库的唯一数据将来自 XML 文件——用户不会将他们自己的任何信息添加到数据库中。
【问题讨论】:
-
取决于文件,我认为它不能(容易)在节点或许多 php 设置中完成;如果您真的需要解析 XML,那将是一大堆内存……如果您可以逐块“抓取”xml 块(如果它是平面 + 线性的,如 RSS 文件),那么任何事情都可以工作。你打破一个块,解析小块,然后用新插入的行更新数据库。
-
@dandavis 谢谢。 “平面+线性”是指不超过一深吗?
-
基本上。它的离散部分开始和结束的地方很重要。如果标签和可预测性周围有空格,那么您可以可靠地解析它的片段。如果您需要来自“顶部”的属性恰好是“左侧”120mb,那么它是一个 PITA,您需要努力连接各个部分。但考虑 RSS,我可以从中间切下一块,寻找第一个“
- ”和下一个“
”并拥有我需要的东西,前提是我预先缓存了频道信息......跨度> -
@dandavis 我添加了 XML 代码的样例。有数千个以
<case-file>结尾的块,这是可以逐块解析的吗? -
为什么一定要php?是因为它将成为 php 中更大的系统/平台的一部分,还是其他什么?
标签: javascript python xml node.js relational-database