Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
1

Скорость incert-ов

23.03.2018, 19:14. Показов 748. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Использую связку MS SQLServer Express 2017 + C#, и у меня достаточно специфичная проблема.
В приложение поступают данные, в районе 100к элементов, раз в 2 минуты. Из этих данных только небольшая часть (5-7%) - новые, остальное - дубли старых записей. Получать данные иначе не получится 100%.
По окончанию загрузки данных, программа записывает их в локальную БД, примерно таким вот образом:
SQL
1
2
3
IF NOT EXISTS (SELECT * FROM dbo.table WHERE id = @ID)
     INSERT INTO dbo.table (id, val1, val2, val3, val4, val5, val6) 
           VALUES (@ID, @val1, @val2, @val3, @val4, @val5, @val6);
Кроме того, id берётся из самих данных, и по сути является просто их хешем, чтобы строки можно было хоть как-то сравнить, не сравнивая все значения подряд.
Основная проблема в том, что каждый incert с проверкой, таким образом, занимает в районе 0,5 секунды, из-за чего программа просто "захлёбывается" поступающими данными.
Если делать incert без проверки - появится огромное количество дублей.
Фильтровать до вставки, я не совсем понимаю как - в программе хранится только текущий загружаемый набор данных, после сохранения они очищаются, т.е. сравнить не получится. Да и хранить в памяти несколько миллионов строк тоже не самая лучшая идея.

Подскажите пожалуйста, как лучше решить эту проблему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2018, 19:14
Ответы с готовыми решениями:

Не используя имена элементов, найти скорость течения реки и скорость катера
Не используя имена элементов, найти скорость течения реки и скорость катера, если известны общий...

Скорость распространения волны и максимальная скорость колебаний частиц воздуха
Добрый вечер уважаемые участники форума. Применять уравнение звуковой волны для решения этой...

Вычислить путь пройденной лодкой, если известна её собственная скорость и скорость течения
1. Лодка перемещается сначала по течению реки, а затем против течения. Вычислить путь пройденной...

[Арканоид] Как вычислить скорость по X и Y имея угол направления шара и скорость движения?
Пишу арканоид(C++, SDL). Нашол формулу для определения угла с каким надо отразить шар от ракетки, в...

10
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
23.03.2018, 19:43 2
Прослойку написать не предлагать? Клиент в нее высерает , а уж там организовывай
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
23.03.2018, 19:44  [ТС] 3
pincet, можно чуть подробнее?
0
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
23.03.2018, 23:25 4
Захарка, создаете в БД таблицу со структурой, которая идентична получаемым данным. Сделайте в ней индекс на поле id. Назовем ее TempTable.
Из клиентского приложения выполняете:
1. truncate TempTable - быстрая очистка старых записей.
2. С помощью SqlBulcCopy импорт ваших данных в TempTable.
3. Выполнение запроса типа
SQL
1
2
3
4
INSERT INTO dbo.table (id, val1, val2, val3, val4, val5, val6)
SELECT id, val1, val2, val3, val4, val5, val6 FROM TempTable tt LEFT JOIN
dbo.table t ON t.id=tt.id 
WHERE t.id IS NULL
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
23.03.2018, 23:28  [ТС] 5
Igr_ok, спорное решение - в итоге получится, что несколько миллионов записей будут гоняться между таблицами туда-сюда, при каждом обновлении.
0
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
24.03.2018, 10:01 6
Захарка, это стандартное решение для вашей "достаточно специфичной проблемы". Если вы опишите задачу целиком, не предлагая при этом собственного решения, то можно будет что-то оптимизировать.
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
24.03.2018, 15:04  [ТС] 7
Igr_ok, Печально, если более изящного решения нет. А, насчёт оптимизации - сегодня утром, до меня дошло, как можно отфильтровать данные, храня, относительно небольшое, количество информации. Так что тему можно закрывать...

Добавлено через 2 часа 7 минут
Igr_ok, не подскажите, насчёт ещё одного момента? Проблема такая появилась:
При работе с локальной тестовой БД, на моём пк - всё ок. Как только пытаюсь запустить приложение с бд на сервере, выкидывает ошибку:
Кликните здесь для просмотра всего текста

