powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF: Как вы делаете пакетные операции?
4 сообщений из 179, страница 8 из 8
EF: Как вы делаете пакетные операции?
    #38890318
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЯ тебе выше уже сказал, что оборачивать процессинг в ACID - это как упаковать столичное Киевское шоссе в презерватив. Лопнет или не лопнет. А зачем? А фиг его знает. Так хвост захотел.

Не уместное сравнение. Ты сравниваешь биллинг с единым импортом. Другими словами, ты сравниваешь поток машин на шоссе, с поездом, с которого не слезет ни один пассажир до полной остановки всего состава. Ты же предлагаешь, как только первый вагон оказался в пределах досягаемости платформы сталкивать пассажиров на перрон, чтобы быстрее типа разгрузить состав
...
Рейтинг: 0 / 0
EF: Как вы делаете пакетные операции?
    #38890332
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУДа причем тут логика? Обвалился процессинг по причине того, что сервер ушел в ребут, нештатная ситуация у DBA и отвалилась база, закончилось место, уборщица жопой задела витую пару, затопило серверную, ураган, смерч, цунами, пьяный админ попутал, террористы, проводка погорела, попёрло гавно из санузла и давлением вдавило каки в стойку, ... Ещё?

Тем более. Пол процессинга прошло, и тут произошло что-то из описанного тобой. В итоге в базе данных только половина актуализированной информации. Зипись чо.

МСУСводные цифры сами по себе никому не нужны. Сводные цифры всегда в разрезе чего-то (период, тип, операция и так далее). Это называется измерением, мерой. Кто-то мерит одной мерой, кто-то другой. Зачем лишать пользователей 100% мер? Улавливаешь суть? Представь ситуацию, в горводе произошла авария и пропала холодная вода. А тебе за это отключили свет, газ и антенну. Справедливо? Ты начинаешь писать жалобы, а тебе в ответ - "раз имеется такая ошибка, значит и всей логике жилобеспечения доверять как-то сомнительно, это надо чинить". Занавес.

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

МСУНикогда никто не даст таких гарантий, что всегда будет штатная ситуация и всё 100% отработает. Ты в космосе что ли? Я выше сказал, упало - это обязательно косяк в логике. Осознай это.

Гарантии как раз таки обычно имеются. Как имеются и риски. Если тебе поставили задачу, а ты развёл руками «ну так нельзя...» и тычешь в нос чужими рекомендациям, то просто найдут другого исполнителя, способного пошевелить мозгами и решить задачу, а не ипать мозг.

МСУВ моём решении - единственно верный вариант. Других вариантов быть не может. Абсолютно.

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

Ты напоминаешь мне дядю Билли, который орал 640Кб хватит всем!
...
Рейтинг: 0 / 0
EF: Как вы делаете пакетные операции?
    #38890430
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttРечь идёт именно о простоте или сложности. Сценарий топорного процессинга это всего лишь результат банальной лени разработчика, который не удосужился расчёхлить свои извилины и подумать.
По-моему, тут у кого-то другого проблемы с извилинами. Почему? Потому что он полный ноль в базах данных, репликациях, синхронизациях, фантомности данных, изоляциях, ETL, BI и так далее. Вот меня это и веселит, ты дуб дубом по теме, но несешь каку-то чушь про лень программиста.

hVosttНапример, вернёмся к твоему кейсу синхронизации 30К сотрудников. Учитывая, что синхронизация происходит периодически, наверняка среди 30К записей за короткий период реальных изменений реально меньше, чем 30К. Значит можно сначала определить весь объём этих изменений и выполнить их в рамках транзакции, это будет достаточно быстро, чтобы никто не испытывал проблем. Решение конечно же будет сложнее, чем тот кусок кода, что ты привёл, который ТУПО прогоняет один и тот же алгоритм обработки по всем записям.
Правильное замечание. Но это повлечет за собой доработку системы источника, что не всегда вписывается в сроки и приоритеты. 30К + 3 часа на процессинг - это не много, проще никого не напрягать и взять весь набор данных с источника. В любом случае, представь себе ситуацию, когда эти 30К - именно количество сотрудников, которых нужно отпроцессить. Либо пусть это будут продажи за месяц, количество экземпляров 100М. Включи абстракцию. Количество данных может быть и больше. Это не играет никакой роли. Главное одно - нужно отпроцессить много данных.

hVosttРефакторинг заключался в том, чтобы загрузить данные в служебные таблицы, никак не участвующие в бизнес-логике. Затем определить характер изменений. Затем в единой транзакции осуществить реальный импорт. Время импорта сократилось с 5-8 часов до 15 минут в среднем (в зависимости от объёма изменений). При чём ошибочные записи оставались в служебных таблицах и могли быть доимпортированы, после исправления ошибок в данных. Решение всех устроило и работает до сих пор по моим сведениям.
Это не рефакторинг, это оптимизация. Не путай теплое с мягким. Оптимизация нужна тогда, когда текущее положение дел становится неприемлемым. Это нормальный процесс. Изначально и заранее никто ничего не отпимизирует. На рельсы ставится готовое решение, которое удовлетворяет требованиям. Так что пример немного не в кассу.

hVosttТак что не лечи меня, милый товарищ на счёт невозможности и единственно правильного во всём мире решения этой задачи.
Включи голову уже. Твоя тупость безгранична.
...
Рейтинг: 0 / 0
EF: Как вы делаете пакетные операции?
    #38890442
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТем более. Пол процессинга прошло, и тут произошло что-то из описанного тобой. В итоге в базе данных только половина актуализированной информации. Зипись чо.
Да, всё верно. А в твоём случае 0% актуальных данных. Это лучше?

hVosttПоэтому я тебе и говорил, что решение будет сложнее, чем представленное тобой, чтобы учитывать всё, нагрузку, требования, целостность, защищённость, возможность параллельного доступа, единую актуализацию... и не отключать свет, если пропала холодная вода.
О каких сложностях ты говоришь? Заблокировать в распределенной транзакции нахер всю таблицу сотрудников, чтобы все остальные соснули болт? Ты думаешь, что предлагаешь?

hVosttГарантии как раз таки обычно имеются. Как имеются и риски. Если тебе поставили задачу, а ты развёл руками «ну так нельзя...» и тычешь в нос чужими рекомендациям, то просто найдут другого исполнителя, способного пошевелить мозгами и решить задачу, а не ипать мозг.
Ну если есть риски, тогда какие вопросы? Предположим риск выстрелил. Твои действия?

hVosttМСУВ моём решении - единственно верный вариант. Других вариантов быть не может. Абсолютно.
В твоём решении возможно, всех деталей твоей задачи я не знаю, возможно именно такое решение там всех устраивает. Но это не единственно верный вариант. И другие варианты есть. Всегда есть.
Да какие детали. Суть одна - импорт нельзя заключать в транзакцию. Вообще. Никак. Нельзя. Напиши себе фломастером на лбу и запомни это.

hVosttТы напоминаешь мне дядю Билли, который орал 640Кб хватит всем!
Опять левый пример.
...
Рейтинг: 0 / 0
4 сообщений из 179, страница 8 из 8
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF: Как вы делаете пакетные операции?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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