xml - 如何将 200 万个 XML 文件导入 Postgresql?
问题描述
我有大约 200 万个 XML 文件。我需要提取、索引和搜索数据。我想在 Postgresql 中导入它们:我不知道这是否是最好的选择——可能不是——但我知道这是一个数据库。
我创建了一个非常简单的表:
CREATE TABLE articolo (
id_articolo BIGSERIAL not null
constraint articolo_pk
primary key,
data xml,
is_comm boolean default true,
data_ins timestamp default now()
);
像这样的查询很好:
INSERT INTO articolo (data)
VALUES (pg_read_file('/home/articoli/comm_use/Psychophysiology/PMC7027463.nxml')::xml);
我需要一种有效的方法,因为服务器使用旧的 7200 硬盘并且有点慢。导入 /home/articoli/comm_use 文件夹及其子文件夹的所有 xml 文件的最佳方法是什么?
解决方案
您可能应该从 xml 中提取最重要的字段,并使它们成为表中的真实列。
但无论如何,您当然不想为插入的每一行发出 fdatasync,因此要么将许多行合并到一个事务中,要么将 synchronous_commit 设置为关闭。
如果您的 xml 文件没有内部制表符、换行符或反斜杠(或者您可以对它们进行预处理以删除或转义其中任何一个),那么您可以将数据流式传输到COPY articolo (data) from STDIN
推荐阅读
- c++ - 在 Visual Studio 2015 中链接 .lib
- matlab - 将 .ods 工作表加载到 Octave 时出错
- javascript - React Native localeCompare 在 Android 上不起作用
- r - R中线性回归的引导标准误差
- java - 如何实现 Guava 缓存来存储和获取不同类型的对象?
- angular - 角 | 如何使用 ng-template 或任何方法将 ng-content/child 内容置于组件之外
- c# - 如何将带小数点的字符串转换为带小数点逗号的双精度?
- angular - Primeng - 如何在多选/下拉列表的标题中添加一个按钮?
- vb.net - 想要将文本框中的行添加到列表框中,如果它包含单词中的单词
- powershell - 在 PowerShell 中管理基于批处理的服务器