|
|
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
Уважаемые эксперты, проектирую базу данных - счета, проводки. Хотелось бы сделать динамическое вычисление балансов счетов, но опасаюсь проблем производительности. Таблица счетов - несколько тысяч записей, Таблица проводок - несколько миллионов записей. Кол-во конкуретных пользователей - несоклько сотен. Можно ли вычислять балансы счетов динамически? Как современные ERP системы решают подобную задачу? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2009, 18:30 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
14floor, лучше так не делать. Но есть вариант. Время от времени делать свёртки баланса, т.е. расчитывать баланс по состоянию на некую не слишком далёкую дату в прошлом, а текущий баланс расчитывать по свёртке и операциям, которые прошли после свёртки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2009, 19:51 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
expla, да, хорошая идея ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2009, 21:15 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
автор...хранить остатки и обороты совершенно не нужно. Их и так можно посчитать в любой момент времени. Правильно? Слышу тихий ропот: "при некоторых объемах эти расчеты просто несерьезно делать каждый раз, пересчитывая все с самого начала. Нужны срезы..." Правильно, но это всего лишь отдельный вопрос производительности. И решать его нужно отдельно от вопроса структуры хранения информации. Индексированные/материализованные view прекрасно решают проблему производительности сервера (да и программиста). Если вы еще не перешли на SQLServer 2000 или Oracle8i (9i), то самое время сделать это. Да и на других серверах можно грамотно создать таблицы, содержащие агрегированную информацию. Главное, что это не повод для нереляционного хранения данных в реляционной СУБД. Возможные детали реализации подсказанной Вам идеи можно посмотреть в статье Владислава Чистякова, откуда и была взята приведенная выше цитата. Там ближе к концу статьи есть раздел "Использование индексированных представлений". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2009, 07:21 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
alexdr...Возможные детали реализации подсказанной Вам идеи можно посмотреть в статье Владислава Чистякова... Псевдоаналитический бред, начинающийся с первого абзаца. Чтобы не быть голословным: В.ЧистяковИтак. "Каждая хозоперация подлежит отражению в одной и той же сумме одновременно по дебету одного счета и кредиту другого". Уберем из этого определения плохо детерминированное понятие "хозоперация" и введем понятие "проводка". «Плохо детерминированное» – это, я так понимаю, «отсутствие четкого определения». Но ведь в контексте бухгалтерского учета , это понятие (термин) определен на законодательном уровне. Цитата из Закона «О бухгалтерском учете и финансовую отчетность на Украине: … хозяйственная операция – действие или событие, которое вызывает изменение в структуре активов и обязательств, собственном капитале предприятия; Думаю, коллеги из стран ближнего и дальнего зарубежья смогут привести похожие цитаты из собственного законодательства. Далее: В.ЧистяковЗададимся вопросом – что же означает слово "отражению"? В данном случае это означает, что проводка должна изменять остаток на обоих счетах . Точнее, она должна уменьшать остаток на одном счете и увеличивать на другом. Возможно, для автора статьи будет откровением узнать, что в бухгалтерском учете практикуются счета, к которым понятие «остаток» не применимо. Счета затрат, например. На этих счетах значимую для учета информацию имеют обороты, и они «закрываются» пооперационно или периодично. Далее: В.ЧистяковСуществует мнение, что двойная запись плохо описывается средствами реляционных БД и при попытке реализации приводит к денормализации с ограничением целостности. Такое мнение приводит к созданию систем, состоящих из огромного количества слабо связанных таблиц, например, отдельных таблиц для накладных прихода товара на склад (расхода со склада) и учета кассовых ордеров… … Такое "потабличное" проектирование очень упрощает жизнь проектировщика. Однако это та простота, которая впоследствии выйдет боком, так как не описывает жизненных процессов предприятия, а занимается простой регистрацией документов . Оформление достаточно формализованных документов, подтверждающих хозяйственные операции – это требование законодательства. Именно документы, в широком понимании этого слова, и описывают «жизненные процессы» предприятия. Как хранить эти документы в базах данных? А что требуется? Проводить анализ? Пожалуйста – «многотабличность». Просто избавиться от бумаг – сканированные образы. Еще шутка автора: В.ЧистяковВ принципе, любые учетные данные полиморфны по своей природе. «Полиморфны» - это надо понимать «имеющие много форм». Хотелось бы уточнить - под формой здесь подразумевается «показать» или «имеющие вид (характер)»? Из дальнейших рассуждений становится ясно, что автор имеет в виду второе. Тогда прошу коллег порассуждать о «полиморфности» такой учетной информации как, например, «Величина валового дохода». Для того чтобы понять, что «супчик плох», съедать всю порцию не надо. Поэтому ограничусь сказанным, хотя статью дочитал до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2009, 18:36 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
Папа ИгорьПсевдоаналитический бред, начинающийся с первого абзаца. Я бы не стал так сходу называть бредом статью уважаемого и заслуженного, но совершенной Вам не знакомого человека. Ну, да не в этом суть. Суть в том, что т.н. документоориентированные приложения, в частности подход, предложенный 1С, не являются единственно возможным методом реализации учетных систем. Я видел (работал с ними) ERP-системы, в которых понятие документ отсуствует как класс. И ничего себе, они прекрасно справлялись с учетными и прочими задачами. Я бы не хотел здесь обсуждать те или иные аспекты использованной терминологии. Этот вопрос лежит вне рамок моих сегодняшних интересов. Папа ИгорьНо ведь в контексте бухгалтерского учета , это понятие (термин) определен на законодательном уровне. При разработке информационных систем часто явно или неявно используется такой термин - "абстракция". Пользуясь абстракцией при разработке ИС вполне можно уйти от таких понятий как счет, остаток, оборот, что нисколько не скажется на ее функциональности. В этой статье мне показался интересным вариант решения проблем производительности при хранении неких величин в одном месте, скажем, в таблице проводок (пожалуйста, не цепляйтесь к использованию мной этого термина из "бухгалтерской" жизни, как именно будет называться такая таблица - не суть важно), без использования периодических пересчетов остатков или оборотов, запускаемых откуда-то извне самой БД. Т.е. в таком способе хранения неких величин в реляционной БД, в каком диктуют правила их построения. Все остальное (в том числе и бухгалтерские счета) можно рассматривать как аналитику, как некие измерения (если использовать терминологию аналитических - OLAP систем). Кроме того, в статье вскользь упоминается, что решение вопроса в пользу документо-ориентированной ИС может вместе с решением одних проблем привести к возникновению новых. Я полагаю, что эти соображения имеет смысл держать в голове при выборе той или иной архитектуры приложения. Вот собственно, те аспекты из-за которых я публиковал ссылку на эту статью в топике про динамическое вычисление балансов счетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2009, 14:53 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
для учетных задач не придумано (и не будет придумано) ничего лучшего чем формула: остаток на конец периода = остаток на начало периода + обороты за период. периодичность закрытия периода выбирается исходя из требований. Это может быть мин, час, день, неделя, месяц... или вообще какое либо абстрактное измерение, например, для зарплаты - номер расчета в рамках месяца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2009, 20:47 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
[quot alexdr...Я бы не стал так сходу называть бредом статью уважаемого и заслуженного, но совершенной Вам не знакомого человека...[/quot] Здравствуйте! «Уважаемый» и «заслуженный» - это из другого мира. Уважаемый и заслуженный А.Эйнштейн не разбирался в нейрохирургии. Но, будучи ответственным человеком, не писал статьи на эту тему. Статья претендует на характеристику «аналитическая». Я высказал свое мнение о качестве анализа. Практические решения автора не трогал. Вы доверяете проведенному анализу? Это Ваше право. Я не доверяю. Можно ошибаться при анализе задачи, исходить из неверных предпосылок – все мы люди. Но словесная шелуха, типа «полиморфные учетные данные», в статьях такого толка встречаться не должна. В политике можно «добавить воды» - в анализе нет! Потому статья и получила от меня характеристику «псевдоаналитическая». Как бы Вы отнеслись к предложению авиаконструктора, использовать вместо мотора табун лошадей на основании его утверждений, что в некоторых странах его мощность измеряется в лошадиных силах? Утрирую? Да. Но посылки автора о полиморфизме учетных данных имеют ту же ценность, что и лошадиные силы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2009, 21:56 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
Роман Дынникдля учетных задач не придумано (и не будет придумано) ничего лучшего чем формула: остаток на конец периода = остаток на начало периода + обороты за период. А если так: остаток на начало = остаток на конец - обороты за период. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2009, 22:06 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
Роман Дынникдля учетных задач не придумано (и не будет придумано) ничего лучшего чем формула: остаток на конец периода = остаток на начало периода + обороты за период. Дык, разве ж кто-то с этим спорит? Фишка в том, как этот самый остаток на конец периода получать из БД. Существуют варианты. Ну, а идея "закрытия периода" не является непременной частью ни ИС, ни БД. Об этом и разговор, собственно...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2009, 22:46 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
alexdrСуществуют варианты. Ну, а идея "закрытия периода" не является непременной частью ни ИС, ни БД. Об этом и разговор, собственно...:) "Несамопальные" варианты, собственно, тоже все давно известны - это ROLAP, HOLAP и MOLAP ROLAP - olap реального времени - его основа материализованные представления/индексированные вью и/или триггеры. Позволяет обновлять остатки при каждом "чихе". ROLAP работает напрямую с реляционным хранилищем, факты и таблицы с измерениями хранятся в реляционных таблицах, и для хранения агрегатов создаются дополнительные реляционные таблицы Плохо подходит для высоконагруженных OLTP систем. MOLAP - Использует суммирующую БД, специальный вариант процессора пространственных БД и создаёт требуемую пространственную схему данных с сохранением как базовых данных, так и агрегатов. HOLAP - использует реляционные таблицы для хранения базовых данных и многомерные таблицы для агрегатов. В большинстве учетных систем этот вариант является наиболее оптимальным. По-большому счету, "идея закрытия периода" относится к этому типу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2009, 23:32 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
Возможно ли совместить OLAP c OLTP в одном приложении? По-видимому, да. Вы об этом писали. Стоит ли это делать? По-видимому, зависит от задач, которые приложению предстоит решать. Сходу в голову приходит такой вопрос: а зачем так делать? Зачем совмещать в одном приложении инструменты, решающие разные задачи? Хотя допускаю возможность вариантов, когда так удобнее. Вы, собственно, об этом тоже писали, упоминая про MOLAP-системы. Почему HOLAP по Вашему мнению является наиболее оптимальным для большинства приложений для меня осталось загадкой. Чтобы не пытаться изобрести то, что уже существует и успешно используется многими. HOLAP - потому что он как раз и предназначен для симбиоза OLAP и OLTP, но подходит не всегда - например для "горячего" биллинга не подойдет. И еще раз повторюсь, "идея закрытия периода" (т.е. некий пересчет с регламентированной периодичностью неких данных и затем сохранение полученного результата - я правильно понимаю этот термин, мы говорим об одном и том же?) мне не представляется неотъемлемым атрибутом любой учетной системы. Я вообще, честно говоря, плохо понимаю о чем мы тут спорим и в чем предмет обсуждения? Есть инструменты OLAP, кот. можно использовать и не изобретать ничего своего. Можно реализовывать собственные схемы закрытия периодов без использования OLAP-инструментов - это не есть плохо. Но однозначно плохо для получения остатков каждый раз делать запросы типа select SUM(data) from... по всей таблице движений (Рано или поздно крах производительности неизбежен). Вообщем то, материализованные вьюхи и были по-большому счету созданы в серверах для того чтобы этого не делать. Других вариантов я не вижу и не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2009, 18:18 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
14floorУважаемые эксперты, проектирую базу данных - счета, проводки. Хотелось бы сделать динамическое вычисление балансов счетов, но опасаюсь проблем производительности. Таблица счетов - несколько тысяч записей, Таблица проводок - несколько миллионов записей. Кол-во конкуретных пользователей - несоклько сотен. Можно ли вычислять балансы счетов динамически? Как современные ERP системы решают подобную задачу? Спасибо! Если позволите ряд уточняющих вопросов 1 Если делается такая система на несколько сотен конкарент юзеров, то это вполне серьезная система и почему не рассмотреть возможность покупки чегого готового 2 "..динамическое вычисление балансов счетов.." Давайте уточним - о КАКОМ УЧЕТЕ идет речь? Если вы собрались автоматизировать минфиновский (или иной официальный) учет, то "Безумству храбрых поем мы песню..." Аналогично - любой другой официоз.. Если так, то лучше перейти к п1 3 Если же вам нужно автоматизировать какойто внутренний учет - например управленческий, то уже все не так страшно как в п2, но геморой обеспечен)))) Теперь к делу... Системы которые я видел безусловно хранят остатки по счетам в явном виде. Причем я не очень понял причем тут OLAP)))) Периодичность хранения/расчета остатков может отличаться. ERP как я понимаю не настаивают на ежедневном хранении остатков. Банковские системы более щепетильны и подразумевают хранение остатков на каждый день + ведение текущих (внутридневных) остаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2009, 22:47 |
|
||
|
динамическое вычисление балансов счетов
|
|||
|---|---|---|---|
|
#18+
Роман ДынникЯ вообще, честно говоря, плохо понимаю о чем мы тут спорим и в чем предмет обсуждения? Да, действительно, особого предмета для спора я тоже не вижу. Мы обменялись мнениями. Мне, во всяком случае, это было полезно. Роман ДынникНо однозначно плохо для получения остатков каждый раз делать запросы типа select SUM(data) from... по всей таблице движений (Рано или поздно крах производительности неизбежен). По этому поводу разногласий также нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2009, 13:07 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35892249&tid=1543354]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
182ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 500ms |

| 0 / 0 |
