Как эффективно хранить сотни тысяч документов?

Я работаю над системой, в которой нужно будет хранить много документов (PDF, файлы Word и т. д.). Я использую Solr/Lucene для поиска релевантной информации, извлеченной из этих документов, но мне также нужно место для хранения оригинала. файлы, чтобы они могли быть открыты/загружены пользователями.

Я думал о нескольких возможностях:

  • файловая система - вероятно, не очень хорошая идея хранить 1 миллион документов
  • sql, но мне не понадобится большинство его реляционных функций, так как мне нужно хранить только двоичный документ и его идентификатор, поэтому это может быть не самое быстрое решение.
  • база данных без sql - у меня нет опыта работы с ними, поэтому я не уверен, хороши ли они, их также много, поэтому я не знаю, какую выбрать

Хранилище, которое я ищу, должно быть:

  • быстро
  • масштабируемый
  • с открытым исходным кодом (не критично, но приятно иметь)

Можете ли вы порекомендовать, какой, по вашему мнению, лучший способ хранения этих файлов?


person RaYell    schedule 19.10.2010    source источник


Ответы (4)


Файловая система, как следует из названия, спроектирована и оптимизирована для эффективного и масштабируемого хранения большого количества файлов.

person LukeH    schedule 19.10.2010
comment
Убедитесь, что это хорошая файловая система. FAT, вероятно, не до этого. ReiserFS или XFS есть. YMMV с extN, NTFS и т. д. См. также serverfault.com/questions/43133/ . - person Tom Anderson; 19.10.2010
comment
@Tom: Действительно, хороший момент, но это (почти) само собой разумеется ... Если вы выберете СУБД, вы также захотите убедиться, что она хорошая; аналогично, если вы выбрали базу данных nosql. Какую бы систему вы ни выбрали, убедитесь, что она хорошо выполняет свою работу. - person LukeH; 19.10.2010
comment
Истинный! Но иногда то, что само собой разумеется, нужно сказать. - person Tom Anderson; 19.10.2010

Вы можете следить за Facebook, так как он хранит много файлов (15 миллиардов фотографий):

  • Первоначально они начали с общих ресурсов NFS, обслуживаемых коммерческими устройствами хранения.
  • Затем они перешли на свой файловый http-сервер onw под названием Haystack.

Вот заметка на Facebook, если вы хотите узнать больше: http://www.facebook.com/note.php?note_id=76191543919

По поводу доли NFS. Имейте в виду, что общие ресурсы NFS обычно ограничивают количество файлов в одной папке из соображений производительности. (Это может показаться немного нелогичным, если вы предполагаете, что все последние файловые системы используют b-деревья для хранения своей структуры.) Поэтому, если вы используете коммерческие общие ресурсы NFS, такие как (NetApp), вам, вероятно, потребуется хранить файлы в нескольких папках.

Вы можете сделать это, если у вас есть какой-либо идентификатор для ваших файлов. Просто разделите это представление Ascii на группы из нескольких символов и создайте папку для каждой группы. Например, мы используем целые числа для идентификаторов, поэтому файл с идентификатором 1234567891 хранится как хранилище/0012/3456/7891.

Надеюсь, это поможет.

person Piotr Czapla    schedule 25.11.2010

По моему мнению...

Я бы хранил сжатые файлы на диске (файловая система) и использовал базу данных для их отслеживания.

и, возможно, использовать Sqlite, если это его единственная работа.

person Mark Redman    schedule 19.10.2010

Файловая система. Думая об общей картине, СУБД снова использует файловую систему. И файловая система предназначена для хранения файлов, поэтому вы можете увидеть оптимизацию (как упоминал Люк)

person Chathuranga Chandrasekara    schedule 19.10.2010