|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
||||||
Не работает DELETE для "повторяющихся" строк19.02.2024, 20:51. Показов 5343. Ответов 134
Здравствуйте, добрые люди!
Долго колупался с ускорением заполнения базы и доколупался до хорошей для меня скорости наполнения, однако без граблей не обошлось, когда я опустил проверки на точность параметров при замене данных получил дублирование для одного набора ключей записей с разной точностью. Исходная тема (Импорт данных из файла в БД) короткая, да и проблема видна когда пытаюсь отладить макрос в самой БД. Как видно из запроса есть 5 ключевых параметров и пара значимых полей в записи - это значение и его точность. Чтобы было понятно, чем больше число тем ниже точность. Итак нашел я замечательный пример и попробовал состряпать свой запрос на удаление повторяющейся записи с меньшей точностью. Для начала изобразил выборку, абы проверить правильно ли выбирает, оставил в последствии только те записи, что подлежат удалению:
0
|
||||||
| 19.02.2024, 20:51 | |
|
Ответы с готовыми решениями:
134
Клавиша delete не работает,а вот shift + delete работает 1. Реализовать функции для вставки и удаления строк аналогичные процедурам Insert и Delete в Турбо-Паскале.
|
|
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
|
|
| 22.02.2024, 11:51 | |
|
0
|
|
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|||
| 22.02.2024, 11:56 [ТС] | |||
|
Добавлено через 2 минуты
0
|
|||
|
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
|
|||
| 22.02.2024, 12:02 | |||
|
Я предпочитаю явно описывать индексы, чтобы их было видно. В данном случае без разницы, как хотите.
0
|
|||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
||
| 22.02.2024, 12:26 [ТС] | ||
|
Добавлено через 2 минуты Сделал индексы, размер базы вырос на треть, загрузка второго пакета в полтора раза... Пожалуй несколько улучшилась скорость расчетов, но к сожалению не засек без индексации
0
|
||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
|||||||||||
| 22.02.2024, 13:14 | |||||||||||
|
Новая стратегия родилась, которая позволит уменьшить объем обновляемых данных (в теории). Создаем следующий индекс (см картинку). Данные пишем сразу в Weather. Но перед наполнением очередной пачки делаем запись в дополнительную таблицу Weather_Update с полями (ID_MD,DT,Source). После того как все пачки загружены (или только часть) запускаем запрос на вычистку данных из Weather.
0
|
|||||||||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
|||||||||||
| 22.02.2024, 13:48 | |||||||||||
|
Индексировать можно после загрузки разово. т.е. перед загрузкой выполняем команду удалить индекс
Плюс есть неплохие расширения для работы с географическими координатами, в том числе пространственные индексы
0
|
|||||||||||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|||||
| 22.02.2024, 15:12 [ТС] | |||||
|
Есть организационные ограничения: у меня скажем так еще 3 направления работы, 1 из которых требует программирования, но связанное с моделированием, а окромя самой программы, надо провести моделирование, оценку результатов, выработку рекомендаций, ах да не забыть про еще 2 направления... и так по кругу... Учитывая, что я никогда не работал с SQLite, как впрочем и пару лет назад с ACCESS... Я не уверен, что успею, а когда я не уверен - просто не берусь делать Добавлено через 6 минут Я видел, что такое применяется, но что-то мне подсказывает, что прыжки с инициализацией запросов как бы не оказались по времени соизмеримыми с предварительной проверкой данных из базы Добавлено через 5 минут Добавлено через 23 минуты Лучше все же вариант с записью и последующей фильтрацией мусора Тем более что фильтровать нужно данные только с текущей даты обновления - 1 условие в блоки СЕЛЕКТ и работа будет всегда с текущим пакетом обновления! Исторические данные считаем чистыми - ибо они не обновляются и уже очищены
0
|
|||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
||||||||||||||||
| 22.02.2024, 15:14 | ||||||||||||||||
|
Итак результаты тестов на SQLite.
Исходные данные таблица Weather из поста Meteo602Форум.mdb сохранена в формате CSV. Всего 616746 строк. Далее игрался через консоль sqlite-tools-win-x64-3450100.zip. Создаем новую БД
0
|
||||||||||||||||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
||
| 22.02.2024, 15:20 [ТС] | ||
|
0
|
||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
|||
| 22.02.2024, 15:25 | |||
0
|
|||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|||||
| 22.02.2024, 15:38 [ТС] | |||||
|
Но открыть-прочитать-отфильтровать-закрыть нужно все равно 21500 файлов + 2000 файлов декодировать, а если качество низкое еще и интерполировать (хорошо что линейно, а лучше бы квадратично) и это никак не исключить из процесса. Поэтому борьба за секунды она только для красоты. Я сократил время на загрузку в 10-20 раз (30-60 минут) приняв допустимым кидать в БД мусор, а потом его скопом отфильтровать и из этого родилась сама ТЕМА. Сейчас мы пытаемся нарушить правило: "лучшее - ВРАГ хорошего" Добавлено через 2 минуты Я спрашивал можно ли эти ОПЕРАЦИИ обернуть в условия? Добавлено через 1 минуту
0
|
|||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
|||
| 22.02.2024, 15:46 | |||
Поэтому и предложил что если при вставке данных будет нарушение по уникальному индексу (ID_MD, DT, LAT, LAN, SOURCE). нужно обновить эту строку, но только в том случае если у вставляемого значения (excluded) качество выше (excluded.Qual < Weather.Qual) или же в случае, если качество то же самое (excluded.Qual = Weather.Qual) данные более свежие (excluded.UDT > Weather.UDT). т.е. исходить не из того что нужно удалять не актуальные данные. а из того что их нужно обновить. Попробуйте через обработку исключения повторить то же самое что сделано на триггере. Еще хотелось бы уточнить, перед началом обновления БД Вы начинаете явно транзакцию?
0
|
|||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
||
| 22.02.2024, 15:50 [ТС] | ||
|
Скажу еще когда я пробовал забить таблицу без фильтрации (удаления областей с устаревшими данными или низким разрешением) - 2 минуты с фильтрацией 4 минуты при индексировании 6 минут (и то по невнятным причинам) итого мы пытаемся биться в самом лучшем случае за 4 минуты, а вообще уйти от дополнительных 2 минут.
Сама идея с дополнительной таблицей хороша по принципу накопления изменений и быстрого их применения - внешние триггеры для этого имеются, в то время как основная таблица может использоваться пользователями... НО все равно но - база 1 а значит будет узкое горлышко Добавлено через 1 минуту Только в этом случае невозможно без предварительной проверки пихнуть туда новые данные
0
|
||
|
Модератор
|
||
| 22.02.2024, 15:51 | ||
|
пока одни загадки, но решить задачу, не поняв ее - невозможно время не самый важный критерий решения
0
|
||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
| 22.02.2024, 15:51 [ТС] | |
|
0
|
|
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
||||||||
| 22.02.2024, 15:55 | ||||||||
В исключении мы уже точно знаем что для данного картеже есть данные. поэтому делаем его апдейт но с дополнительным условием на актуальность. Посмотрите запрос. т.е. если данные которые уже лежат в таблице актуальные, то будет обновлено 0 строк. Если новые данные лучше чем были, то будет обновлена 1 строка.
0
|
||||||||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
||
| 22.02.2024, 15:56 [ТС] | ||
|
При том что данные пакуются нестандартной длиной битов
0
|
||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|||
| 22.02.2024, 16:13 [ТС] | |||
|
На самом деле тогда нужно переворачивать, ибо замена данных встречается чаще чем вставка Я почему и хотел использовать внешнее условие но там будет бред с количеством передаваемых параметров Добавлено через 12 минут Вот теперь мне кажется, что DT - дата на которую прогноз необоснованно воспринимается выше UDT, хотя это просто координата данных как LAT и LON
0
|
|||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
|
||
| 22.02.2024, 16:14 | ||
Хотя, если ловить исключение на инсерте, по которому ни чего не делать, то жизнеспособное решение.
0
|
||
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
||
| 22.02.2024, 16:16 [ТС] | ||
|
преимущество вообще АПДЕЙТ в том что ключ не будет затронут, но он и не нужен будет, вот только скорость... я в начале пути читал из таблицы и если было пусто ИНСЕРТил, а вместо значения АПДЕЙТил если условия выполнялись итого 30 - 60 минут... неужели через исключение будет в 20 раз быстрее?
0
|
||
| 22.02.2024, 16:16 | |
|
Для линейного вещественного массива найти произведение всех повторяющихся и не повторяющихся элементов Как вызвать "Delete" для строк?
Почему не работает Update, но работает аналогичный Delete?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|