|
15 / 5 / 1
Регистрация: 28.11.2013
Сообщений: 56
|
||||||||||||||||
MS SQL Грамотно добавлять, удалять, обновлять при foreach31.07.2018, 11:43. Показов 5960. Ответов 44
Добрый день.
Приложение раз в две минуты синхронизирует данные с сервера. Если есть изменения, получает коллекции с итемами по типу изменения updatedItems, createdItems и deleteditems. Затем прохожусь по каждой коллекции и внутри цикла в зависимости от типа ChangeType добавляю: Кликните здесь для просмотра всего текста
обновляю: Кликните здесь для просмотра всего текста
и удаляю: Кликните здесь для просмотра всего текста
Грубо говоря, при создании foreach загоняет все в лист и 1 раз InsertAllOnSubmit(). При удалении каждый раз внутри foreach sql-запрос на удаление по id (т.е. если 10 или 20 удаленных записей, то будет 10 или 20 запросов). При обновлении каждый раз внутри foreach получаю элемент, обновляю все значения и SubmitChanges(), при этом на сколько я понял linq кэширует, сверяет запись и затем обновляет, т.е. вон сколько всего. Вопрос: как сделать грамотно? Или и так сойдет?)
0
|
||||||||||||||||
| 31.07.2018, 11:43 | |
|
Ответы с готовыми решениями:
44
Как добавлять и удалять записи из БД и будет ли это приложение (будильник) работать на других ПК Как в datagrid добавлять и удалять колонки Как удалять и добавлять вертексы в шейдер? |
|
5 / 5 / 1
Регистрация: 29.06.2018
Сообщений: 24
|
|||
| 31.07.2018, 14:34 | |||
|
То есть загрузка данных не должна происходить пару раз , допустим при загрузке данных и соответственно при нажатии на кнопочку Refresh/Update . Начинается работа с данными , перед этим загружайте их . Тут и отпадет надобность автономной синхронизации , и отказоустойчивость повысится . Но если прям надо автономно , то лучше будет ловить сами изменения со стороны сервера, и только тогда обновляться на стороне юзера . Реализации давно лежат на просторах интернета .
0
|
|||
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 31.07.2018, 15:11 | |
|
задай себе простой вопрос - что начнется, когда приложение запустят так 100500 раз практически одновременно?
0
|
|
|
15 / 5 / 1
Регистрация: 28.11.2013
Сообщений: 56
|
||||||||
| 31.07.2018, 15:26 [ТС] | ||||||||
|
NeSpe******t, немного не допетриваю в силу неграмотности.
Кликните здесь для просмотра всего текста
Автономная синохроиназция потому что я не могу читать бд из первоисточника, приходится синхронизировать и сливать к себе, например, раз в 2 минуты на бесконечном цикле. Соответственно никакой кнопки нет. Позже вероятно перейдем на свою бд. Поэтому сейчас эта костылина работает, но вот допустим 20 новых изменений (30, 40) и foreach будет раскидывать по типу, и, если удаление или обновление, 20 (30,40) запросов. Добавлено через 8 минут pincet, как я уже написал, эта приблуда в единственно-запущенном экземпляре у меня сливает в фоне итемы с источника ко мне в бд. Вопрос в том, если новых итемов 100500 (что почти никогда не произойдет), то будет 10500 sql комманд на удаление или обновление по id. Круче, чем "синхронизация" и получать только новые итемы, не нашел.
0
|
||||||||
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|||
| 31.07.2018, 15:32 | |||
|
на самом деле держать данные актуальными в распределенных системах - очень и очень непростая задача
Добавлено через 2 минуты Добавлено через 1 минуту другое дело, что источник данных тоже контролируется тобой (некоей API) Добавлено через 1 минуту
0
|
|||
|
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,138
|
|
| 31.07.2018, 17:28 | |
|
spektr_011, это две базы синхронизируются? Синхронизация в одну сторону? Схемы совпадают? Может применить репликацию, если возможно?
Тут точно нужен EF? Голым SQL-ем было бы поэффективнее. Те же удаления можно в одну ходку выполнить, через DELETE FROM ... WHERE Id IN (Id1, Id2, Id3...).
0
|
|
|
15 / 5 / 1
Регистрация: 28.11.2013
Сообщений: 56
|
|||||
| 31.07.2018, 17:40 [ТС] | |||||
|
0
|
|||||
|
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,138
|
||
| 31.07.2018, 17:43 | ||
|
Ну и размеры таких запросов ну надо делать сильно большими, это тоже негативно скажется на производительности.
0
|
||
|
15 / 5 / 1
Регистрация: 28.11.2013
Сообщений: 56
|
|||||||
| 31.07.2018, 17:45 [ТС] | |||||||
0
|
|||||||
|
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,138
|
|
| 31.07.2018, 17:55 | |
|
Да, точно, есть же
InsertAllOnSubmit. ![]() Обновление оформите иначе. Или создайте один контекст вне цикла, а внутри только выгружайте сущности обновляйте им свойства, а после цикла уже вызывайте сохранение. Но тут кеш контекста уже скажется на производительности. Я хз как с ним работать в LinqToSQL (технология уже заброшенная, я ей не пользуюсь). Или вручную запрос состряпайте, там кеша никакого не будет.
0
|
|
|
15 / 5 / 1
Регистрация: 28.11.2013
Сообщений: 56
|
||
| 31.07.2018, 18:10 [ТС] | ||
|
0
|
||
|
|
||
| 31.07.2018, 19:32 | ||
|
0
|
||
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
||
| 31.07.2018, 20:53 | ||
|
Я так понял нужно на коленках репликацию устроить руками. Абстрагируясь от сервера данных и его возможностей, в лоб, так сказать, надёжнее всего получать все данные из исходника (помечая каждую запись неким timestamp) вливать в базу и при успешном завершении удалять все старые (со старым timestamp, коий текущий хранится для каждой таблицы в служебной). Видел такие решения, работают. Синхронизация запускается по расписанию, когда есть минимальные нагрузки, если это возможно. Если нет - тогда уж решение сильно усложняется, ибо распределённая работа
Добавлено через 8 минут
0
|
||
|
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,138
|
||||
| 01.08.2018, 06:35 | ||||
|
Если будут проблемы с производительностью (долгий процесс импорта), то уже рассмотрел бы ручные запросы на обновление и удаление. Вносил бы данные пачками (записей по пятьдесят-сто), одной ходкой.
1
|
||||
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 01.08.2018, 11:27 | |
|
0
|
|
|
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,138
|
|
| 01.08.2018, 11:35 | |
|
pincet, из другого сервиса (не из этой же базы). Так что подзапрос не к месту (нечего подзапрашивать).
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 01.08.2018, 13:35 | |
|
Usaga, такой IN сервер развернет в OR и будут печали
0
|
|
|
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,138
|
|
| 01.08.2018, 13:37 | |
|
pincet, значит последовательность команд DELETE в один запрос утрамбовать.
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 01.08.2018, 13:41 | |
|
коль скоро в сабже прозвучало про MS SQL, может select @@version стоит озвучить?
0
|
|
|
15 / 5 / 1
Регистрация: 28.11.2013
Сообщений: 56
|
||
| 01.08.2018, 14:31 [ТС] | ||
|
Feb 20 2014 20:04:26 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
0
|
||
| 01.08.2018, 14:31 | |
|
Помогаю со студенческими работами здесь
20
Как правильнее добавлять и удалять заголовки сообщений? Как динамически добавлять/удалять страницы ViewPager Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|