Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Что-то тема не пользуется популярностью, хотя концептульные недоработки каше налицо - нет ни версионности ни реализации снапшота ни repeatable read, которые есть в большинстве популярных РСУБД :( /topic/846423&pg=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 14:27 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
а как тогда отчеты-то строим, господа? в расчете на ночные калькуляции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 14:28 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Вы так смело говорите про концептуальные недоработки каше, что я прямо удивляюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 15:22 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., чему удивляетесь? разве Вы не согласны что в отсутствии нужного уровня изоляции транзакций формировать консистентные отчеты можно не в 100% случаев и лишь со множеством "если" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 15:35 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
для многопользовательской СУБД управление конкурирующими транзакциями - основная задача. в том числе на системном уровне должно быть решены вопросы с фантомами. сейчас максимум из того что должно быть есть только read_commited ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 15:40 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Ваши заявления про концептуальные недоработки подобны заявлениям на форуме японской кухни "только совершенные придурки могут есть с помощью палочек, все современные люди едят ножом и вилкой". Могу вам сказать, что вашу систему проектировал тот, кто не умеет этого делать, и теперь вы негодуете, что не пришел добрый дядя и не сделал за вас всю работу "на системном уровне". Мне, например, совершенно не нужно то, о чем вы говорите. И хотя наша система довольно таки многопользовательская, блокировки в ней используются в очень небольшом количестве мест. То же касается и транзакций, мало того многие программы с транзакциями мы иногда переписывали на код без транзакций либо с минимальным их количеством. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 16:13 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Могу вам сказать, что вашу систему проектировал тот, кто не умеет этого делать, и теперь вы негодуете, что не пришел добрый дядя и не сделал за вас всю работу "на системном уровне". в отсутствие нормальных аргументов переход на личности порочная практика некоторых авторов в форумах при чем здесь дядя? почитайте начало топика - при чем здесь архитектура приложения? вопрос в том что без системно поддерживаемого СУБД снапшота или повторяемого чтения Вы принципиально в приложении не сможете обеспечить повторяемое чтение. Именно поэтому любой отчет априори неконсистентен. Да, в _некоторых_ случаях (в Вашей системе например ночью) может случиться так что апдейтов нет и отчет выдаст то что нужно, но в общем случае это не так. Блок А.Н.Мне, например, совершенно не нужно то, о чем вы говорите. И хотя наша система довольно таки многопользовательская, блокировки в ней используются в очень небольшом количестве мест. а где я упоминаю блокировки? Блок А.Н.То же касается и транзакций, мало того многие программы с транзакциями мы иногда переписывали на код без транзакций либо с минимальным их количеством. Видимо Вы не ведаете что творите. Каким образом Вы обеспечиваете атомарность изменений в Вашей системе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 18:18 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Rus000в отсутствие нормальных аргументов переход на личности порочная практика некоторых авторов в форумах Ну если в самом деле причина в личности. Не хотелось вас специально обижать, но ваша категоричность скорее всего следствие отчания, а не взвешенного подхода. Rus000 без системно поддерживаемого СУБД снапшота или повторяемого чтения Вы принципиально в приложении не сможете обеспечить повторяемое чтение. Да нет, вы путаете. Это Вы не можете ;-) Rus000 Блок А.Н.То же касается и транзакций, мало того многие программы с транзакциями мы иногда переписывали на код без транзакций либо с минимальным их количеством.Видимо Вы не ведаете что творите. Каким образом Вы обеспечиваете атомарность изменений в Вашей системе?Проще разобраться с ситуацией, когда падающий процесс говорит "пиу", и оставляет все как было. Значительная часть операций уже сама по себе атомарна, либо атомарность не критична. Используются статусы операций, анализ объектов перед операцией либо после операции. Ну и кое-где транзакции все-таки есть. Для примера, нужно разнести макет на 100000 записей. Как делать глупо - создать одну транзакцию в начале операции и в случае ошибок ее откатываем. Результат - множественные блокировки в системе, подвешивание с случае отката, проблемы с разбором полетов при ошибке. Как получше - поместить в транзакцию разноску одной строки Как еще лучше - не помещать разноску строки в транзакцию, а анализировать статус возврата более низкоуровневых функций, делающих проводки. Транзакции остаются только на самом нижнем уровне, который являятся критичным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 19:05 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Rus000 без системно поддерживаемого СУБД снапшота или повторяемого чтения Вы принципиально в приложении не сможете обеспечить повторяемое чтение. Да нет, вы путаете. Это Вы не можете ;-) хех, для начала "давайте обсуждать вкус креветок с теми кто их ел" (c) что ж раз вызвались, покажите здесь пример _прикладного уровня_, обеспечивающий повторяемой чтение. Надеюсь не нужно напоминать требование к этому уровню изоляции? Проще разобраться с ситуацией, когда падающий процесс говорит "пиу", и оставляет все как было. Значительная часть операций уже сама по себе атомарна, либо атомарность не критична. это просто перл :) классический пример: со счета А делаем перевод денег на счет Б. Со счета А сняли, записать на Б не успели и процесс "пиу" (c). Транзакции нет - что делать-то будете? Для примера, нужно разнести макет на 100000 записей. [skip] Транзакции остаются только на самом нижнем уровне, который являятся критичным. и что показывает этот пример? вернитесь к repeatable read ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 19:58 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Ну вот не нужно снисходительно сверху вниз на меня смотреть. Проблемы то у вас, а не у меня. Rus000 классический пример: со счета А делаем перевод денег на счет Б. Со счета А сняли, записать на Б не успели и процесс "пиу" (c). Транзакции нет - что делать-то будете? Я понимаю, уже поздно и внимание ослабено. Почитайте внимательно - тут транзакции есть. Но во многих других местах их не будет. Но можно и тут обойтись без транзакций, при условия что запрос каше целиком либо выполняется, либо нет. Если не ошибаюсь, то внутри одного запроса каше все-таки использует транзакции. Например, (1) записываем в таблицу проводок две проводки поочередно со статусом "предварительно". (2) Если запись прошла без ошибок, меняем статус этих записей на "записано" одним запросом. Представьте, что вот есть, например, оракл. И в нем, хотите вы того или нет, тоже есть микрооперации, абсолютно не реляционные, наподобие операций с глобалами в каше. И вот с помощью этих операций волшебный дядя "на уровне системы" организует все вот эти фантомы и все такое. Но так как это все должно быть, во-первых, универсально, во-вторых, оно будет там где надо и там где не надо - это будет жрать ресурсы. Ну вот я считаю, что этими ресурсами можно распорядиться по своему усмотрению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2011, 20:51 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
что ж раз вызвались, покажите здесь пример _прикладного уровня_, обеспечивающий повторяемой чтение. Надеюсь не нужно напоминать требование к этому уровню изоляции? ждем примера, потом продолжим дискуссию про микрооперации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2011, 15:46 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Вы опять все путаете. Это у вас проблемы, и вам нужна помощь. А с подходом, что вам кто-то что-то должен, вы далеко не уедете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2011, 17:05 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Вы опять все путаете. Это у вас проблемы, и вам нужна помощь. А с подходом, что вам кто-то что-то должен, вы далеко не уедете. Коллега, у меня проблем нет. Проблемы есть у разработчиков которые принципиально в каше не могут выдавать заказчику консистентные отчеты на работающей системе, только на отсоединенном от апдейтов шадоу. Вы тоже в их числе. Если хотите это опровергнуть прошу привести пример повторяемого чтения на уровне прикладного кода каше, о котором вы публично заявили. Блок А.Н.Rus000 без системно поддерживаемого СУБД снапшота или повторяемого чтения Вы принципиально в приложении не сможете обеспечить повторяемое чтение. Да нет, вы путаете. Это Вы не можете ;-) Сказали А говорите Б - ждем, ждем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2011, 20:22 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
На слабо пытаетесь взять? Чтобы я пытаясь что-то вам доказать, делал за вас работу? Нее ... :-) Попытайтесь понять, что нет некого мистического "системного уровня". Все зависит от того, куда вас пускает производитель субд и что он за вас делает. Представьте, что вы разработчик оракла. Вот что бы вы сделали? Вот нужно сделать инсерт, чтобы его не видел другой процесс, вот апдейт нужно делать, но для разных процессов хранить обе копии. Представьте, что нет никаких транзакций. Ну? Это ведь не сложно. Вам же не нужно, как для оракла, делать универсальную систему, устойчивую ко всяким кривым рукам, вам не нужно писать компилятор запросов. Вам нужно это сделать по деревенски, на ваш прикладной уровень. ----- И все-таки, не нужно экстраполировать ваши проблемы на всех. И не думайте, что если вы отчеты берете с тени, то все это делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2011, 21:19 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.На слабо пытаетесь взять? Чтобы я пытаясь что-то вам доказать, делал за вас работу? Нее ... :-) я не прошу делать за меня работу, а прошу показать ЛЮБОЙ мифический пример который бы показывал свойства повторяемого чтения. Примера я не вижу здесь, значит делаю вывод что этого сделать нельзя. Ну или точнее вы его сделать не можете, несмотря на бахвальство выше. Слив засчитан, как говорится. Что и требовалось доказать про концептульные пробелы каше. Попытайтесь понять, что нет некого мистического "системного уровня". Все зависит от того, куда вас пускает производитель субд и что он за вас делает. Представьте, что вы разработчик оракла. Вот что бы вы сделали? Вот нужно сделать инсерт, чтобы его не видел другой процесс, вот апдейт нужно делать, но для разных процессов хранить обе копии. Представьте, что нет никаких транзакций. Ну? Это ведь не сложно. поверьте, это сложно. возьмите пару серьезных книжек по транзакционной обработке и офигеете от теоретических посылок, я уже не говорю о реализации. И все-таки, не нужно экстраполировать ваши проблемы на всех. И не думайте, что если вы отчетык берете с тени, то все это делают. Если Вы этого не понимаете то это не значит что этой проблемы в СУБД не существует. Я утверждаю что есть нерешенная в каше задача обеспечения transaction level consistency. Именно поэтому приходится лепить коленочные "конструкторы" которые и отдаленно не могут приблизится по степени проработки системных решений, которые есть в большинстве популярных СУБД, ДАЖЕ в FB, которая не позиционируется как промышленная. И из-за отсутствия таких системных механизмов прикладные разработчики и как следствие заказчики получают непонятно какие отчеты. Вот в чем печаль, коллега. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2011, 20:25 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Я понимаю, вам единственная радость потешить свое ЧСВ. Удивительно :-) На прикладном уровне гораздо все гораздо проще, вам не нужно писать универсальный компилятор и процессор запросов, учитывающий все эти моменты. Вам всего лишь нужно хранить данные так, чтобы самому в них не запутаться. Т.е. все версии данных, если они имеют какое-то значение, должны храниться. К каждой версии данных должна быть прикреплена метка времени. В большинстве случаев этого будет достаточно, и это просто в реализации. У меня устойчивое ощущение, что я это говорил кому-то с проблемой, подозрительно похожей на вашу, но он отмахнулся. Я ассоциирую его с вами, и поэтому ваше требование примера реализации мне казалось странным. Если вы используете длительные транзакции, то все усложняется (поэтому я избегаю длительных транзакций) В случае с одним уровнем транзакции нужно будет держать метки нахождения в транзакции и временные метки выхода из транзакций, что уже на грани изврата, а в случае многоуровневых транзакций и вовсе превращается в хрен знает что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2011, 21:35 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.У меня устойчивое ощущение, что я это говорил кому-то с проблемой, подозрительно похожей на вашу, но он отмахнулся.Я ассоциирую его с вами, и поэтому ваше требование примера реализации мне казалось странным. А ну так это в этой же теме было: http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=840890&msg=10465459 Для вас оказалось проблемой изменить архитектуру своего приложения, но зато вы с легкостью говорите о изменении архитектуры каше. Кстати, дату документа, о которой вы там говорите, вы путаете с меткой времени, которую я имею ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2011, 21:45 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.На прикладном уровне гораздо все гораздо проще, вам не нужно писать универсальный компилятор и процессор запросов, учитывающий все эти моменты. Вам всего лишь нужно хранить данные так, чтобы самому в них не запутаться. Т.е. все версии данных, если они имеют какое-то значение, должны храниться. К каждой версии данных должна быть прикреплена метка времени. В большинстве случаев этого будет достаточно, и это просто в реализации. это проще для систем которые только в стадии проектирования. Но не применимо для систем архитектура уже сложилась за годы эксплуатации и доработки. Если бы каше представляло возможность создания снапшотов и повторяемого чтения, решение было бы универсально для любых приложений причем _без переделки_, соответственно сохранение ранее вложенных в разработку программы инвестиций. Если вы используете длительные транзакции, то все усложняется (поэтому я избегаю длительных транзакций) это понятно, вопрос не в этом, а в том, что для обеспечения консистентности вам _придется_ использовать длинную транзакцию для обертывания всего отчета, чтобы он посчитался корректно. По крайней мере так делается в оракле, ms sql, sybase и FB. С учетом того, что в каше нет консистентности на уровне транзакций, делать длинные транзакции не имеет смысла. В случае с одним уровнем транзакции нужно будет держать метки нахождения в транзакции и временные метки выхода из транзакций, что уже на грани изврата, а в случае многоуровневых транзакций и вовсе превращается в хрен знает что. я об этом и говорю - это однозначно не прикладной уровень. Все что бы ни сделал прикладной разработчик будет убогой поделкой по сравнению с аналогичной системной фичей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 07:04 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н. Вы писали: Код: plaintext 1. 2. 3. 4. 5. А нельзя ли поподробней? Столкнулся с неожиданной (для меня) ситуацией: 1.Открываю два терминала Каше 2.В первом сеансе делаю: tstart s ^xx(22)=22 3.Во втором сеансе делаю: w ^xx(22) 22 Такими примерами на курсах по MSSQL и Oracle демонстрируют работу транзакций. Только там второй сеанс не видит НЕЗАКОМИТЧЕНЫХ данных первого сеанса. А здесь - пожалуйста, транзакция незакончена, а второй сеанс уже работает с ее данными. Транзакция первого сеанса может быть откачена, но часть ее данных попала в отчет, расчет или то, что делает второй процесс. Получается, что надо либо ставить блокировки, либо реализовать версионность данных на прикладном или инструментальном уровне. http://www.ibase.ru/devinfo/versions.htm - здесь приведено описание реализации версионности в InterBase. Если кто-то знает более простой способ, просьба привести ссылку или описание. В частности, Вы, Блок А.Н. пишете: "К каждой версии данных должна быть прикреплена метка времени. В большинстве случаев этого будет достаточно, и это просто в реализации." Как Вы с этим работаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 13:00 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Да, транзакционность в каше работает так, что ее как бы нет до тех пор, пока вы захотите откатить результаты. Мало того, блокировки тоже работают так, как будто их нет. Т.е. вы можете проверить наличие блокировки на ресурс, но это не помешает вам с ним работать, если захотите. Все на откуп разработчика. Применительно к вашему примеру, если вам нужно будет заменить ^xx c 22 на 220 "версионность" будет выглядеть так: s ^xx(1)=22 s ^xx(2)=-22 s ^xx(3)=220 Это грубо, конечно, но как-то аналогично делается и на таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 14:41 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Да, транзакционность в каше работает так, что ее как бы нет до тех пор, пока вы захотите откатить результаты. Мало того, блокировки тоже работают так, как будто их нет. Т.е. вы можете проверить наличие блокировки на ресурс, но это не помешает вам с ним работать, если захотите. Все на откуп разработчика. Применительно к вашему примеру, если вам нужно будет заменить ^xx c 22 на 220 "версионность" будет выглядеть так: s ^xx(1)=22 s ^xx(2)=-22 s ^xx(3)=220 Это грубо, конечно, но как-то аналогично делается и на таблицах. Т.е. 1, 2 и 3 - это номера версий? А как с ними работать? Во время работы отчета может появиться версия 4. Как определить, что для отчета нужна версия 3? И где упомянутые Вами "временные ветки"? Впрочем, если это фирменное Ноу хау, я не настаиваю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:57 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
DirksDR, "временные метки" (очепятка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 15:58 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
DirksDR, Это не ноу-хау каше, естественно. Пример условный, это тоже понятно. Просто если документ проводится или откатывается, то создаются новые проводки, а не исправляются старые. Если документ правится, то обычно имеет значение история и кто исправлял, т.е. создается строка истории. И если будет необходимость получить состояние системы на определенную временную метку, то это можно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 16:58 |
|
||
|
О построении отчетов на OLTP
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., Спасибо, теперь понял. У нас система оперативно-диспетчерской отчетности аналогично формирует отчеты на любую дату, и даже с точностью до двухчасовки. Я немного на другом сосредоточился, поэтому не сразу вьехал. В процессе формирования отчета на текущую двухчасовку весьма вероятны изменения данных на эту двухчасовку. Диспетчера по нескольку раз могут перебивать показатели одной и той же двухчасовки. Чтобы в этих условиях получить непротиворечивый отчет, надо дискретизировать время до таймстампа, при формировании отчета засечь время, выждать полсекунды, и потом выбирать данные на момент засечки времени по таймстампам. Пожалуй, действительно проще interbase-овской версионности. P.S.На самом деле выждать надо не полсекунды, а время самой продолжительной транзакции на обновление:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2011, 19:30 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=37366088&tid=1557677]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
128ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 444ms |

| 0 / 0 |
