Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
Раньше я не писала таких сложных запросов, поэтому не могу придумать его стуктуру: Устройство, установленное на автомобиле, шлет свои координаты на сервер, и они складируются в базу данных (в одну из таблиц). В этой таблице есть координаты и дата прихода сигнала. Допустим устройство шлет данные раз в минуту. Значит, в час приходит 60 пакетов, а в сутки 24*60. Пусть теперь пользователь хочет отобразить положение автомобиля на карте за определенный период времени, например с 1 апреля по 30 апреля. Получается на карте надо отобразить огромное число точек из базы 30*24*60, это мне кажется не правильно. Плюс автомобиль мог стоять, например, сутки на стоянке, поэтому и координаты он будет присылать в эти сутки одни и те же. Это надо как-то предусмотреть и откинуть эти координаты. Помогите, пожалуйста, составить хранимую процедуру, кторая могла бы выбирать координаты прибора за определенный период (как пример с 1 апреля по 30 апреля) и с определенным интервалом (как пример 1 час)... или можно придумать такой SQL запрос? Мне кажется хранимая процедура лучше т.к. логика на сервере, но ее код я представляю очень смутно. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2008, 18:22 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
Если вы описали всю область применения, то вам незачем использовать БД вообще. Пишите себе в файлы, разделяйте их, например, по длям и машинам. А откинуть лишние координаты очень просто: надо сравнивать новую координату с предыдушей. Вообще-то, вариантов масса, все зависит от деталей вашей задачи. В любом случае, писать новую координату как запись в БД - не рационально, надо групировать в массивы, полигоны ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2008, 19:41 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
lena_kiПолучается на карте надо отобразить огромное число точек из базы 30*24*60, это мне кажется не правильно. Плюс автомобиль мог стоять, например, сутки на стоянке, поэтому и координаты он будет присылать в эти сутки одни и те же. Это надо как-то предусмотреть и откинуть эти координаты.совсем недавно читал про это, в компьютерре помоему :) GPS приёмники вычисляют координаты с погрешностью. то есть даже если машина стоит - координаты не будут одними и теми же - они будут плавать, например в виде хаотично разбросанных точек в круге диаметром допустим 50 метров. может быть иногда могут быть даже совсем "левые" координаты, например за орбитой луны %), у меня так градусник мерил температуру на улице: 23.4, 23.7, 25.2, -1.9, 23.3, 23.4 типа такого и с GPS приёмника будет идти lena_kiПомогите, пожалуйста, составить хранимую процедуру, кторая могла бы выбирать координаты прибора за определенный период (как пример с 1 апреля по 30 апреля) и с определенным интервалом (как пример 1 час)... или можно придумать такой SQL запрос? Мне кажется хранимая процедура лучше т.к. логика на сервере, но ее код я представляю очень смутно. :(я в математике не силён %) но Вам нужно обрабатывать не "сырые" данные, а уже "сглаженые" (по моему это называется "апроксимация" ?). делать это на лету запросом по моему очень расточительно. Вам нужно что-то из этого имхо: http://alglib.sources.ru/interpolation/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2008, 19:53 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
>Если вы описали всю область применения, то вам незачем использовать БД вообще. БД создано с таблицами Автомобиль-Водитель-Прибор. Созданы все связи, типа таблиц прибор_автомобиль (когда установлен и т.п.) и т.п. Есть отдельная таблица куда прибор присылает свои координаты и время. (см.рис.). Спец.приложение на сервере складирует эти сигналы в таблицу БД. Весь сервеный цикл организован и работает. Есть мое клиентское приложение. На нем две вкалдки: 1. Показать текущую позицию автомобитля на карте google. 2. Показать маршрут автомобиля за период времени и с заданным временным диапазоном (например 1 час). Пункт первый реализовала. Просто запрос на получения самой свежей записи для определнного автомобиля, который выбрал пользователь. Со вторым пунктом не знаю как оформить запрос.:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2008, 20:30 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
Вообще задача довольно интересная и не совсем реляционная. Я бы делал онлайн агрегирование данных, то есть по мере прихода точек усреднял бы их с нужным окном (или несколькими), применял бы нужную логику (например, зависимость от предыдущих координат и т.п.) и складывал бы в соответствующие таблицы. Для подобных целей придуманы потоковые системы управления базами данных -- поищите, например, TelegraphCQ (система на основе PostgreSQL). Либо можно организовать что-нибудь вроде очереди (см. PgQ) опять же с каким-либо усреднением и выбрасыванием точек самого низкого уровня. В любом случае суть проста: не храним все точки, обрабатываем их почти в онлайн и храним только результаты обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 01:27 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
я бы примерно делал так: 1. создатъ view который дает все нужные вам данные для позиционирования авто в данный момент времени Код: plaintext 2. далее создать саму процедуру которая будет выдавать несколько строк из этого view если дано avto_id, период времени и интервал в секундах. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 3. запрос должен выглядетъ примерно так Код: plaintext 1. 2. 4. Внутри процедуры вычислитъ кол-во интервалов в периоде Код: plaintext 5. Далее в цикле датъ n SELECT .. FROM avto_postion_view запросов (n= кол-ву интервалов). WHERE ..timestamp <= ... LIMIT 1. Ограничение времени в WHERE элементарно вычислитъ исходя из нального времени, позиции в цикле и величены интервала. Для цикла см. конструкцию RETURN NEXT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 01:55 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
lena_ki Пусть теперь пользователь хочет отобразить положение автомобиля на карте за определенный период времени, например с 1 апреля по 30 апреля. Получается на карте надо отобразить огромное число точек из базы 30*24*60, это мне кажется не правильно. Плюс автомобиль мог стоять, например, сутки на стоянке, поэтому и координаты он будет присылать в эти сутки одни и те же. Это надо как-то предусмотреть и откинуть эти координаты. 1. Отображать на карте такое количество точек бессмысленно. Человек просто не сможет разобраться в таком количестве информации. 2. Если человек задает интервал в днях, то и надо выводить информацию в днях. То есть область, где находилась машина. (Будем иметь несколько пересекающихся областей на карте) 3. При масштабировании области, переходить на более мелкий формат данных (часовые, минутные...). При этом нам уже понадобятся данные только внутри дня/часа. Вот как-то так.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 11:02 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
Cпасибо, попробую разобраться в написанном коде. >Если человек задает интервал в днях, то и надо выводить информацию в днях. Пользователю предоставлется для выбора в клиентском приложении три параметра. С какого дня, по какой день, временной период (10 минут, 1 час, сутки и т.п.). Такое вот требование... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 11:09 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
Я тут подумала об одно параметре. :) Прибор шлет широту, долготу, свой номер, и скорость автомобиля на котором прибор установлен. Может задействовать эту самую скорость? Раз скорость 0, значит автомобиль стоял и эти координаты можно откинуть? Это поможет облегчить всю логику построения кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2008, 11:42 |
|
||
|
Cложная хранимая процедура
|
|||
|---|---|---|---|
|
#18+
уточню: в моей схеме запрос отдает клиентскому приложению не все данные за период времени, а только количество данных кратное некому промежутку времени. Допустим с 1 по 30 апреля с промежутком в один час программе-клиенту будет отдано 30*24 координат точек. Для нахождения данных ХП потребуется ыполнить 30*24 СЕЛЕКТов в цикле. это в принципе нормально и долно работать очень быстро с условием что данные проиндексированны по времени. Для предотвращения черезмерной нагрузки на сервер баз промежуток времени можно задавать программно как отношение к периоду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2008, 00:06 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=264&tid=2004152]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 332ms |

| 0 / 0 |
