Какую базу данных лучше всего выбрать для конкретной задачи?

Какую базу данных лучше всего использовать для хранения координат точек продаж и их типов товаров, с возможностью эффективного выполнения гео-запросов? Рассматривая большое количество запросов в районе 20k+, какую базу данных следует выбрать, чтобы обеспечить быстрое выполнение запросов и избежать потенциальных ограничений?
  • 4 февраля 2024 г. 15:48
Ответы на вопрос 3
Для хранения координат точек продаж и их типов товаров с эффективным выполнением гео-запросов лучше всего выбирать базу данных, которая специализируется на геопространственной информации и имеет оптимизированные индексы для работы с гео-данными.

Вот несколько опций, которые могут подойти вам:

1. **PostGIS**: расширение для PostgreSQL, которое добавляет поддержку геопространственных данных. PostGIS предоставляет мощные возможности для хранения и запросов и поддерживает большой набор геопространственных функций.

2. **MongoDB**: с версии 2.2, MongoDB включает поддержку гео-индексов и гео-запросов, что делает её подходящей для некоторых типов геопространственных задач. MongoDB также масштабируема и хорошо подходит для работы с большим объемом запросов.

3. **MySQL**: имеет поддержку простых гео-запросов и пространственных индексов начиная с версии 5.6. Если ваши требования к геопространственным функциям не слишком сложные, MySQL может быть достаточной.

4. **Elasticsearch**: хотя Elasticsearch не является традиционной базой данных, он предоставляет отличные возможности для полнотекстового поиска и геопространственных запросов. В случае большого количества запросов Elasticsearch может хорошо подойти благодаря своей производительности и возможностям масштабирования.

Выбор зависит от конкретных требований к задаче:

- Если вам нужна максимально мощная и гибкая поддержка геопространственных данных, выбирайте **PostGIS**.
- Если вы предпочитаете документо-ориентированное хранилище с разумной поддержкой геозапросов, а также планируете работу в NoSQL-среде, то **MongoDB** может быть хорошим выбором.
- Для простых геопространственных задач и если база уже использует **MySQL**, можно использовать её пространственные возможности.
- Если вам необходимо быстро индексировать большие объемы данных и предоставлять высокопроизводительный поиск, включая геопространственный, тогда **Elasticsearch** может быть идеальным выбором.

Для работы с большим количеством запросов важно также учитывать архитектуру вашей системы и возможности масштабирования базы данных. Убедитесь, что база данных, которую вы выберете, поддерживает горизонтальное масштабирование (шардинг), имеет хорошее управление кэшем и способна обрабатывать высокую нагрузку.
информация без оснований от людей которые с одной стороны ругают mysql, но при этом ни слова о том, почему на mysql часто работают мировые сервисы.
/)_-)

Вместо того чтобы писать кучу лирики, тебе всего лишь надо сесть и изучить какие есть расширения для работы с гео данными, например, у postrgesql есть PostGIS, для mysql наверно тоже что-то есть. Учись уже самостоятельности
Postgresql так вполне может. 
1. Типы товаров в одну таблицу.
2. Точки продаж в другую.
3. Связь между типами товаров и точками - как третью таблицу.
4. На точки продаж - геоиндекс.

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

Получается обычный JOIN + where

https://postgis.net/
Похожие вопросы