|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|
SQLIte странное поведение при вставке16.03.2018, 02:23. Показов 2156. Ответов 10
Метки нет (Все метки)
Здравствуйте! Использую SQLIte, вместе с C#, и понадобилось мне в один прекрасный момент объеденить несколько баз данных, которые накопили приложения. Вопрос - фигня. Накатал программу, бд сложил в одну папку, программа отработала, и, всё бы ок, вот только появился странный косяк. При добавлении данных из разных баз в одну, я использовал команду "INSERT OR IGNORE INTO ...", которая, по идее должна была вставлять строки только в том случае, если их не было ранее. Вот только, в результате, я получил ~5,5 тысяч дублирующихся строк! Единственное, на что я сейчас грешу - я в каждом INCERT-е добавлял за раз по 1000 значений. Подскажите пожалуйста, в чём могла быть проблема, из-за которой такое произошло?
Добавлено через 10 минут Update: сейчас проверил - в базах, которые были сделаны программами тоже куча дублей =_=. Там использовался тот же самый "INSERT OR IGNORE INTO 'table' ('a', 'b', 'c', 'd', 'e', 'f', 'g') VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}'), ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}') ..." и так далее, с тысячей строк... Добавлено через 2 часа 27 минут Update2: Да, с вероятностью в много процентов (первый тест прошёл, если вся база очистится от дублей, посредством программы, то вероятность будет в 100%), причиной косяка было именно использование множества строк с параметрами.
0
|
|
| 16.03.2018, 02:23 | |
|
Ответы с готовыми решениями:
10
SQLite 3. Странное поведение субд на стареньком компьютере Странное поведение sqlite - database is locked в 50% случаев Как сделать наиболее точные замеры производительности SQLite при вставке данных |
| 16.03.2018, 07:26 | |
|
https://stackoverflow.com/ques... re-to-work
посмотри тут
0
|
|
|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|
| 16.03.2018, 07:45 [ТС] | |
|
qwertehok, У меня есть идентификатор в таблице, который является "Primary Key". Более того, Само дублирование работает очень странно. Из 4 миллионов записей, набранных 4 программами, за разные периоды, получилось всего 1,6 миллиона записей (т.е. большинство вставок, с игнорированием выполнялось корректно), но, при этом, всё равно оказалось около 5,5 тысяч записей, которые дублировали другие (при этом, если у записи был дубль, тто только один).
0
|
|
|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|||||||||||
| 16.03.2018, 09:01 [ТС] | |||||||||||
|
qwertehok, 4 ляма записей в 4 файлах бд. Там просто протупили изначально, в итоге решили всё на сервер переносить, в итоге, нужно было собрать все полученные до этого данные воедино.
Добавлено через 1 час 10 минут Да, теперь могу сказать совершенно точно - косяк возникал из-за конструкции:
Переход на несколько (в одной транзакции):
0
|
|||||||||||
|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|
| 16.03.2018, 18:00 [ТС] | |
|
qwertehok, ну, в программе, которая объединяла БД, я так и сделал. Вот только, в рабочую программу у меня данные поступают пачками, по 1000 строк, среди которых - повторяющиеся, раз в 30 секунд. Вы предлагаете и в ней убрать "INCERT OR IGNORE", чтобы делать по 2 запроса, для каждой из поступивших строк? Или же, мне нужно будет выгружать все записи в память, затем сравнивать с поступившими, на предмет дублей, и только потом писать в бд? Тогда на кой она вообще будет нужна?
Добавлено через 41 минуту UPD. Спросоня криво прочитал, сорри. Но опять же, что за наркомания вообще? Т.е. вы предлагаете 1000 записей, втыкать во временную таблицу, запрашивать оттуда уникальные, затем, вставлять их в основную таблицу, и удалять из временной?
0
|
|
|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|
| 16.03.2018, 18:55 [ТС] | |
|
qwertehok, вот только мой вариант ПРАВИЛЬНЫЙ, с точки зрения логики. Если СУБД поддерживает возможность игнорирования при вставке, то по какой причине (кроме того, что это реализовано через жопу) я не должен пользоваться этой возможностью, а навешивать дополнительный лишний код, который будет выполнять ту же самую функцию?
0
|
|
|
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
|
|
| 17.03.2018, 07:43 [ТС] | |
|
qwertehok, честно говоря, я просто решил не изобретать велосипед, когда под рукой было готовое стандартное решение. Честно говоря, опыт работы с бд у меня не особо обширный - до этого дело имел только с мускулем, для PHP-шных сайтов, а тут понадобилось в программе работать с большим массивом данных, вот и выбрал встраиваемую БД (сервер изначально даже не предполагался). А в итоге, у меня сейчас дико странная вещь, от которой у меня скоро нервный тик начнётся. Суть в чём - та программа, которую я сделал для объединения бд, отрабатывает верно - дубли не создаются. Но, как только я файл БД перекидываю в основную программу, и запускаю - начинают появляться дубли. И, основная заковыка в том, что класс, который содержит всю работу с БД и там и там идентичен! Просто в "объеденителе" сначала идёт считывание всей бд в память, в кастомный тип данных, а в основной программе - эти данные поступают уже в ходе работы. Сохранение идёт полностью одинаково. Вот только, в одном случае дубли появляются, а в другом - нет.
0
|
|
| 17.03.2018, 07:43 | |
|
Помогаю со студенческими работами здесь
11
Странное поведение при буте Странное поведение при отладке Странное поведение ПК при старте Странное поведение при делегировании Странное поведение при загрузке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|