Каков наилучший способ найти общие элементы нескольких текстовых файлов с Java?
У меня есть программа, которая создает несколько текстовых файлов троек rdf. Мне нужно сравнить тройки и сделать это быстро, каков наилучший способ сделать это? Я думал о том, чтобы сложить тройки в массив и сравнить их, но потенциально может быть сотни тысяч тройок на файл, и это заняло бы вечность. Мне нужно, чтобы он был как можно ближе к реальному времени, так как тройки будут постоянно генерироваться в файлах. Любая помощь будет отличной. Файлы также находятся в репозитории AllegroGraph, если их проще как-то сравнить.
Мысль: если бы я хранил тройки в Excel (одна тройка на строку) и один лист на хранилище,
A: как я мог найти дубликаты среди листов. Б: это было бы быстро. и C: как я могу автоматизировать это с Java?
2 ответа
Вам необходимо создать основной индекс, в котором будет храниться каждая тройка, а также количество файлов, в котором она появляется, а также точное имя файла и расположение тройки в каждом файле. Вы можете искать в главном индексе, чтобы отвечать на запросы в режиме реального времени.
Когда вы обновляете, удаляете или создаете новые rdf-файлы, вам необходимо обновить главный индекс.
Вам нужно сохранить главный индекс, чтобы его можно было эффективно обновлять и искать.
Простым выбором может быть использование реляционной базы данных (например, MySql) для хранения главного индекса. Он может ответить на ваши вопросы, такие как поиск общих троек с простым оператором выбора select * from rdfindex where triplecount > 2.
РЕДАКТИРОВАТЬ: Вы не можете хранить сотни тысяч троек в памяти, используя HashMap или аналогичную структуру данных. Вот почему я предложил использовать базу данных, которая может хранить данные и эффективно отвечать на ваши запросы. Вы можете посмотреть на встроенную базу данных как SQLite для хранения данных.
Читайте на эти темы
Как создать базу данных SQLite и создать таблицы, таблицы доступа и т. Д., Создать простую таблицу для хранения тройного, тройного счета, имен файлов.
Конвертируйте все ваши файлы Excel в файлы CSV. Вы можете использовать opencsv для анализа файла в Java (посмотрите примеры, поставляемые с opencsv).
Разобрать CSV-файлы и загрузить данные в SQLite. Если тройка уже есть в базе данных, просто обновите счетчик, если не вставьте тройку.
Насколько я знаю, в AllegroGraph есть функция удаления дублирующихся записей, это может быть вариант, если все тройки происходят оттуда.