|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANAОбходные манёвры чего, незапланированного выходного у бухгалтера? :) А в банковской системе, где обеспечение транзакций превыше всего, конечно вообще домой никогда не ходят. Спят прям на рабочем месте. И едят там же. И детей делают там. Там же повсюду транзакции, прям настоящий транзакционный АД Ты походу никогда с банковскими системами не работал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:45 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Алексей КНу говорил же, отключить некоторые отчёты на время синхронизации. Ну так это типа и есть уже какая-то блокировка. Пускай не всей базы, но отчётов. Уже не айс ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:46 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANAТы походу никогда с банковскими системами не работал :) Тебе похоже тоже нужна табличка Sarcasm Ж) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:46 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANAХм, а я о чём? Ну так и я о чём.Фиг знает. Я не понял, что предлагаешь бедному бухгалтеру: ждать пока закончится твоя жирная транзакция и молиться, чтобы она не завалилась, или домой идти? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:47 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttАлексей КНу говорил же, отключить некоторые отчёты на время синхронизации. Ну так это типа и есть уже какая-то блокировка. Пускай не всей базы, но отчётов. Уже не айс )Только пары отчётов. Главное, чтобы работа оперативных сотрудников не была нарушена. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:47 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANAТы походу никогда с банковскими системами не работал :) Тебе похоже тоже нужна табличка Sarcasm Ж)Я могу без сарказма привести пример из практики интеграции с банковскими системами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:48 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Алексей КУ "сотрудник" есть поле "дата/время синхронизации". Вполне понятно в каком состоянии. Ну вот Васю и Петю повысили в одно время, а когда эти оба притопали на новое рабочее место, пустили только Васю, Петя тёрся в коридоре пока не обновились его данные ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:48 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANAФиг знает. Я не понял, что предлагаешь бедному бухгалтеру: ждать пока закончится твоя жирная транзакция и молиться, чтобы она не завалилась, или домой идти? :) Не, я за обеспечение неблокирующей транзакционности. Чем это достигается, вопрос второй. Но типо длительная пакетная загрузка во время активной работы пользователей, это просто бесчеловечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:50 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANAЯ могу без сарказма привести пример из практики интеграции с банковскими системами. Приведи плз. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:50 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANAФиг знает. Я не понял, что предлагаешь бедному бухгалтеру: ждать пока закончится твоя жирная транзакция и молиться, чтобы она не завалилась, или домой идти? :) Не, я за обеспечение неблокирующей транзакционности. Чем это достигается, вопрос второй. Но типо длительная пакетная загрузка во время активной работы пользователей, это просто бесчеловечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:51 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Алексей КТолько пары отчётов. Главное, чтобы работа оперативных сотрудников не была нарушена. Других способов совсем нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:52 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANAФиг знает. Я не понял, что предлагаешь бедному бухгалтеру: ждать пока закончится твоя жирная транзакция и молиться, чтобы она не завалилась, или домой идти? :) Не, я за обеспечение неблокирующей транзакционности. Чем это достигается, вопрос второй. Но типо длительная пакетная загрузка во время активной работы пользователей, это просто бесчеловечно.С фигали это безчеловечно-то? Безчеловечно - это когда она написана так, что делать что-либо в системе невозможно, пока она идёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:55 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANAЯ могу без сарказма привести пример из практики интеграции с банковскими системами. Приведи плз.Ок, чуть позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:56 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANAС фигали это безчеловечно-то? Безчеловечно - это когда она написана так, что делать что-либо в системе невозможно, пока она идёт. И это тоже бесчеловечно, не спорю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:57 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttТ.е. инфа на момент начала загрузки была одна, а вот актуальность данных меняется с течением времени, и с 15:00 до 18:00 база данных вообще непонятно в каком состоянии, и как можно с этим работать, не понимаю? Это что нормально? Твою неопытность видно за версту :) Процессинг, ETL, DWH, репликация и иже с ними - априори не могут быть актуальными относительно источника данных. Всегда есть какая временная дельта, разрыв во времени. Это нормально. hVosttТ.е. активные пользователи получают не просто не актуальную информацию (когда данные ещё не загрузились), а вообще непонятно что. Совершенно очевидно, что сводными отчётами в процессе загрузки можно только зад подтереть. Если бы обеспечивалась транзакционность, то хотябы состояние базы было бы актуально на определённый момент (до загрузки или после), а не черти что. В чём великий смысл этого идиотизма, не понимаю. Работал когда-нибудь с OLAP DWH? Процессинг кубов, мер, измерений всегда трудозатратная по времени операция, временное расхождение актуальных данных с боевой БД достигает от 1 дня и выше. Это нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 17:02 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
МСУТвою неопытность видно за версту :) Процессинг, ETL, DWH, репликация и иже с ними - априори не могут быть актуальными относительно источника данных. Всегда есть какая временная дельта, разрыв во времени. Это нормально. Да не про временную дельту идёт речь. То, что для загрузки требуется время, это понятно. Речь идёт об консистентности. Короче, неблокирующую транзакцию как обеспечить знаешь или нет, скажи мне, опытный ты наш. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 17:15 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
МСУРаботал когда-нибудь с OLAP DWH? Процессинг кубов, мер, измерений всегда трудозатратная по времени операция, временное расхождение актуальных данных с боевой БД достигает от 1 дня и выше. Это нормально. Немного, но да, работал. Ещё раз повторяю, проблема не в актуальности, а в её нарушении. Пусть данные будут актуальны за вчера, но целостны. Разрывы не уместны. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 17:17 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttДа не про временную дельту идёт речь. То, что для загрузки требуется время, это понятно. Речь идёт об консистентности. Короче, неблокирующую транзакцию как обеспечить знаешь или нет, скажи мне, опытный ты наш. 1. "Консистентности" всего процессинга? :) Такого не бывает, это сказки. А от консистентности батча (пакета, группы, экземпляра) - всегда вэлкам. 2. Что такое "неблокирующая транзакция"? Опять жжешь напалмом? hVosttМСУРаботал когда-нибудь с OLAP DWH? Процессинг кубов, мер, измерений всегда трудозатратная по времени операция, временное расхождение актуальных данных с боевой БД достигает от 1 дня и выше. Это нормально. Немного, но да, работал. Ещё раз повторяю, проблема не в актуальности, а в её нарушении. Пусть данные будут актуальны за вчера, но целостны. Разрывы не уместны. Если ты под "данными" за вчера понимаешь весь процессинг, то я тебе уже 100 раз сказал, что это глупость. Объясняю 101 раз. 1. Процессинг "данных за вчера" обвалился на 99% выполненной работе. 2. Сегодня ты хочешь получить "данные за вчера", а их там нет. Что делать? 3. Одному пользователю нужен только 1% информации из этих 99%, другому нужно 5% из 99%, третьему - 10% из 99%. Зачем их лишать этих данных? 4. Образно говоря, в моём случае 80% сотрудников будут работать в штатном режиме и только 20% будут испытывать трудности, т.к. 1% невыполненной работы у тебя завалился. В твоём случае 100% работников будут сосать писю. 5. Профиты? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 17:54 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
МСУ1. "Консистентности" всего процессинга? :) Такого не бывает, это сказки. А от консистентности батча (пакета, группы, экземпляра) - всегда вэлкам. Ну почему не бывает, просто никто не говорит, что это просто. В зависимости от задачи можно разработать различные сценарии для достижения этого результата. Или будешь утверждать, что это задача абсолютно не выполнимая? МСУ2. Что такое "неблокирующая транзакция"? Опять жжешь напалмом? Это значит, что существует два состояния: до загрузки/обработки/синхронизации данных и после, а не где-то между. При больших объёмах использование транзакции базы данных приносит много боли пользователям ради достижения этой цели. И ты хочешь сказать, что по-другому нельзя? Либо блокирующие страдания, либо батчи? МСУ1. Процессинг "данных за вчера" обвалился на 99% выполненной работе. Да, обвалился по причине неизвестной заранее ошибки, потому что иначе ситуация была бы правильно обработана, и ошибки бы не случилось. Раз имеется такая ошибка, значит и всей логике загрузки доверять как-то сомнительно, это надо чинить. Лучше пару раз поймать и починить, чем постоянно ловить «недосказанность» + постоянные периоды времени в полу-недоактуальном половинчатом хер пойми каком недосостоянии. МСУ2. Сегодня ты хочешь получить "данные за вчера", а их там нет. Что делать? Ну я хочу получить данные за вчера, а не что-то-за-вчера-а-что-то-за-позавчера, полусостояние какое-то. Особенно если требуется сводные цифры, с учётом «до копья». МСУ4. Образно говоря, в моём случае 80% сотрудников будут работать в штатном режиме и только 20% будут испытывать трудности, т.к. 1% невыполненной работы у тебя завалился. В твоём случае 100% работников будут сосать писю. Как раз наоборот. В штатном режиме должно всё работать и давать 100% результат. Если что-то упало, значит косяк в логике, значит нафиг такая загрузка хоть в каком процентном эквиваленте нужна. Надо чинить. Или, если система не какая-нибудь банковская, то пох? МСУ5. Профиты? Ну, если постепенная побатчевая загрузка вообще никому не мешает, не портит и не влияет никоим образом ни на какие отчёты, ни с чем и ни с кем не конфликтует, всем юзерам целостность данных по барабану, если это заранее известно, что не надо строить иллюзий на 100% уверенность в актуальной инфе, пусть загружается хоть сколько-нибудь. То да, в твоём решении имеется чистый профит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 18:57 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttМСУ1. "Консистентности" всего процессинга? :) Такого не бывает, это сказки. А от консистентности батча (пакета, группы, экземпляра) - всегда вэлкам. Ну почему не бывает, просто никто не говорит, что это просто. В зависимости от задачи можно разработать различные сценарии для достижения этого результата. Или будешь утверждать, что это задача абсолютно не выполнимая? Речь не о простоте или сложности, речь о бывает или не бывает. Сценарий просессинга всегда прост - процессить. В процессинге единичного экземпляра или группы интереса никакого нет, процессят всегда набор экземпляров или групп. Оборачивать процессинг экземпляров или групп в ACID - смертоубийственная затея, о которой тебе тут все тылдычат. hVosttМСУ2. Что такое "неблокирующая транзакция"? Опять жжешь напалмом? Это значит, что существует два состояния: до загрузки/обработки/синхронизации данных и после, а не где-то между. При больших объёмах использование транзакции базы данных приносит много боли пользователям ради достижения этой цели. И ты хочешь сказать, что по-другому нельзя? Либо блокирующие страдания, либо батчи? Я тебе выше уже сказал, что оборачивать процессинг в ACID - это как упаковать столичное Киевское шоссе в презерватив. Лопнет или не лопнет. А зачем? А фиг его знает. Так хвост захотел. hVosttМСУ1. Процессинг "данных за вчера" обвалился на 99% выполненной работе. Да, обвалился по причине неизвестной заранее ошибки, потому что иначе ситуация была бы правильно обработана, и ошибки бы не случилось. Раз имеется такая ошибка, значит и всей логике загрузки доверять как-то сомнительно, это надо чинить. Лучше пару раз поймать и починить, чем постоянно ловить «недосказанность» + постоянные периоды времени в полу-недоактуальном половинчатом хер пойми каком недосостоянии. Да причем тут логика? Обвалился процессинг по причине того, что сервер ушел в ребут, нештатная ситуация у DBA и отвалилась база, закончилось место, уборщица жопой задела витую пару, затопило серверную, ураган, смерч, цунами, пьяный админ попутал, террористы, проводка погорела, попёрло гавно из санузла и давлением вдавило каки в стойку, ... Ещё? hVosttМСУ2. Сегодня ты хочешь получить "данные за вчера", а их там нет. Что делать? Ну я хочу получить данные за вчера, а не что-то-за-вчера-а-что-то-за-позавчера, полусостояние какое-то. Особенно если требуется сводные цифры, с учётом «до копья». Сводные цифры сами по себе никому не нужны. Сводные цифры всегда в разрезе чего-то (период, тип, операция и так далее). Это называется измерением, мерой. Кто-то мерит одной мерой, кто-то другой. Зачем лишать пользователей 100% мер? Улавливаешь суть? Представь ситуацию, в горводе произошла авария и пропала холодная вода. А тебе за это отключили свет, газ и антенну. Справедливо? Ты начинаешь писать жалобы, а тебе в ответ - "раз имеется такая ошибка, значит и всей логике жилобеспечения доверять как-то сомнительно, это надо чинить". Занавес. hVosttМСУ4. Образно говоря, в моём случае 80% сотрудников будут работать в штатном режиме и только 20% будут испытывать трудности, т.к. 1% невыполненной работы у тебя завалился. В твоём случае 100% работников будут сосать писю. Как раз наоборот. В штатном режиме должно всё работать и давать 100% результат. Если что-то упало, значит косяк в логике, значит нафиг такая загрузка хоть в каком процентном эквиваленте нужна. Надо чинить. Или, если система не какая-нибудь банковская, то пох? Никогда никто не даст таких гарантий, что всегда будет штатная ситуация и всё 100% отработает. Ты в космосе что ли? Я выше сказал, упало - это обязательно косяк в логике. Осознай это. hVosttМСУ5. Профиты? Ну, если постепенная побатчевая загрузка вообще никому не мешает, не портит и не влияет никоим образом ни на какие отчёты, ни с чем и ни с кем не конфликтует, всем юзерам целостность данных по барабану, если это заранее известно, что не надо строить иллюзий на 100% уверенность в актуальной инфе, пусть загружается хоть сколько-нибудь. То да, в твоём решении имеется чистый профит. В моём решении - единственно верный вариант. Других вариантов быть не может. Абсолютно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 20:52 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
[quot hVostt]МСУДа не про временную дельту идёт речь. То, что для загрузки требуется время, это понятно. Речь идёт об консистентности. 500 человек ходят по области и городу, набивают заказы в свои терминалы. Потом передают в офис. И вдруг у одного чего-то не заладилось. ЧУ!! ALARM! Система мгновенно откатывает состояние рабочего дня на 00.00.01? Ведь импорт всех заказов не прошел на 100% - всем покинуть корабль? Или весь текущий импорт она метит хеш-тегами #"несчастливая звезда" #"всё пошло не так" и очищает результаты его работы? Нет, система "засосет" столько, сколько сможет. Пометит то, что прочитала, а при следующей загрузке прожует то, что осталось. И если кусок случился совсем уж непрожеванным - то по итогам операционного дня в систему не попадет ОДИН заказ из 10 000. Можно сколько угодно оттопыривать пальчик и расшифровывать ACID задом наперед, но попробуйте ответсвенному/заинтересованному за продажи объяснить, что отгрузки за день не будет, потому что данные, видите ли - НЕ КОНСИСТЕНТНЫ...!!! Отрезвление придет очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 23:34 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
А уж в таких операциях как импорт/репликация вообще понятие консистентность применимо с БОЛЬШОЙ натяжкой, так как само содержание этих операций нифига не детерминировано, а в зависимости от внешних факторов может быть абсолютно разным. А вот такая БЕ, как сотрудник, заказ - любой объект доменной модели должен быть непротиворечив. И именно эта единица - будет атомарной единицей обмена. Какой-то странный, чисто IT-шный подход. В систему ломятся 10 000 заказов, но мы их не пустим, потому как там где-то есть паршивая овца. Сколько будет искать? Пока не найдем. И вот, за минуту до конца рабочего дня, IT-шники грузят заказы в базу. Довольные утирают пот и недоумевают, почему вместо грамоты - их лишают премии/указывают на дверь/пускают по кругу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 23:42 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
невежество всегда воинственна ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 01:42 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
МСУЯ выше сказал, упало - это не обязательно косяк в логике. Осознай это. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 09:38 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
МСУРечь не о простоте или сложности, речь о бывает или не бывает. Сценарий просессинга всегда прост - процессить. В процессинге единичного экземпляра или группы интереса никакого нет, процессят всегда набор экземпляров или групп. Оборачивать процессинг экземпляров или групп в ACID - смертоубийственная затея, о которой тебе тут все тылдычат. Речь идёт именно о простоте или сложности. Сценарий топорного процессинга это всего лишь результат банальной лени разработчика, который не удосужился расчёхлить свои извилины и подумать. Например, вернёмся к твоему кейсу синхронизации 30К сотрудников. Учитывая, что синхронизация происходит периодически, наверняка среди 30К записей за короткий период реальных изменений реально меньше, чем 30К. Значит можно сначала определить весь объём этих изменений и выполнить их в рамках транзакции, это будет достаточно быстро, чтобы никто не испытывал проблем. Решение конечно же будет сложнее, чем тот кусок кода, что ты привёл, который ТУПО прогоняет один и тот же алгоритм обработки по всем записям. Из реального опыта. Лет 5 назад, работая в большой организации проводил рефакторинг периодического импорта данных учёта материальных запасов из R/3 в другую систему на базе Oracle. До рефакторинга процедура отрабатывала в течении 5-8 часов, запускалась ночью и имела как раз такую проблему, о которой я тебе талдычил: иногда выпадали пакеты, что составляло актуальность загрузки на уровне 98-99%. Ты говоришь — да это фигня, подумаешь, ничего 100% не бывает, а в организации с этим испытывали проблемы. Решение импорта было очень похоже на твой код. Рефакторинг заключался в том, чтобы загрузить данные в служебные таблицы, никак не участвующие в бизнес-логике. Затем определить характер изменений. Затем в единой транзакции осуществить реальный импорт. Время импорта сократилось с 5-8 часов до 15 минут в среднем (в зависимости от объёма изменений). При чём ошибочные записи оставались в служебных таблицах и могли быть доимпортированы, после исправления ошибок в данных. Решение всех устроило и работает до сих пор по моим сведениям. Так что не лечи меня, милый товарищ на счёт невозможности и единственно правильного во всём мире решения этой задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2015, 10:57 |
|
|
start [/forum/topic.php?fid=17&msg=38889751&tid=1349618]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 531ms |
0 / 0 |