Задать вопрос
SunnyPh
@SunnyPh
ASP.NET Core (MVC, Razor Pages, Blazor)

Выбор между SQL и NoSQL документооринтированной базой данных?

Задача, создание оптимальной архитектуры веб приложения для каталога разлчных объектов с гео привязкой, с возможностью фильтрации объектов по категориям, с текстовым поиском из описания объектов, с локальным поиском по удаленности от пользоателя. Фронтенд - NEXTJS, бекенд API ASP.NET с штатной ASP.NET Identity + PostgreSQL для учета пользователей. Проблема в том что гео объекты или точнее страницы о них, будут иметь неограниченное количество дополнтительных полей (свойств), но при этом поиск должен прводиться в одном пуле (наборе) объектов как по отдельным полям объектов так и по Geo. Какую базу данных выбрать для этого кроме PostgreSQL, это MongoDb или RavenDb или ...?
  • Вопрос задан
  • 115 просмотров
Подписаться 2 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Тут нет никакого выбора.

Первое, что надо понять - это что в "веб приложении", да ещё и с "архитектурой", должна быть база данных. Без неё просто не обойтись. А из всего перечисленного базой данных является только постргес.
(те, кто почему-то до сих пор не избавился от иллюзий, или просто стал жертвой незамысловатой рекламы, могут почитать, почему MongoDB базой данных не является).

Второе, что надо понимать - это что в нагруженных приложениях база данных никогда не используется одна сама по себе. Для выполнения различных дополнительных задач используются специализированные движки. Например
  • кликхаус для аналитики
  • редис для кэширования
  • эластик для поиска
  • сентри для логов
  • и так далее - вариантов масса

Соответственно, если говорить про базу данных, то выбор очевиден - Постгрес.
Но если речь про поиск, то так и надо формулировать - "что использовать для поиска по базе данных?". И тут ответ тоже будет очевидный - Эластик (ну или любой другой поисковый движок - солр, мантикора, и так далее). Который и будет искать по информации, хранящейся в базе данных.

Но это только если у вас действительно веб-приложение. Если же у вас стильный энергичный молодёжный стартап, целью которого является проесть деньги инвестора, то Монго - а ещё лучше Равен - будет идеальным выбором. Это же мечта любого говнокодера маститого разработчика - не нужно корпеть над структурой базы данных, мучиться с внешними ключами, вдумчиво расставлять индексы - а просто валить всё в одну кучу!
Ответ написан
В postgres можно искать по геоиндексам при помощи postgis.
Для текстового поиска по описанию в постгресе есть полнотекстовый поиск.
Произвольные поля можно добавить через колонку с jsonb.

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

Войдите, чтобы написать ответ

Похожие вопросы