Я создаю back-end для своего веб-приложения; он будет действовать как API для front-end, и он будет написан на Python (точнее, в фляге).
После принятия некоторых решений относительно проектирования и реализации я получил часть базы данных. И я начал думать, может ли хранение данных NoSQL быть более подходящим для моего проекта, чем традиционные базы данных SQL. Ниже приведено базовое функциональное описание, которое должно обрабатываться базой данных, а затем список плюсов и минусов, которые я мог бы предложить относительно того, какой тип хранилища я должен выбрать. Наконец, некоторые слова о том, почему я рассмотрел RethinkDB над другими хранилищами данных NoSQL.
Основные функции API
API состоит всего из нескольких моделей: Artist
, Song
, Suggestion
, User
и UserArtists
.
Я хотел бы добавить User
с некоторыми связанными данными и связать с ним Artist
. Я хотел бы добавить Song
в Artist
по запросу, а также сгенерировать a Suggestion
для a User
, который будет содержать Artist
и Song
.
Возможно, одной из наиболее важных частей является то, что Artist
будет периодически связан с User
(а также Artist
может быть удален из системы - следовательно, из User
тоже), если они не удовлетворяют некоторым критериям). Song
также будет динамически добавляться к Artist
s. Все это означает, что User
не имеет фиксированного набора Artist
, а также Artist
не имеет фиксированного набора Song
- они будут постоянно обновляться.
Pros
для NoSQL:
- Гибкая схема, так как не каждый
Artist
будет иметь FacebookID илиSong
SoundcloudID; - В то время как JSON API, я считаю, что я выиграю от того, что записи хранятся как JSON;
- Я считаю, что число
Song
s, но особенноSuggestion
будет увеличиваться совсем немного, поэтому NoSQL будет делать здесь лучшую работу;
для SQL:
- Фиксированная схема может пригодиться в отношениях между моделями;
- Флажок имеет поддержку SQLAlchemy, которая очень полезна при определении моделей;
против
для NoSQL:
- Отношения сложнее реализовать и обновить модели транзакций, например, немного кода;
- Flask не имеет никакой обертки или модуля для облегчения вещей, поэтому мне нужно будет внедрить какую-то оболочку, чтобы помочь сделать код более читаемым при выполнении операций с базой данных;
- У меня нет никакой уверенности в том, как хранить мои записи, особенно
UserArtist
s
для SQL:
- Операции громоздки, я должен определить схемы, проверить, имеют ли столбцы значения по умолчанию, назначать значения по умолчанию, проверять данные, начинать/совершать транзакции - я считаю, что это слишком много хлопот для чего-то простого, как API;
Почему RethinkDB?
Я рассмотрел RehinkDB для возможной реализации NoSQL для моего API из-за следующего:
- Он выглядит более простым и легким, чем другие решения;
- У него есть встроенная поддержка Python, которая является большим плюсом;
- Он реализует объединения таблиц и другие вещи, которые могут пригодиться в моем API, который имеет некоторые отношения между моделями;
- Это довольно ново, и я вижу много последствий и любви от сообщества. Там также будет постоянно добавлять новые вещи, которые используют взаимодействие с базами данных.
Все, что мы рассмотрим, я был бы рад услышать любые советы о том, подходит ли NoSQL или SQL для моих нужд, а также любой другой pro/con для этих двух, и, конечно, некоторые исправления в отношении вещей, которые я прихожу Правильно указано.