У меня есть большие таблицы базы данных, которые содержат ссылки на сетки (X и Y), связанные с различными объектами (каждый с уникальным идентификатором объекта), когда они движутся со временем. Объекты движутся примерно с постоянной скоростью, но в произвольных направлениях.
Таблица выглядит примерно так ...
CREATE TABLE positions (
objectId INTEGER,
x_coord INTEGER,
y_coord INTEGER,
posTime TIMESTAMP);
Я хочу найти, какие два объекта оказались ближе друг к другу и в какое время.
Найти расстояние между двумя исправлениями относительно легко - простой Пифагор для различий между значениями X и Y должен помочь.
Первая проблема, похоже, связана с объемом. Сетка сама по себе большая, 100 000 возможных X-координат и такое же количество Y-координат. Для любого заданного периода времени таблица может содержать 10 000 ссылочных позиций сетки для 1000 различных объектов - всего 10 миллионов строк.
Само по себе это не так уж много, но я не могу придумать, как избежать «запроса продукта», чтобы сравнить каждое исправление с любым другим исправлением. Выполнение этого с 10 миллионами строк даст 100 миллионов результатов.
Следующая проблема заключается в том, что меня интересуют не только два ближайших исправления, но и два ближайших исправления из различных объектов.
Другая проблема заключается в том, что мне нужно сопоставлять время и положение - меня интересуют не только два объекта, которые посетили один и тот же квадрат сетки, они должны были сделать это в то же время .
Другой момент (может не относиться к делу) состоит в том, что предметы вряд ли будут занимать одно и то же место в одно и то же время.
Я получил простой запрос продукта с несколькими образцами строк, но я не уверен в своих следующих шагах. Я начинаю думать, что это не то, что я могу осуществить одним SQL-запросом (пожалуйста, докажите, что я не прав), и мне, вероятно, придется извлечь данные и подвергнуть их некоторому процедурному программированию.
Есть предложения?
Я не уверен, для какого форума SE это лучше всего подходит - база данных SQL? Программирование? Математика
ОБНОВЛЕНИЕ - Еще одна проблема, которая добавляет сложности: временная метка для каждого объекта и позиции нерегулярна, у одного элемента может быть позиция, записанная в 14:10:00, а другая - в 14:10:01. Если эти две позиции находятся рядом друг с другом и на расстоянии одной секунды, то они могут фактически представлять ближайшую позицию, хотя время не совпадает!