Огромный XML в Clojure

Я новичок в Clojure, и мой первый проект должен иметь дело с огромным (250 + GB) XML файлом. Я хочу поместить его в PostgreSQL для последующего его обработки, но не знаю, как подойти к такому большому файлу.

Ответ 1

Я использовал новый clojure.data.xml для обработки дампа в Википедии на 31 ГБ на скромном ноутбуке. Старая библиотека lazy-xml contrib не работала для меня (закончилась нехватка памяти).

https://github.com/clojure/data.xml

Упрощенный пример кода:

(require '[clojure.data.xml :as data.xml]) ;'

(defn process-page [page]
  ;; ...
  )

(defn page-seq [rdr]
  (->> (:content (data.xml/parse rdr))
       (filter #(= :page (:tag %)))
       (map process-page)))

Ответ 3

Если xml представляет собой набор записей, https://github.com/marktriggs/xml-picker-seq - это то, что вам нужно для обработки записей в xml независимо от размера xml. Он использует XOM под капотом и обрабатывает одну "запись" за раз.

Ответ 4

Вы также можете использовать синтаксический анализатор expresso для массивных файлов (www.expressoxml.com). Он может анализировать файлы объемом 36 ГБ и более, поскольку он не ограничен размером файла. Он может вернуть до 230 000 элементов из поиска, и он доступен через потоковое вещание через "облако" со своего веб-сайта. И лучше всего их версия для разработчиков бесплатна.