Истекло время ожидания. Время ожидания истекло раньше, чем удалось получить подключение из пула. Возможно, все подключения в пуле уже используются и достигнут максимальный размер пула

При этом, эта ошибка выскакивает и, если подключаться к бд с моего ПК по ip, и, если подключаться локально, перенеся программу на сервер. Все коннекты всегда закрываю, везде использую Dispose. В интернетах пишут, что она возникает из-за кучи незакрытых коннектов, но я даже перезапускал сервер полностью, но всё равно - ошибка стабильно вылетает прямо на первых запросах. При этом, у тестовой бд на моём пк таких проблем нету.

Добавлено через 1 час 9 минут
Update: Так, причину ошибки нашёл - я создавал бд на своём компе, и переносил на сервак. Если создать бд на сервере, ошибки нет.

Добавлено через 1 час 39 минут
Update2: Хм... У меня неиллюзорное такое подозрение, что серверу не хватает оперативки. Залил данные в бд на сервере копированием из другой таблицы (3 миллиона записей) - программа вываливается с ошибкой. Очистил таблицу - отлично пашет.
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
24.03.2018, 16:48 8
Цитата Сообщение от Захарка Посмотреть сообщение
программа вываливается с ошибкой
Видимо какая-то секретная ошибка. Но зато доподлинно известно, что ее причина - нехватка памяти.
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
24.03.2018, 16:55  [ТС] 9
invm, О-о В смысле - секретная, я же в посте написал текст исключения, которое возникает при подключении запущенной в вижуал студии программы к серверной бд.
"Истекло время ожидания. Время ожидания истекло раньше, чем удалось получить подключение из пула. Возможно, все подключения в пуле уже используются и достигнут максимальный размер пула"
А на самом сервере программа вываливается с виндосовской ошибкой, без указания инфы.
А, на объём памяти я грешил потому, что её там (на сервере) банально мало, и при запуске было занято 99%.
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
24.03.2018, 17:48 10
Захарка, "Истекло время ожидания. Время ожидания истекло раньше, чем удалось получить подключение из пула. Возможно, все подключения в пуле уже используются и достигнут максимальный размер пула" - это не клиентская ошибка, а не серверная. При работе с SQL Server возможны два тайм-аута - logon и query. Неизвестно какой у вас, может вообще проблема только в клиенте.
Цитата Сообщение от Захарка Посмотреть сообщение
А на самом сервере программа вываливается с виндосовской ошибкой, без указания инфы.
Ошибка может быть без сообщения, но ошибок без кода не бывает. К тому же, SQL сервер не ругается виндосовскими ошибками.
Так что пока не будет конкретики, помочь трудно.
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
24.03.2018, 20:56  [ТС] 11
invm, Короче говоря, разобрался. Всё дело, в итоге, свелось к тому, что действительно была проблема с пулами. Не совсем понимаю, по какой причине (видимо, как раз, из-за разницы в ресурсах железа), моя локальная бд имела больший пул для коннектов. В итоге, проблему решил простым удалением коннекта из пула, при закрытии.
0
24.03.2018, 20:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2018, 20:56
Помогаю со студенческими работами здесь

Очень маленькая скорость интернета, по Скайпу невозможно разговаривать. Как добавить скорость?
Всем добрый день! Помогите!!!! :( В интернете долго загружаются странички,зависают. Зарание всем...

Помогите рассчитать скорость шарика при полете (учитывая скорость встречного ветра)
Даны масса шарика,скорость встречного ветра, начальная скорость шарика,шарик брошен под...

Определить конечную скорость шарика. какой угол с поверхностью листа образует эта скорость
Тема Л.Р - Изучение движения тела,брошенного горизонтально. Вот такое задание : Используя...

Нужно узнать угловую скорость и скорость точки на колесе
Добрый день, я не понимаю как решить данную проблему.Нужно узнать угловую скорость и скорость точки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru