powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите максимально оптимизировать
22 сообщений из 47, страница 2 из 2
помогите максимально оптимизировать
    #40059219
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery,

что хранить остатки за день - надо, чтоб кто-то делал закрытие дня или делать это автоматом (FB триггеров по времени вроде не умеет), то есть это должен делать человек, а товар может приходить и оприходываться ночью
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059220
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
(FB триггеров по времени вроде не умеет), то есть это должен делать человек
man crontab
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059232
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFominа товар может приходить и оприходываться ночью

Совершенно всё равно. Никто ведь не заставляет тебя закрывать сегодняшний день. День
недельной давности закрывается даже проще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059241
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
WildSery,

что хранить остатки за день - надо, чтоб кто-то делал закрытие дня или делать это автоматом (FB триггеров по времени вроде не умеет), то есть это должен делать человек, а товар может приходить и оприходываться ночью


Да не на день, а на текущую, грубо говоря, секунду. В оперативной работе, на которую приходится деятельность 80% сотрудников, нужны именно они. А бухгалтеры и аналитики пусть работают себе с журналом. Решение от Евгения Шавлюка для этого оптимальное, удачное применение бухгалтерского приёма в оперативном учёте. У бухгалтеров своя свадьба и у них всё должно быть по своему, вплоть до вообще своей отдельной базы во избежание лишних вопросов из внешнего мира, у аналитиков своя. Я вот делал для них не двойную запись, а приходы и расходы со знаком в тех же целях - получать результат через SUM. У него, пожалуй, проще, за счёт увеличения объёма данных. Я-то это проектировал когда прогрессивный корпоративный сервер был на двухголовом Р90 с рейдом аж на четырёх дисках по 1Гб, об объёмах приходилось думать очень внимательно. Так пережиток и живёт поныне. А насчёт вложенных селектов в запросах к действительно большим объёмам данных - когда я их вижу, указательный пальчик правой руки тянется к спусковому крючку пистолета :))
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059295
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаЯ вот делал для них не двойную запись, а приходы и расходы со знаком в тех же целях

Дед, ты не поверишь, но это и есть двойная запись: когда одно движение денег записывается
дважды, в одно место с плюсом, а в другое - с минусом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059309
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Старый плюшевый мишкаЯ вот делал для них не двойную запись, а приходы и расходы со знаком в тех же целях

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


Не, ты не понял. Или не совсем понял. Или я неправильно выразился. Или не совсем правильно. Или не полно. Или...
Короче, примерно так у меня выглядит складская карточка в оперативном, не бух, учёте, тот самый журнал итогов складских операций

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SHOW TABLE sklchart
KODTOV                          INTEGER Not Null 
STORE                           INTEGER Not Null /*ID склада*/
TIPZAP                          INTEGER Not Null 
DZCODE                          INTEGER Not Null /*ID операции, в том числе инвентаризаций*/
KOLINT                          INTEGER Not Null 
DATEZAV                         DATE Nullable Default "NOW"
/*не относящиеся к вопросу атрибуты*/
RZKOLINT                        INTEGER Nullable default 0

CONSTRAINT SKCR_PK:
  Primary key (KODTOV, STORE, TIPZAP, DZCODE)
CONSTRAINT SKCR_FKNOM:
  Foreign key (KODTOV)    References NOMENKL (CODE)
CONSTRAINT SKCR_FKDZ:
  Foreign key (STORE, DZCODE)    References DVIG_ZAP (STORE, CODE)



Уж прости что не из Эксперта, WISQL запускается быстрее и вообще всё в одном окошке видно ;) Остаток - RZKOLINT, изменение - KOLINT, и вот оно при приходе положительное, при расходе отрицательное. При перемещении запасов между складами фирмы будет, разумеется, и вторая запись, после регистрации прихода на другом складе. И не факт, что того же товара и такое же количество, грузчики всё-таки люди, а людЯм, как известно, свойственно ошибаться и иногда совать не то, не туда и не столько. А при поступлении из внешнего мира и при уходе в оный второй записи не будет. Так что двойная запись тут такая... сусликоподобная, вроде и есть, а вроде и нету :)
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059321
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаНе, ты не понял. Или не совсем понял. Или я неправильно выразился. Или не совсем
правильно. Или не полно. Или...

Да всё я понял. Просто тут надо иметь немного опыта ведения бухгалтерии на бумаге.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059564
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery
KreatorXXI
А "суммы" разные? Если одинаковые, то зачем две операции?
Может, лучше вообще ничего не писать, а просто таблички на складах перевесить?
Бывают операции не парные (просто списание и просто приход). (для движений склада, не бухучёта)
А ещё, кроме склада и суммы, бывают другие реквизиты записей, и они могут различаться.

Есть о чём спорить. Вот я в своё время подсмотрел у грандов технику и так делаю. Есть получатель, есть отправитель, есть сумма. Есть ещё тип операции. Одна запись. Бухгалтерия в принципе также устроена. Дебет, кредит, сумма.
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059594
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI

Есть о чём спорить. Вот я в своё время подсмотрел у грандов технику и так делаю. Есть получатель, есть отправитель, есть сумма. Есть ещё тип операции. Одна запись. Бухгалтерия в принципе также устроена. Дебет, кредит, сумма.


Вообще-то получатель и отправитель - это атрибуты-ключи транспортной партии, а не складской операции. И их в этой ТП может быть не по одному. СО с ТП связана, через соответствующие таблички, разумеется, но не всегда. А СО, связанная с движением запасов, - это обычно не выдача студенту буханки хлеба, а приёмка-отгрузка вагончика тонн на 60 со всякой тварью по паре внутре. И у этой СО тоже есть состав. А вот бухгалтерию эти нюансы редко интересуют, хотя случается. На грандство не претендую, если чо :)
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059598
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Суммы всегда одинаковые. Разные "склады" и "знак"
Минус со "склада А" плюс на "склад Б".
Для получения остатков на текущий момент суммируются значения по нужному складу
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059675
a7exander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет получения остатков с одной таблицей хотел бы дополнить своим способом которым пользуюсь много лет:

остатки хранятся в таблице движения датой "01.01.2100" со знаком минус
соответственно остаток на любой момент выбирается SUM по датам > даты нужного момента.

корректность остатков легко проверяется общим суммированием - сумма должна быть всегда 0

один из больших плюсов - остатки на самые используемые периоды получаются быстрее всего, кроме того старые даты легко отрезать в случае складирования в архив
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059716
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a7exander,

А когда пересчитывается '01.01.2100'?
Или каждое движение добавляет и в эту дату?
Остатки на эту дату изменяются обновлением вставкой или обновлением строки (тут возможны конфликты)?

Обрезка данных и в моей модели не сложно. Т.к. остатки всегда считаются начиная от какой-то даты, то все что раньше можно без проблем обрезать
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059724
a7exander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений,

строка на 01.01.2100 обновляется триггером при добавлении/удалении/изменении любой другой строки кроме этой даты.

За много лет эта схема сбоев не давала в продакшене, правда нагрузки небольшие, до 40 пользователей работают
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059726
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.04.2021 12:23, a7exander пишет:
> строка на 01.01.2100 обновляется триггером при добавлении/удалении/изменении любой другой строки кроме этой даты.
> За много лет эта схема сбоев не давала в продакшене, правда нагрузки небольшие, до 40 пользователей работают

с каким уровнем изоляции?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059731
a7exander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Везде read_committed

в процедуре проводки после вставки еще контроль делается - SUM чтобы было 0, а если не то эксепшн

думал если будут проблемы то вместо одной строки с ее апдейтами буду делать отдельную для каждой операции и потом ночью их в одну сжимать. Но работа устраивает, так что оставил так.
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059734
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.04.2021 12:38, a7exander пишет:
>
> Везде read_committed

дальше обсуждать нет смысла.
удачи в ловле покемонов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059735
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a7exander
Шавлюк Евгений,

строка на 01.01.2100 обновляется триггером при добавлении/удалении/изменении любой другой строки кроме этой даты.

За много лет эта схема сбоев не давала в продакшене, правда нагрузки небольшие, до 40 пользователей работают
Не очень понятно, как update в триггере мог за "много лет" не привести к конфликтам при работе 40 пользователей.
Можно, конечно, предположить, что они "Повтор" нажимают, пока не нажмется.
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059741
a7exander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, Мимопроходящий

Ну так это в любой схеме возможно, и с отдельной таблицей для остатков и с остатками помесячно, без разницы.
Я лишь подсказал идею, которой пользуюсь сам - минимум дополнительный строк, очень простые SQL для получения остатков, максимальная скорость получения на последнюю дату, быстрый и простой метод верификации, минимум логики обвязки для работы

далее кому какие шашечки - реализовываем по вкусу
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059742
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockНе очень понятно, как update в триггере мог за "много лет" не привести к конфликтам при
работе 40 пользователей.

Они продают разные товары. Поэтому каждый остаток изменяется максимум одним пользователем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059745
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.04.2021 12:50, Dimitry Sibiryakov пишет:
> Они продают разные товары.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40059774
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

05.04.2021 12:38, a7exander пишет:
>
> Везде read_committed

дальше обсуждать нет смысла.
удачи в ловле покемонов.


Использование for update with lock при доступе к агрегатам обеспечит корректную работу для read_committed. Разве нет?
...
Рейтинг: 0 / 0
помогите максимально оптимизировать
    #40060021
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock

Не очень понятно, как update в триггере мог за "много лет" не привести к конфликтам при работе 40 пользователей.
Можно, конечно, предположить, что они "Повтор" нажимают, пока не нажмется.

Именно так. Безотносительно триггера - у меня завершение складской операции может продолжаться минут 10. Это, разумеется, крайний случай, когда в вагоне о 60 тоннах сотня наименований. Которые отстреливают в текущее состояние запасов и в ценовые группы, не говоря уж о резервах филиалов на товары. Короче, 17 страниц тексту ХП. Правда, там concurrency, работа в приращениях, а не присваиваниях, и 6 раз "повтор" нажимает application server, но за 20 с лихуем лет сообщение - попробуйте повторить позже - вылезало 4 раза. Это как раз случаи по 10 минут. В общем, каждая ложка хороша к своему обеду. Возможностей море, выбрать под свою ситуацию есть из чего, а панацеи нетути.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите максимально оптимизировать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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