MongoDB - GridFS: руковод BEGINNERov руководств по хранению больших файлов

Здравствуйте, начинающие программисты! Сегодня мы отправимся в увлекательное путешествие в мир MongoDB и её мощной функции, GridFS. Не волнуйтесь, если вы новички в программировании – я буду вашим доброжелательным проводником, объясняя всё шаг за шагом. Итак, погружаемся!

MongoDB - GridFS

Что такое GridFS и почему вам должно быть это интересно?

Представьте, что вы организовываете огромную библиотеку. У вас есть книги всех размеров – некоторые маленькие бумажные книги, некоторые увесистые энциклопедии. А что, если бы вам пришлось хранить огромный свиток, который слишком велик для любой полки? Вот где GridFS приходит на помощь в мире баз данных.

GridFS – это решение MongoDB для хранения и retrieval больших файлов, таких как изображения, аудиофайлы или видео. Это как иметь специальную комнату в нашей библиотеке для таких oversized предметов.

Магия GridFS

GridFS работает, делящиеся на более мелкие части. Представьте, что вы разрезаете длинный свиток на управляемые фрагменты. Каждая часть по умолчанию составляет 255 КБ ( это размер короткого электронного book). Эти фрагменты затем хранятся в виде отдельных документов в двух коллекциях:

  1. fs.files: Хранит метаданные о файле (например, его имя, размер и т.д.)
  2. fs.chunks: Хранит реальное содержимое файла по частям

Начало работы с GridFS

Прежде чем мы начнём добавлять файлы в GridFS, нам нужно настроить нашу среду MongoDB. Не волнуйтесь; я вас проведу через это!

Шаг 1: Установите MongoDB

Сначала скачайте и установите MongoDB с официального веб-сайта. Это как создание нашего библиотечного здания перед тем, как мы начнём хранить книги.

Шаг 2: Установите драйвер MongoDB

Мы будем использовать Python для взаимодействия с MongoDB. Установите драйвер PyMongo с помощью pip:

pip install pymongo

Это как найм библиотекаря, который speaks на Python и MongoDB languages!

Добавление файлов в GridFS

Теперь, когда мы настроили нашу библиотеку, давайте начнём добавлять некоторые книги – или в нашем случае, файлы!

Основной способ загрузки файла

Вот простой скрипт для загрузки файла в GridFS:

from pymongo import MongoClient
import gridfs

# Подключитесь к MongoDB
client = MongoClient('mongodb://localhost:27017')
db = client['mydatabase']

# Создайте экземпляр GridFS
fs = gridfs.GridFS(db)

# Откройте и прочитайте файл
with open('my_image.jpg', 'rb') as f:
contents = f.read()

# Сохраните файл в GridFS
file_id = fs.put(contents, filename='my_image.jpg')

print(f"Файл загружен с идентификатором: {file_id}")

Давайте разберём это:

  1. Мы импортируем необходимые библиотеки и подключаемся к нашей базе данных MongoDB.
  2. Мы создаем экземпляр GridFS, который как будто открываем дверь к нашей special storage комнате.
  3. Мы открываем и читаем наш файл ('my_image.jpg' в этом случае).
  4. Мы используем fs.put() чтобы сохранить файл в GridFS. Это возвращает уникальный идентификатор для нашего файла.

Добавление метаданных

Иногда мы хотим добавить дополнительную информацию о нашем файле. Это как добавить detailed description card к нашей библиотечной книге. Вот как мы можем это сделать:

file_id = fs.put(contents,
filename='my_image.jpg',
content_type='image/jpeg',
author='Jane Doe',
date_taken='2023-06-15')

В этом примере мы добавляем дополнительную информацию, такую как тип контента, автор и дата съёмки изображения.

Загрузка больших файлов по частям

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

def upload_large_file(filepath, chunk_size=255*1024):
with open(filepath, 'rb') as f:
filename = filepath.split('/')[-1]
file_id = fs.new_file(filename=filename)

while True:
chunk = f.read(chunk_size)
if not chunk:
break
file_id.write(chunk)

file_id.close()
return file_id._id

large_file_id = upload_large_file('very_large_video.mp4')
print(f"Большой файл загружен с идентификатором: {large_file_id}")

Эта функция читает файл по частям и записывает каждую часть в GridFS. Это как carefully copying наш huge scroll piece by piece.

Получение файлов из GridFS

Теперь, когда мы добавили файлы, давайте узнаем, как их получить:

# Получите файл по его идентификатору
file_data = fs.get(file_id).read()

# Сохраните файл
with open('retrieved_image.jpg', 'wb') as f:
f.write(file_data)

print("Файл получен и сохранён!")

Этот скрипт забирает наш файл из GridFS и сохраняет его на нашем компьютере. Это как брать книгу из нашей special library комнаты!

Список всех файлов в GridFS

Иногда мы хотим увидеть все файлы, которые мы храним. Вот как это сделать:

for grid_file in fs.find():
print(f"Имя файла: {grid_file.filename}, Размер: {grid_file.length} байтов")

Это выведет список всех файлов в нашей GridFS, а также их размеры. Это как getting a catalog всех special items в нашей библиотеке!

Удаление файлов из GridFS

Наконец, давайте узнаем, как удалять файлы:

fs.delete(file_id)
print(f"Файл с идентификатором {file_id} был удалён.")

Это удаляет файл с указанным идентификатором из GridFS. Помните, что после удаления его неудаётся!

Заключение

Поздравляю! Вы только что сделали свои первые шаги в мир MongoDB's GridFS. Мы узнали, как хранить, получать, перечислять и удалять большие файлы. Помните, GridFS – это мощный инструмент для работы с big data, и с практикой вы станете master librarian цифрового мира!

Вот быстрый справочный стол с основными методами GridFS, которые мы рассмотрели:

Метод Описание
fs.put() Сохраняет новый файл в GridFS
fs.get() Получает файл из GridFS
fs.find() Список всех файлов в GridFS
fs.delete() Удаляет файл из GridFS

Продолжайте практиковаться, stay curious и幸福ного кодирования! Помните, каждый expert когда-то был новичком, так что не бойтесь экспериментировать и учиться на своих ошибках. Вы на правильном пути к тому, чтобы стать expert в MongoDB GridFS!

Credits: Image by storyset