INODES - Обойти? - PullRequest
       15

INODES - Обойти?

0 голосов
/ 14 сентября 2011

Итак, мой хостинг имеет ограничение INODES на моем сервере (индексные узлы). Каждый каталог / файл = 1 INODE. Это может стать проблемой в будущем, так как я хочу реализовать обмен файлами на моем веб-сайте. Не могу ли я теоретически сохранить данные файлов в базе данных MySQL, а затем извлечь данные, когда пользователь запросит загрузку? Если это возможно, как бы я сделал это в PHP?

Скелет MySQL:

TABLE: Files
ROWS: id, filename, data

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Не начинайте хранить вещи в базе данных , просто из-за подобных ограничений - у этого подхода есть серьезные недостатки.

Если вы действительно ожидаете, что ваши номера превысят то, что позволяет провайдер в ближайшее время, поменяйте провайдера и / или арендуйте частный сервер.

Большинство вещей, обсуждаемых в этом знаменитом вопросе SO:*

Хранение изображений в БД - да или нет?

применимо ко всем форматам файлов.

0 голосов
/ 14 сентября 2011

Во-первых, я бы предложил найти другого хостинг-провайдера.

Но если это невозможно, возможно реализовать его php (я видел, что это было сделано в perl, но PHP не должен сильно отличаться). Я не буду обсуждать преимущества наличия файлов в БД,так как они не применимы к вашей ситуации (но, несмотря на то, что вы думаете, что предыдущий ответ, есть несколько)

Вам понадобятся две таблицы, одна таблица для хранения метаданных, таких как имя файла,размер и другие данные, которые вам нужны, и одна таблица для фактического содержания.Для метаданных я оставлю реализацию для вас.

Таблица, в которой хранится содержимое, немного интересна, поэтому я дам несколько подробностей.

Поля: FileID, Chunk, DataChunk (Blob)

Первичный ключ будетчерез FileID и Chunk, причем Chunk установлен на автоматическое увеличение.Это увеличит Chunk для того же идентификатора файла.Хранение всего файла в одном блобе невозможно, если размер файла превышает 1 МБ.Кроме того, это помогает с разбиением (не применимо в вашем случае).

При вставке вам потребуется разбить файл на куски соответствующего размера, экранировать данные соответствующим образом и вставить их по одному в БД,

При выводе вам нужно будет извлечь куски в правильном порядке, объединить их и сохранить на диске.Затем используйте редирект, чтобы Apache обслуживал его напрямую.Вы можете использовать это, чтобы иметь небольшой кэш на диске (с учетом ограничения inode).Проверьте, находится ли файл на диске, и если да, пропустите извлечение всей базы данных.

...