powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Оптимальный поиск по двум полям
15 сообщений из 15, страница 1 из 1
Оптимальный поиск по двум полям
    #36979772
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Хочется как всегда странного, а именно, у меня есть мильён объектов вида (Ид, Долгота, Широта). Теперь хочется найти те объекты которые попадают в заданную прямоугольную область. Другими словами надо найти объекты у которых А<широта<В, С<долгота<Д
Как оптимально искать, абстрагируясь от конкретных БД вообще и SQL в частности. Что мне приходит в голову, отсортировать все объекты к примеру по долготе, бинарным поиском находить границы для долготы, а затем все объекты в этих границах проверять на широту. Вопрос - можно как то задействовать второй индекс, чтобы не перебирать все объекты? Как вообще базы ищут в таких ситуациях?

Спасибо
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36979796
Фотография lLocust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximSpb,

обычно создается индекс по двум полям и задаются условия на запрос А<широта<В, С<долгота<Д
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36979879
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базах использующих SQL (декларативный язык) не интересуются как искать, а пишут только что искать - условия, но при этом осознавая, как все же происходит поиск "помогают" БД - делают индексы
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36979892
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может партицирование наложить, тогда своего рода некие области будут по широте-долготе.
Это если можно более менее прямоугольную сетку наложить на ваши координаты и в этом будет логика.
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36979909
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximSpbЧто мне приходит в голову, отсортировать все объекты к примеру по долготе, бинарным поиском находить границы для долготы,
А создание индекса, который хранится в виде бинарного дерева, не реализует эту идею автоматически ?
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36980340
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonА создание индекса, который хранится в виде бинарного дерева, не реализует эту идею автоматически ?

можно и так, просто если хранить в виде простого отсортированного по широте массива, достаточно найти нижнюю границу бинарным поиском и двигаться последовательно вверх пока широта не превысит максимального значения. и еще просто не уверен что помню как быстро передвигаться от элемента к элементу в дереве. но это все тех. детали. не ясно главное, а именно как задействовать второй индекс.
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36980341
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lLocustMaximSpb,

обычно создается индекс по двум полям и задаются условия на запрос А<широта<В, С<долгота<Д

есть понимание как это внутри работает?
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36980346
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexGruМожет партицирование наложить, тогда своего рода некие области будут по широте-долготе.
Это если можно более менее прямоугольную сетку наложить на ваши координаты и в этом будет логика.

думаю сейчас про это, но как то все корявенько получается
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36980402
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximSpb,

по Винипегии

ДОЛГОТА - анг. Longitude Значок долготы
Долгота делится на западную и восточную. Отсчитывается от нулевого меридиана, в диапазоне от 0° до 180°. Западная долгота считается отрицательной (от 0° до -180°), восточная положительной (от 0° до 180°).


Широта ШИРОТА - анг. Latitude Значок широты
Принято считать, что точки лежащие в южном полушарии являются отрицательными от 0° до -90°, а в северном полушарии положительными от 0° до +90°.


-возникшие вопросы
-единица измерения градус-мин-секформа представления в таблице 45^20'25'', или есть еще мельче-шаг по долготеразность С - Д-шаг по широтеразность А - В

иначе говоря: каково потенциальное количество объектов при типичном размере А-В-С-Д
-если 1 градус 1млн/180=5500 объект на градус по долготе
-если 1 минута ...............=90..............на..минуту................
............
это конечно общие знания,без знания вашей специфики
............
болтовня по другому говоря
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36982766
Фотография lLocust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximSpblLocustMaximSpb,

обычно создается индекс по двум полям и задаются условия на запрос А<широта<В, С<долгота<Д

есть понимание как это внутри работает?

Есть. А у Вас?

MaximSpbу меня есть мильён объектов вида (Ид, Долгота, Широта)
Это не много, у меня есть миллиард объектов вида (Ид,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...,...)

MaximSpbКак оптимально искать, абстрагируясь от конкретных БД вообще и SQL в частности. Т.е. Вас интересует как сделать свой поиск? а зачем, если не секрет?
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36983996
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximSpb,
авторотсортировать
а сортировать по широте или долготе собрался?
Иначе опять фулл скан, так сказать.....
Короче не морочте людям голову, все придумано до нас
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36986971
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lLocustЕсть. А у Вас?

нет поэтому и спрашиваю
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36986977
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan DurakMaximSpb,
авторотсортировать
а сортировать по широте или долготе собрался?
Иначе опять фулл скан, так сказать.....
Короче не морочте людям голову, все придумано до нас

да, сортирую по одному из параметров, а по второму получается фул скан чего и хочется избежать.
приходиться изобретать потому что запросов слишком много, база умирает
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36986981
MaximSpb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lLocust Т.е. Вас интересует как сделать свой поиск? а зачем, если не секрет?
слишком много запросов для базы
...
Рейтинг: 0 / 0
Оптимальный поиск по двум полям
    #36988154
Фотография lLocust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximSpb,

Для таких случаем покупают дополнительной оперативки и хранят базу в памяти.
Далее, как все это устроено в базе (если просто и на пальцах), то в виде дерева, уже отсортированного (примеров дофига искать по словам b-tree , ну да ладно), например в базе есть числа:

1368910111545

>9
/ \
>6 >11
/ \ / \
... ... ... ...
т.е. при поиске числа 11 мы его сравниваем с 9, потом с 11 и т.д. вниз по дереву пока не дойдем до него (это ищем нижнюю границу), потом так же ищем верхнюю границу, потом берем все числа внутри... лучше почитать Кайта, у него неплохо все описано... Если индекс по двум полям, то принцип тот же.

Далее, а что у вас за база? которую вы чуть ли не ручками сортируете, что бы потом по ней пробежаться?
Повторюсь, индексы работают по другому. и поиск по индексу более чем оптимальный (самому такой реализовать сложно..., да и нужно ли?)

Далее, 1 миллион - это не много, тем более, что информация у Вас довольно упорядочена и ее мало (всмысле 1 запись - это всего 3 числа), т.е. дерево индекса будет сбалансировано.
Просто сделайте индекс по двум полям (можно даже 2 индекса, по принципам ширина/долгота и долгота/ширина) и посмотрите планы запросов что получилось.
И количество запросов тут практически не при чем...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Оптимальный поиск по двум полям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]