як обробляти / архівувати / отримувати доступ до величезної кількості невеликих файлів


0

r я взяв на себе відповідальність за частину програмного забезпечення, яке попередньо обробляє дані в структуру глибокого каталогу мільйонів малих (48 к) файлів зі структурою, подібною до геогашу.
Переміщення та копіювання цих файлів - справжній біль.

Спочатку я хочу створити резервну копію даних в якийсь архів, щоб зменшити навантаження з файлової системи. Наступним кроком я хочу вдосконалити інструмент для роботи з архівами замість файлів.

Перша проблема виникає вже після упаковки цих файлів в архів.

Інструмент Windows zip та 7zip припиняють процес. Також інструмент zip, що постачається з gnuWin32, Zip 3.0 (July 5th 2008), by Info-Zipскасовує операціюzip error: Out of memory (local_to_display_string)

Тому я шукаю поради щодо двох питань:

  1. який відповідний формат файлу архіву (і інструмент, який може обробляти цей випадок використання), що дозволяє випадковий доступ до файлів. Дані, що містяться у файлах, не повинні бути доступними випадковим чином. оскільки файли досить малі для завантаження в пам'ять.

  2. Чи існує бібліотека C / C ++, яка реалізує доступ до архіву якомога ближче до нормальної обробки файлів, щоб зміни у вихідному коді були максимально можливими? У самому програмному забезпеченні використовується Qt / Boost.


Яка помилка виникає в процесі архівації з 7zip та Windows? Це варіант зробити процес у командному рядку?
daniel.neumann

я спробував і те, і інше. версія gui та командна лінія 7zip. Я не можу згадати помилки GUI (я думаю , що це було не визначене) і CLI заявляє: ERROR: Can't allocate required memory!. Але я просто визнаю, що використана версія справді стара. перевірка більш нової
vlad_tepesch

Ви намагалися знайти цю помилку? Це може бути пов'язано з кількістю пам'яті, доступною для вашого сеансу командного рядка. Щоб зменшити об'єм пам'яті, необхідний для самого процесу стиснення, ви можете архівувати дані, не упаковуючи їх.
daniel.neumann

@ daniel.neumann У мене є всі дозволи на комп'ютері, який має 16G пам'яті. Я також протестував новітню версію інструменту. Він запускає стиснення, і протягом ночі він також перериває дивну помилку: "Das System kann die benötigte Speichermenge nicht bereitstellen" переклад: Система не може забезпечити необхідну кількість пам'яті з помилки пам'яті. На відміну від старої версії, яка приносить помилку безпосередньо після сканування файлів, нова закривається через багато годин обробки :-(
vlad_tepesch

Відповіді:


0

Щодо відповідного формату файлу архіву, можливо, вам взагалі не потрібно його архівувати? Спробуйте використовувати tarзамість zip. Якщо це не допоможе, спробуйте організувати їх в ієрархічні структури, подібної хау gitабо squidзберігає велику кількість файлів в їх кеш - директорії, відокремлюючи верхнього рівня vs. підкаталоги другого рівня, наприклад: 16/256/64, так що ви будете мати меншу кількість непідтверджених Запити вводу / виводу при спробі відкрити ці файли.

По-друге, слід розглянути кешування, ось кілька пропозицій:

  • використовувати Redis або Memcached для кешування даних, які вже були прочитані,
  • спробуйте помістити їх у деяку файлову систему, наприклад, ramfs або tmpfs , щоб вона залишалася в пам'яті,
  • використовувати віртуальну пам'ять пам'яті, таку, vmtouchяка може відображати файли у віртуальну пам'ять, наприклад, щоб розмістити файл у пам'яті: vmtouch -vt file123.geoабо контролювати всю папку, спробуйте:vmtouch -dl /path/dir

Однак якщо файли невеликі і вони містять певні дані (наприклад, геохаши), можливо, варто їх імпортувати в базу даних? Такі як MariaDB чи MongoDB ? А може, індексувати їх за допомогою пошуку Solr або Еластичного пошуку ? Але наприкінці все залежить від ваших конкретних технічних вимог.


наскільки я знаю, tar не відповідає критеріям "випадкового доступу до файлів". Також у мене вже є вкладена структура каталогу. Розміщення в пам'яті не є варіантами з 1-го: дані занадто великі 2: попередня обробка проводиться лише один раз і займає дуже багато часу. Після цього попередньо оброблені дані використовуються в наступних програмах. Проблемно працювати з цими файлами не проблема. Але обробка / розгортання їх є.
vlad_tepesch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.