База данных для галереи изображений Node.js

0

Я разрабатываю персональную веб-галерею самолетов, используя Node.js, чтобы показать свои фотографии друзьям/коллегам и т.д. На сервере будут размещаться сотни или 1-2 тысячи этих фотографий (как статические файлы) максимум, а их сопровождающие данные будут храниться в базе данных.

Веб-сайт не должен генерировать слишком большой трафик (1-2 доступа только за раз). Его главной особенностью будет комплексный поисковый "двигатель", способный фильтровать и заказывать фотографии производителем самолетов, типа самолета, регистрации самолета, авиакомпании, аэропорта, где была сделана фотография, дата фотографии и множество других аспектов.

Я разработал реляционную модель для выполнения этих целей, которая будет реализована в базе данных MySQL:

                               +-------+
                               | Photo |
                               +-------+
                              N |     | N
               +----------------+     +--------------+
             1 |                                     | 1
  +------------------------+            +--------------------------+
  |Aircraft | e.g. "G-CIVL"|            | Airport | e.g. "Heathrow"|
  +------------------------+            +--------------------------+
             N |                                     | N
             1 |                                     | 1
   +-----------------------+              +-----------------------+
   | Model | e.g. "747-400"|              |  City | e.g. "London" |
   +-----------------------+              +-----------------------+
             N |                                     | N
             1 |                                     | 1
 +-------------------------+         +--------------------------------+
 |Model_family | e.g. "747"|         | Country | e.g. "United Kingdom"|
 +-------------------------+         +--------------------------------+
             N |
             1 |
+----------------------------+
|Manufacturer | e.g. "Boeing"|
+----------------------------+

Каждая фотография будет содержать информацию о месте, в котором она была сделана (филиал "Аэропорт - город - страна"), и самолет, показанный на фотографии (самолет - модель - model_family - производитель "филиал").

Как я уже упоминал ранее, посетители должны иметь возможность фильтровать фотографии по любым столбцам этих таблиц, требуя разных объединений в запросе базы данных для разных параметров фильтрации. Примеры:

  1. Пользователь ищет фотографии, сделанные в определенной стране. Запрос SELECT, возвращающий соответствующие данные изображения, должен присоединиться к столам Фото, Аэропорт, Город и Страна.
  2. Пользователь фильтрует фотографии по определенной модели самолета. Запрос SELECT должен был бы только присоединиться к фотографиям и таблицам моделей.

Вопрос еще более сложный, если пользователь фильтрует фотографии по нескольким (или даже более) аспектам одновременно.

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

Мои вопросы:

  • Является ли упомянутый метод (сложный алгоритм построения строки SQL) хорошим подходом к проблеме?

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

  • Или решение NoSQL, такое как MongoDB с более плоской (и денормализованной) моделью, более адекватно для этой задачи? Не нужно настраивать разные объединения для разных параметров фильтрации, кажется, огромный плюс. Очень маловероятно, что сохраненные данные будут обновлены или удалены, поэтому денормализация может быть не серьезной проблемой.

Благодарим вас за помощь.

Теги:
database
image-gallery

1 ответ

0

Я не очень много использовал MYSQL, но в NoSQL (Mongodb)

вы можете получить структуру данных примерно так, и вы можете искать по каждому параметру

[
  {
    "_id": 0,
    "Airport": "Heathrow",
    "city": "London",
    "country": "United Kingdom",
    "Aircraft": "G-CIVL",
    "model": "747-400",
    "model_family": "747",
    "manufacturer": "Boeing",
    "photo_url": "http://www.dummy-url/dakshdajk8sdjkhs8ds8dh8sd8sdj8s.png"
  },
  {
    "_id": 1,
    "Airport": "Heathrow",
    "city": "London",
    "country": "United Kingdom",
    "Aircraft": "G-CIVL",
    "model": "747-400",
    "model_family": "747",
    "manufacturer": "Boeing",
    "photo_url": "http://www.dummy-url/dakshdajk8sdjkhs8ds8dh8sd8sdj8s.png"
  }
]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню