|
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
|
||||||
Синхронизация таблиц SQLite с MSSQL15.02.2018, 10:43. Показов 5748. Ответов 15
Метки нет (Все метки)
Приветствую всех. Друзья подскажите как лучше синхронизировать две идентичных по структуре таблицы одна в локальной базе SQLite другая на MSSQL? Короче нужно перенести недостающие строки из SQLite в MSSQL . Объём таблицы может достигать более 3 гб. Может есть какие то инструменты для таких манипуляций или эффективней всего будет просто отправлять запрос с условием типа
0
|
||||||
| 15.02.2018, 10:43 | |
|
Ответы с готовыми решениями:
15
Синхронизация Active Directory и MSSQL через C# Из MSSQL в SQLITE импорт/экспорт Синхронизация таблиц |
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
||||||
| 15.02.2018, 14:47 | ||||||
|
Такого вида запрос может затормозить систему - так как будет организован цикл - а 3 Гб - это не 1 сотня тыс записей.
Как вариант - сначала импортировать из SQLite в сиквел сервер в отдельную таблицу (тут способ выбирайте сами). А далее
0
|
||||||
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|||||||||||
| 15.02.2018, 15:15 | |||||||||||
|
Graf1385, берите только новые записи.
В SQLite
0
|
|||||||||||
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|
| 15.02.2018, 15:23 | |
|
Igr_ok, это только частный случай.
Если же айдишки (а в основном так и есть) ставятся на уровне таблицы как Identity - то в каждой таблице они будут свои, и никак не синхронизированы.
0
|
|
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|
| 15.02.2018, 15:45 | |
|
0
|
|
| 15.02.2018, 16:00 | |
|
Не по теме: Igr_ok, Я привык не доверять людям, что используют циклы в простых запросах к таблицам :D
0
|
|
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
|
| 18.02.2018, 01:33 | |
|
вообще, подобные вещи делаются без "посредников",средствами СУБД
шарп, при всем его "величии", лишний
0
|
|
|
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
|
|
| 19.02.2018, 14:20 [ТС] | |
|
А как насчёт SqlBulkCopy я сейчас на него смотрю по скорости он вроде нормально, то есть получать данные из SQLITE в DATATABLE и отправлять на сервер, только не понятно если на прямую в таблицу данные лучше не копировать как в током случаи использовать временную таблицу отдельным запросом создавать временную таблицу. Тут ещё момент что использовать функции или хранимые процедуры не получиться так как имя таблицы в которую необходимо добавить данные заранее неизвестно имя программа получает из другой таблицы. Ещё проблемы с SqlBulkCopy то что он не умеет пропускать строку если такой ключ существует, но такую проверку можно сделать отдельным запросом а вот если использовать временную таблицу тогда я так понял это вполне возможно.
0
|
|
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
|
||
| 19.02.2018, 14:42 | ||
|
Добавлено через 8 минут Graf1385, в принципе, вам уже дали ответ в перовом же сообщении: выгружайте данные в промежуточную таблицу, а оттуда уже в основную. Промежуточную таблицу можно создавать в том же запросе- это не проблема. Запросы лучше разбить на пачки по 500 (или менее!) строк, чтобы не блокировать всю базу на время долгой операции. Тут есть один момент: Текущий подход подразумевает постепенное увеличение времени импорта данных, так как, судя по всему, вы собираетесь каждый раз выгребать все данные и искать им соответствия в целевой базе. Это очень неэффективный способ. Есть другой, но он потребует изменение схем одной из двух баз (лучше всего базы-источника). Вам нужно в каждую таблицу, что хотите экспортировать, добавить колонку для хранения признака произведённого ранее экспорта. Для экспортированных данных выставлять признак и в последующих итерациях эти данные уже не использовать. Это будет на порядок (а со временем - на два) лучше, чем каждый раз всё перепроверять.
1
|
||
|
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
|
|
| 20.02.2018, 07:03 [ТС] | |
|
Да флаг отправлено или нет уже стоит я сразу это предусмотрел, конечно я не собирался перебирать миллионы строк каждый раз, вопрос стоял просто наеболиие эффективный способ. Типа варианта с SqlBulkCopy не кто не знает он не создаёт промежуточных таблиц а то получить что я создам ещё и SqlBulkCopy создаст, бред. Или может не стоит использовать его по другим причинам о которых я узнаю когда напишу кучу кода?
0
|
|
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
|
|
| 20.02.2018, 07:10 | |
|
Graf1385, SqlBulkCopy никаких таблиц не создаёт. Что он делает и как им пользоваться можно посмотреть в документации, там и примеры есть.
0
|
|
|
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
|
|
| 20.02.2018, 07:23 [ТС] | |
|
По поводу двух таблиц я так понимаю это нужно если запись ведётся несколькими клиентами одновременно, у меня запись ведётся каждым клиентом в разные таблицы, а вот читать могут несколько, то есть при подключении к MSSQL клиент создаёт новую таблицу если она не была создана ранние имена таблиц тоже уникальны на сколько это позволяет GUID. Просто я не очень представляю как мне использовать вторую таблицу. У меня вот какая идея я создаю буферную таблицу, создаю под неё триггер который при добавлении записей будет проверять есть ли запись в основной таблице если нет добавлять если есть удалять как такой вариант что посоветует?
Добавлено через 1 минуту А по по поводу документации я уже прочитал, думал может есть какие то подводные камни.
0
|
|
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
|
|||
| 20.02.2018, 07:29 | |||
|
Graf1385, вам буферную таблицу порекомендовали чисто как оптимизацию. Вы в неё вываливаете всё одним быстрым движением, а уже внутри базы переносите данные через
insert... select.. where not exists.... Т.е. такой подход быстрее будет работать, ибо он уже внутри базы будет происходить, но это вовсе не обязательно.Если данных не особо много (или они разбиты на порции по N штук), то можно и отдельными запросами обойтись. Добавлено через 36 секунд Вообще, это всё интереса ради делается или вы правда стокнулись с проблемами производителности при переносе данных?
0
|
|||
|
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
|
|
| 20.02.2018, 07:59 [ТС] | |
|
Нет не ради интереса, после первой установки программы на компьютере уже есть данные и их много вот их необходимо перенести в локальную базу данных для хранения потом на MSSQL для удалённого просмотра ну и хранения. Далее данные будут сохраняться в локальной базе данных по мере поступления ну и в удалённую тоже если есть связь с сервером а вот если связи нет будут пропуски, вот эти пропуски и необходимо синхронизировать. Проблема с производительностью есть по причине не опытности работы с СУБД по крайней мере с большими объёмами. Раньше в таких случаях я передавал данные в XML файлами там на сервере разворачивал во временную таблицу ну и добавлял. Тут такой подход не получиться так как имя таблицы неизвестно а передать его в аргументах функции у меня не получилось.
0
|
|
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
|
|
| 20.02.2018, 08:02 | |
Сообщение было отмечено Graf1385 как решение
Решение
Graf1385, самый простой способ - разбивать данные на порции и посылать. Так и у базы будет время на "отдохнуть" от ваших данных (обработать другие запросы) и данные потихоньку будут импортироваться. Если данных много, то тут ничего уже не выдумать.
1
|
|
|
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229
|
|
| 20.02.2018, 08:05 [ТС] | |
|
Хорошо спасибо за совет так и сделаю. Можно тему закрывать.
0
|
|
| 20.02.2018, 08:05 | |
|
Помогаю со студенческими работами здесь
16
C# + WCF + EF + mssql обновление связных таблиц DataGridView редактирование таблиц через представление MSSQL Получение списка таблиц БД (SQLite) Создание таблиц через sqlite Переход с mssql Express 2008 R2 на mssql 2012 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|