|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
В базе данных SQlite есть основная и связанные по полю id таблицы. id new_id@1@ 1@3@ 2@4@ 3 Ключевое поле id заполняется из внешнего файла, а поле new_id заполняется автоматически. Требуется заменить значения id в основной и связанных таблицах значениями из поля new_id. Если количество данных несколько сотен, то время выполнения замены в цикле небольшое – сотни миллисекунд. А если несколько тысяч время возрастает до десятков секунд. Перед выполнением транзакцию включаю. Есть ли другой, более быстрый алгоритм? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 17:09 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Sergey_New В базе данных SQlite есть основная и связанные по полю id таблицы. id new_id@1@ 1@3@ 2@4@ 3 Ключевое поле id заполняется из внешнего файла, а поле new_id заполняется автоматически. Требуется заменить значения id в основной и связанных таблицах значениями из поля new_id.Не стоит. Просто объяви загружаемое поле уникальным и делай связь по нему. Как вариант, можно загружать все приезжающие данные в "вспомогательные ETL таблицы", и по окончанию загрузки делать копирование из этих таблиц в основные. А там можно развернуться - копировать только новые данные, копировать данные как объекты с полной сменой схемы хранения. Можно будет сделать полную проверку данных на целостность перед копированием в основные таблицы. И многое-многое другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 01:56 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
White Owl Не стоит. Просто объяви загружаемое поле уникальным и делай связь по нему. Спасибо! Наверное, так и придётся поступить. Сложность в том, что в связанные таблицы так же имеют свои уникальные поля, которые нужно аналогично упорядочить. Чёрт ногу сломит :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 07:41 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Sergey_New Если количество данных несколько сотен, то время выполнения замены в цикле небольшое – сотни миллисекунд. А если несколько тысяч время возрастает до десятков секунд. Перед выполнением транзакцию включаю. Есть ли другой, более быстрый алгоритм? Или делай порциями по несколько сотен в одной транзакции или размер кэша увеличь Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 09:03 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
ИМХО тут ошибка в проектировании. Ненормально когда ID постоянно меняется. Если не можешь повлиять на внешнюю БД откуда данные подгружаешь, то не используй внешний ID как ключ в своей БД. Заведи собственный ID, используй его как ключ, а тот внешний просто пиши в обычное поле, например EXTERNAL_ID. Тогда при загрузке тебе надо будет только EXTERNAL_ID заменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 09:55 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Dima T ИМХО тут ошибка в проектировании. Ненормально когда ID постоянно меняется. Если не можешь повлиять на внешнюю БД откуда данные подгружаешь, то не используй внешний ID как ключ в своей БД. Заведи собственный ID, используй его как ключ, а тот внешний просто пиши в обычное поле, например EXTERNAL_ID. Тогда при загрузке тебе надо будет только EXTERNAL_ID заменить. Для понимания задачи: Данные загружаются из текстового файла. Данные ключевых могут быть не упорядочены. При работе с БД это несущественно, т.к. значения ключевых полей не нужно отображать. Так же при работе некоторые данные м.б. добавлены или удалены. Важно при обратном преобразовании в текстовый файл, что бы значения ключевых полей были упорядочены. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 10:59 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Sergey_New Dima T ИМХО тут ошибка в проектировании. Ненормально когда ID постоянно меняется. Если не можешь повлиять на внешнюю БД откуда данные подгружаешь, то не используй внешний ID как ключ в своей БД. Заведи собственный ID, используй его как ключ, а тот внешний просто пиши в обычное поле, например EXTERNAL_ID. Тогда при загрузке тебе надо будет только EXTERNAL_ID заменить. Для понимания задачи: Данные загружаются из текстового файла. Данные ключевых могут быть не упорядочены. При работе с БД это несущественно, т.к. значения ключевых полей не нужно отображать. Так же при работе некоторые данные м.б. добавлены или удалены. Важно при обратном преобразовании в текстовый файл, что бы значения ключевых полей были упорядочены. Похоже ты не понимаешь что хранение данных и вывод это две разные задачи, выводить можно как угодно, независимо от структуры хранения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 15:59 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Dima T, Похоже, ты не понимаешь суть задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 16:18 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Sergey_New Dima T, Похоже, ты не понимаешь суть задачи. У тебя типичная ETL задача. Тебе нужно читать учебники по ETL, их в книжных мало, но есть. Могу дать ссылку на амазон: https://www.amazon.com/Data-Warehouse-ETL-Toolkit-Techniques-Extracting/dp/0764567578 Если тебе не нравится перспектива переделки всех связей на существующей базе, то повторюсь: загружай свои внешние данные в промежуточные таблицы. А потом вдумчиво раскидывай данные по основным. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 17:17 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
White Owl, Понятно, и спасибо за ссылку! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 17:48 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Sergey_New Dima T, Похоже, ты не понимаешь суть задачи. https://www.youtube.com/watch?v=wGp2K8YhH6o ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 19:51 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Dima T И как я уже написал, мне кажется что эту задачу можно решать по другому. Всё верно. Эту задачу оказалось легче решить используя не SQL, а классы в своей БД. Спасибо всем за участие! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 21:17 |
|
Изменение значений ключевого поля
|
|||
---|---|---|---|
#18+
Sergey_New Dima T И как я уже написал, мне кажется что эту задачу можно решать по другому. Всё верно. Эту задачу оказалось легче решить используя не SQL, а классы в своей БД. Спасибо всем за участие! извините! я тут так хохотался :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 17:42 |
|
|
Start [/forum/topic.php?fid=54&tid=2008317]: |
0ms |
get settings: |
1ms |
get forum list: |
6ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
18ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
14ms |
update_topic_read_status (2008317): 30.12.2021 17:42:02: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
24ms |
check new: |
83ms |
others: | 90ms |
total: | 239ms |
0 / 0 |