/ / Генериране на големи и бавни отчети на сървър - уеб приложения, архитектура, сървър, уеб сървър, сървър за приложения

Генериране на големи и бавни отчети на сървър - уеб приложения, архитектура, сървър, уеб сървър, приложение-сървър

Хипотетично, как би могъл да се занимава някойприлагане на големи и бавни отчети на сървър? Мисля, че отчитам, когато SQL не може да бъде по-оптимизиран и това ще отнеме до 60 секунди или повече, за да се генерира. Мислил съм да имам прочетено копие на базата данни, за да не блокирам входящите заявки, или някакъв начин да има фонов процес, който да свърши работата и да уведомя потребителя, когато отчетът приключи. Има ли най-добрият начин да направите нещо подобно?

Отговори:

0 за отговор № 1

Много рядко е необходимо докладите да са близореално време. Следователно можете да обсъдите с бизнес експерти, за да разберете дали е приемливо данните да останат за известно време. Ако този период от време е достатъчно дълъг, можете да генерирате предварително отчети и да ги кеширате.

Друг подход, който би бил по-гъвкав имащабируемо би било да се публикуват събития от интерес в инфраструктурата за съобщения, както се случват. След това можете да имате асинхронен абонат, който използва тези събития, за да поддържа денормализирана версия на отчета актуална.

Например, представете си, че трябва да изготвим отчет за общите продажби на продукт на година. Ако приложението публикува съобщение като { type: "ProductSold", productId: 1, soldOn: someDate, price: 45.55 } тогава може да имате асинхронен абонат, който пише в таблица като YearlyProductSales (year int, product_id uuid, total money) ефективно поддържане на отчета актуален, когато се появят нови продажби.

Тъй като едно събитие описва нещо, което вече се е случило и е било записано, тогава не би трябвало да заключвате нищо, докато четете данни и изготвянето на отчета ще бъде толкова просто, колкото SELECT * FROM YearlyProductSales.


0 за отговор № 2

Много механизми за отчитане поддържат асинхронно отчитане. Точното внедряване зависи от вашия технологичен стек, но, например, ако използвате Jasper Reports, ето как да стартирате отчет асинхронно. Ако използвате SQL сървър, Тук е как го правите с помощта на SSRS. Повечето механизми за отчитане имат някакви асинхронни методи за изпълнение.

Настройването на реплики само за четене е изпитан и истински начин за облекчаване на натоварването на базата данни. Още веднъж, внедряването зависи от вашия технологичен стек. Отговорът по-горе, който започва по пътя към техники за съхранение на данни, също си струва. Доброто четене за хранилищата на данни / информационните полета ще ви помогне да решите колко усилия трябва да инвестирате тук.


0 за отговор № 3

SQL базата данни обработва едновременни заявки от Сделки и Заключване и не трябва да се притеснявате за боравене свходящи заявки. Ако искате да отбележите потребителя, че заявката е на опашка, трябва да внедрите потребителски интерфейс, както и заявките на Ajax и да покажете състоянието на процеса.