Комплекс SELECT в Tarantool

Есть два пробела с именами, например, Company и Cars. В пространстве Company есть поля идентификатора компании (первичный индекс) и геолокации (точка) (вторичный индекс). В пространстве Cars есть машина (первичный индекс) и компании (массив всех компаний, у которых можно арендовать этот автомобиль). Мне нужно найти топ-10 компаний в указанном прямоугольнике, где можно арендовать конкретный автомобиль. Какое (если можно так сказать) лучшее решение для достижения этой цели?

Здесь мне нужно совместить пространственные и непространственные индексы, чтобы получить результат. Мой план поиска состоит в том, чтобы найти кортеж автомобилей и получить все компании (их может быть 1000), а затем в другом месте отфильтровать 10 из указанного прямоугольника.

Мой вариант использования чем-то похож на этот (не вариант использования аренды автомобиля), но вся логика одинакова. Компаний будет намного больше, чем автомобилей (миллионы компаний и 300-500 тысяч автомобилей). Как оптимизировать мой план, чтобы получить эту информацию, какие индексы использовать и т. Д.? Как видите, для одного select нужны пространственные и непространственные условия.


person Aleksandar    schedule 04.05.2016    source источник
comment
«Топ 10 компаний в указанном прямоугольнике» - каковы критерии «топ-10» для компании? показатель?   -  person Vasiliy Soshnikov    schedule 05.05.2016
comment
@VasiliySoshnikov В результирующем наборе будут сотни результатов. Верните 10-50 локаций, ближайших к центру прямоугольника.   -  person Aleksandar    schedule 05.05.2016
comment
Чтобы не дублировать ответ, вот ссылка, которая объясняет это: stackoverflow.com/a/63885927/13626536   -  person Konstantin Nazarov    schedule 15.09.2020


Ответы (1)


Я думаю, что лучшей стратегией для этого типа индекса было бы сопоставление ваших машин с точками в другом измерении, достаточно удаленными друг от друга. Например. Если ваш типичный поиск находится в пределах нескольких квадратных километров, убедитесь, что каждая машина находится на расстоянии не менее нескольких десятков километров от ближайшего соседнего автомобиля. Тогда вы можете использовать наш многомерный индекс RTREE для поиска.

person Kostja    schedule 05.05.2016
comment
Если я хорошо понял: этот подход к отображению автомобилей не подходит, потому что нет способа сделать такое расстояние между ними. Компании (и машины) расположены очень близко друг к другу, максимум на несколько сотен метров, но может и на десятки метров. Во-вторых, одну машину можно арендовать в сотнях компаний, поэтому я не понимаю, как добавить третье измерение в индекс. - person Aleksandar; 05.05.2016