2015-02-26 3 views
1

Все,лучше дб для хранения файлов

Мне нужно хранить большое количество файлов (несколько миллионов) в базе данных, и я не уверен, какие технологии или базы данных использования. Моя первая идея - использовать mongodb или no sql dB.

Благодаря

+0

Большие файлы? Доступна сеть? Есть ли какие-либо обновления (или просто вставки/удаления)? – Thilo

+0

Около 2 до 10 мб, без обновлений, но он должен быть доступен двум различным приложениям в python – Felquir

+0

Я считаю, что вопрос должен быть улучшен, поэтому OP должен ** отредактировать вопрос **, чтобы объяснить его и дать конкретные мотивы и фактический контекст (поэтому добавьте в него несколько абзацев). С другой стороны, такой старый вопрос без ответа (до сих пор), вероятно, бесполезен –

ответ

0

Мне нужно хранить большое количество файлов (несколько миллионов) в базе данных

Что это значит? Что именно вы храните в базе данных (так что такое file для вас)? На что operating system? Для чего file system?

(я неявно имею в виду какой-то Linux или Unix-подобных ОС, потому что они являются настолько общими для Интернета и веб-серверов, помните, что UNIX файлы на самом деле i-nodes и directories ассоциируют имена в I-узлы, и файл может есть несколько путей файлов)

  • пути к файлам, они являются просто строками (разумной длиной, довольно часто самым большим несколько килобайта) с некоторыми ограничениями; BTW вы можете «нормализовать» путь (например, с помощью realpath(3)), прежде чем хранить его в БД.

  • содержание файла, они просто «blobs», то есть потенциально большие, но произвольные последовательности байтов. Здесь у вас возникла проблема размещения разбросанных по размеру блоков в БД; файл может иметь гигабайты - или даже терабайты - контента, а blob обычно этого не делает. Большинство систем БД полностью обрабатывают капли (например, сохраняют его в ОЗУ). Можете ли вы предоставить ограничение (например, несколько мегабайт) размера вашего файла?

  • метаданные файлов (например, время изменения, разрешение, право собственности), как правило, также весьма мала (это может быть, например, представлено несколько коротких столбцов в некоторых SQL таблицы)

Тогда что же они будут файлы означают? Возможно, вы хотите закодировать какое-либо приложение, которое использует базу данных для хранения и обеспечивает файловую абстракцию ОС. Затем подумайте о файловых системах в пользовательском пространстве (FUSE)

BTW, файл существует независимо от вашей БД (поскольку файлы являются абстракцией, предоставляемой вашей ОС). Он может быть и часто создается, считывается, записывается или удаляется некоторыми за пределами программ. В Linux рассмотрите inotify(7) объекты, которые будут уведомлены о событиях файловой системы (для местных обычной файловой системы, такой как ext4).

Обратите внимание, что в настоящее время большинство БД (и СУБД, таких как PostGreSQL или MySQL и не SQL-СУБД, такие как MongoDB) хранят свои данные в файлах (то есть, используя разделы raw disk для хранения БД, мода).

Поскольку многие СУБД устанавливают некоторые ограничения на содержимое (например, blob может быть ограничен несколькими десятками килобайт, в строке в некоторой таблице некоторых СУБД), обычно делается противоположное тому, что ваш (непонятный) вопрос предлагает. Типичным примером является сохранение изображений в базе данных. Часто вы отделяете небольшие изображения (например, менее 8 Кбайт) и сохраняете их непосредственно как blob в некоторой таблице (помните, что крошечные файлы из нескольких байтов имеют некоторые большие накладные расходы в большинстве файловых систем, например.на моем компьютере с ext4 файл занимает не менее килобайта дискового пространства) и более крупные изображения: тогда вы будете хранить их в файловой системе (некоторый путь к файлу, такой как 0123/4567/89ab.jpeg) и сохранить путь к файлу в каком-то столбце. YMMV.

1

Если вы хотите сделать некоторые запросы или выполнить поиск по ключевым словам в содержимом файла, я порекомендую вам ElasticSearch, также вы можете использовать Apache Solr.

Если вам нужно что-то более конкретное, мне понадобится дополнительная информация

Смежные вопросы