У меня есть коллекция MongoDB, содержащая такие атрибуты, как:
longitude, latitude, start_date, end_date, price
У меня более 500 миллионов документов.
Мой вопрос заключается в том, как максимально эффективно выполнять поиск по широте / долготе, диапазону дат и цене?
Как я вижу, мои варианты:
- Создайте геопространственный индекс по широте / долготе и используйте поиск близости MongoDB ..., а затем отфильтруйте его на основе диапазона дат и цены.
- Мне еще предстоит проверить это, но я беспокоюсь, что объем данных будет слишком большим для быстрого поиска, когда у нас примерно 1 поиск в секунду.
- У вас был опыт того, как MongoDB отреагирует в этих обстоятельствах?
- Разделить данные на несколько коллекций по местоположению. то есть по таким городам, как london_collection, paris_collection, new_york_collection.
- Затем мне нужно будет сначала выполнить запрос по широте / долготе, найти коллекцию ближайших городов, а затем выполнить пространственный поиск MongoDB по этим данным подмножества в этой коллекции с фильтрами даты и цены.
- У меня было бы неравномерное распространение документов, поскольку в некоторых городах было бы больше документов, чем в других.
- Создание коллекций по датам, а не по местоположению. То же, что и выше, но каждому документу выделяется коллекция на основе диапазона дат.
- проблема с поиском с диапазоном дат, который охватывает несколько коллекций.
- Создание уникальных идентификаторов на основе city_start_date_end_date для каждого документа.
- Опять же, мне пришлось бы использовать свой лат / длинный запрос, чтобы найти ближайший город, добавить диапазон дат для доступа к ключу. Это кажется довольно быстрым, но мне не очень нравится внешний вид города ... кажется немного уродливым.
Я сейчас экспериментирую с вариантом 1.) но очень хотелось бы услышать ваши идеи, прежде чем я зайду слишком далеко по одному конкретному пути?
Как поисковые системы разделяют свои данные и управляют ими ... это должно быть похожая проблема?
Также мне не нужно использовать MongoDB, я открыт для других опций?
Большое спасибо.