powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Изменение значений ключевого поля
13 сообщений из 13, страница 1 из 1
Изменение значений ключевого поля
    #40122973
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе данных SQlite есть основная и связанные по полю id таблицы.
id new_id@1@ 1@3@ 2@4@ 3
Ключевое поле id заполняется из внешнего файла, а поле new_id заполняется автоматически.
Требуется заменить значения id в основной и связанных таблицах значениями из поля new_id.
Если количество данных несколько сотен, то время выполнения замены в цикле небольшое – сотни миллисекунд. А если несколько тысяч время возрастает до десятков секунд. Перед выполнением транзакцию включаю.
Есть ли другой, более быстрый алгоритм?
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123101
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_New
В базе данных SQlite есть основная и связанные по полю id таблицы.
id new_id@1@ 1@3@ 2@4@ 3

Ключевое поле id заполняется из внешнего файла, а поле new_id заполняется автоматически.
Требуется заменить значения id в основной и связанных таблицах значениями из поля new_id.Не стоит.
Просто объяви загружаемое поле уникальным и делай связь по нему.

Как вариант, можно загружать все приезжающие данные в "вспомогательные ETL таблицы", и по окончанию загрузки делать копирование из этих таблиц в основные.
А там можно развернуться - копировать только новые данные, копировать данные как объекты с полной сменой схемы хранения. Можно будет сделать полную проверку данных на целостность перед копированием в основные таблицы.
И многое-многое другое.
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123106
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Не стоит.
Просто объяви загружаемое поле уникальным и делай связь по нему.

Спасибо!
Наверное, так и придётся поступить. Сложность в том, что в связанные таблицы так же имеют свои уникальные поля, которые нужно аналогично упорядочить. Чёрт ногу сломит :)
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123109
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_New
Если количество данных несколько сотен, то время выполнения замены в цикле небольшое – сотни миллисекунд. А если несколько тысяч время возрастает до десятков секунд. Перед выполнением транзакцию включаю.
Есть ли другой, более быстрый алгоритм?

Или делай порциями по несколько сотен в одной транзакции или размер кэша увеличь
Код: sql
1.
PRAGMA cache_size = 100000; 
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123110
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО тут ошибка в проектировании. Ненормально когда ID постоянно меняется. Если не можешь повлиять на внешнюю БД откуда данные подгружаешь, то не используй внешний ID как ключ в своей БД. Заведи собственный ID, используй его как ключ, а тот внешний просто пиши в обычное поле, например EXTERNAL_ID. Тогда при загрузке тебе надо будет только EXTERNAL_ID заменить.
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123111
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
ИМХО тут ошибка в проектировании. Ненормально когда ID постоянно меняется. Если не можешь повлиять на внешнюю БД откуда данные подгружаешь, то не используй внешний ID как ключ в своей БД. Заведи собственный ID, используй его как ключ, а тот внешний просто пиши в обычное поле, например EXTERNAL_ID. Тогда при загрузке тебе надо будет только EXTERNAL_ID заменить.

Для понимания задачи:
Данные загружаются из текстового файла. Данные ключевых могут быть не упорядочены. При работе с БД это несущественно, т.к. значения ключевых полей не нужно отображать. Так же при работе некоторые данные м.б. добавлены или удалены. Важно при обратном преобразовании в текстовый файл, что бы значения ключевых полей были упорядочены.
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123168
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_New
Dima T
ИМХО тут ошибка в проектировании. Ненормально когда ID постоянно меняется. Если не можешь повлиять на внешнюю БД откуда данные подгружаешь, то не используй внешний ID как ключ в своей БД. Заведи собственный ID, используй его как ключ, а тот внешний просто пиши в обычное поле, например EXTERNAL_ID. Тогда при загрузке тебе надо будет только EXTERNAL_ID заменить.

Для понимания задачи:
Данные загружаются из текстового файла. Данные ключевых могут быть не упорядочены. При работе с БД это несущественно, т.к. значения ключевых полей не нужно отображать. Так же при работе некоторые данные м.б. добавлены или удалены. Важно при обратном преобразовании в текстовый файл, что бы значения ключевых полей были упорядочены.

Похоже ты не понимаешь что хранение данных и вывод это две разные задачи, выводить можно как угодно, независимо от структуры хранения.
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123173
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Похоже, ты не понимаешь суть задачи.
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123184
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_New
Dima T,
Похоже, ты не понимаешь суть задачи.
Остановись.

У тебя типичная ETL задача. Тебе нужно читать учебники по ETL, их в книжных мало, но есть. Могу дать ссылку на амазон: https://www.amazon.com/Data-Warehouse-ETL-Toolkit-Techniques-Extracting/dp/0764567578

Если тебе не нравится перспектива переделки всех связей на существующей базе, то повторюсь: загружай свои внешние данные в промежуточные таблицы. А потом вдумчиво раскидывай данные по основным.
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123190
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
Понятно, и спасибо за ссылку!
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123204
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_New
Dima T,
Похоже, ты не понимаешь суть задачи.

https://www.youtube.com/watch?v=wGp2K8YhH6o
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40123219
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
И как я уже написал, мне кажется что эту задачу можно решать по другому.

Всё верно. Эту задачу оказалось легче решить используя не SQL, а классы в своей БД.
Спасибо всем за участие!
...
Рейтинг: 0 / 0
Изменение значений ключевого поля
    #40124243
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_New
Dima T
И как я уже написал, мне кажется что эту задачу можно решать по другому.

Всё верно. Эту задачу оказалось легче решить используя не SQL, а классы в своей БД.
Спасибо всем за участие!


извините! я тут так хохотался :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Изменение значений ключевого поля
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (3): Анонимы (1), Bing Bot 7 мин., Yandex Bot 8 мин.
Пользователи онлайн (7): Анонимы (5), Yandex Bot, Bing Bot
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]