![]() |
|
![]() ![]() ![]() |
|
Матроскин |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 24.6.2004 Где: Владивосток Репутация: нет Всего: нет |
Дело в том, что я уже месяц делаю программу по японскому морю. Сущность в том, что бы проставить на карте точки и получить отчёт - скорости звука в этих точках на разных глубинах. Но, как вы понимаете, проставить точки на карте в точности в том месте, которому соответствует запись в БД нереально. Поэтому метод простой - подбираем ближайшую существующую точку в БД.
Таблица данных имеет 1'200'000 записей. Структура: id lat - широта lon - долгота deep - глубина velo - скорость звука be - номер дня в году, с которого началось измерение ee - -||- в котором закончилось измерение (они все длились ровно месяц) Т.о. задача такова: вход: lat_u, lon_u - координаты точки пользователя в морских координатах Например lat_u = 43.0 lon_u = 134.0 Выход lat_u = 43.3 lon_u = 134.34 Вот так господа |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 2 Всего: 64 |
Примерно так - я не проверял это код, но думаю идея понятна. Да, и в функции GetRealSeaPosition нет проверки на случай если точка не будет найдена - учти это. Добавлено @ 19:33 И еще одно замечание - у тебя 1 200 000 записей в базе. Даже если ты сделаешь индекс по полям lat и lon, то учитывая что проверка идет на больше\меньше, то индесы работать не будут, если я правильно помню одну статью - прийдется тут чего то выдумывать. Это сообщение отредактировал(а) <Spawn> - 22.8.2004, 20:00 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Матроскин |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 24.6.2004 Где: Владивосток Репутация: нет Всего: нет |
Спасибо, как проверю сразу сообщу.
|
|||
|
||||
Матроскин |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 24.6.2004 Где: Владивосток Репутация: нет Всего: нет |
Да, работает. Но как тороз-з-з-з-ит! Около 7 секунд одну выборку! Лодку сто раз торпеда потопит, пока эта программа выдаст отчёт. (Шутка) Итого у меня получается 20 выборок.
Тормоззз идёт две минуты. Это сообщение отредактировал(а) Матроскин - 24.8.2004, 20:40 |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 2 Всего: 64 |
Матроскин Думай чего то с индексами.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Или ставь какой-нибудь SQL - они обычно заточены на базы и работают гораздо быстрее, чем локальные базы большого размера. У тебя все-таки более миллиона записей. |
|||
|
||||
Матроскин |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 24.6.2004 Где: Владивосток Репутация: нет Всего: нет |
Всё таки единственный выход, который я вижу это использование индексов. Как только найду решение сразу выложу. |
|||
|
||||
Матроскин |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 24.6.2004 Где: Владивосток Репутация: нет Всего: нет |
Мужики оно работает!
Создаём комплексный индекс по полям Lat и Lon. Table1.IndexName := 'iLatLon'; Table1.FindNearest([SeaPosition.lat_u, SeaPosition.lon_u]); Ищет в доли секунды |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |