Задать вопрос
yarhosting
@yarhosting
Заказывайте программинг: PHP,SQL, JS,jQuery,Joomla

Как не танцевать на граблях с бубном делая CRM?

Хотелось бы уменьшить нагрузку на систему в многопользовательской облачной CRM.

Наиболее затратное по времени выполнения это расчет остатков за весь период на указанную дату в разрезе по номенклатуре.

Каждый раз приходится суммировать весь приход и расход.

Возникла идея сделать "закрытие месяца", как в 1С, чтобы считать остатки в накопительную таблицу и далее брать из нее и далее делать расчет только за текущий месяц.

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

1. Даст ли это прирост в скорости, есть ли смысл писать этот программный код или выхлоп будет ничтожным.

2. Не будет ли выборка по таблице со всеми месяцами и номенклатура и более тяжёлой? Или хранить только прошлый месяц, и.к. большинство запросов на текущую дату, а остальные запросы оставлять без "кеширования"?
  • Вопрос задан
  • 202 просмотра
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@caballero
Программист
за этот прирост вы заплатите гемором по вычислению остатков и оборотов на произвольную дату. например отчет с чередины прошлого месяца
Полный пересчет никаких проблем не представляет. гораздо дешевле докупть памяти и процесорного времени чем неоправдано усложнять систему. Одноце как раз и тормозит безбожно изза своей архитектуры.
В моей учетной системе например все пересчитывается и остатки по складам и по денежным счетам и никаких проблем нет.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Наиболее затратное по времени выполнения это расчет остатков за весь период на указанную дату в разрезе по номенклатуре.

1) Это ваше предположение или вы делали замеры производительности запросов и кода?
2) Если производительность действительно проседает, то каким образом у вас происходит вычисление? SQL с агрегацией и каунтом?
3) Сколько строк в таблицах выборки?
4) Что показывает explain?
5) Индексы?

Если оптимизировать по выборкам не получается и все упирается в запрос, то можно конечно выводить суммы помесячно, а затем делать агрегацию по суммам + довыборку из неполных месяцев, но тут есть свои нюансы, помимо очевидного усложнения кода и денормализации, как минимум не всегда все обороты намертво приколочены к концу месяца и могут меняться задним числом, что тоже надо будет учитывать и пересчитывать итоги при внесении таких правок.

Некоторую добавочную скорость может дать просто "долгий" кэш на такие запросы, с которым в принципе могут возникнуть те же проблемы - некоторое время данные будут неконсистентны.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Наиболее затратное по времени выполнения это расчет остатков за весь период на указанную дату в разрезе по номенклатуре.
Во-первых зачем это в crm? Во-вторых - зачем это каждый раз на заданную дату, а не на текущий момент?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы