Changes between Version 4 and Version 5 of Оптимизација на прашалници и погледи


Ignore:
Timestamp:
05/20/26 22:53:21 (5 days ago)
Author:
231068
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Оптимизација на прашалници и погледи

    v4 v5  
    22
    33[[html(<a href="https://develop.finki.ukim.mk/projects/BPS_EMJ/attachment/wiki/%20%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%98%D0%B0%20%D0%BD%D0%B0%20%D0%BF%D1%80%D0%B0%D1%88%D0%B0%D0%BB%D0%BD%D0%B8%D1%86%D0%B8%20%D0%B8%20%D0%BF%D0%BE%D0%B3%D0%BB%D0%B5%D0%B4%D0%B8/OptimizacijaPrashalniciPogledi.pdf"> Optimizacija i Prashalnici</a>)]]
     4
     5= Напредни бази на податоци =
     6
     7== Фаза 3 – Оптимизација на прашалници и погледи ==
     8
     9'''Име на проект: BankPaymentService'''
     10
     11----
     12
     13== View 1: Најава на корисник (Login view) ==
     14
     15 * '''Филтри:''' Примарен филтер за погледот `v_user_login` ќе биде според `username`, а дополнително се филтрира само на корисници со статус `ACTIVE`.
     16
     17 * '''Употреба:''' е процесот на логирање на клиент во системот. Погледот обезбедува брз пристап до корисничкото име, и статусот на сметката.
     18
     19 * '''Иницијално време:''' Иницијалното време за извршување на погледот е 0.315ms. Ова е прифатливо време за апликацијата.
     20
     21 * Најбавните операции се две Index Scan операции:
     22   * Index Scan на табела `client_user` преку индексот `client_user_username_key` - Actual Total Time: 0.039ms
     23   * Index Scan на табела `client` преку индексот `client_pkey` - Actual Total Time: 0.013ms
     24
     25 * Вкупниот Nested Loop завршува за само 0.056ms. Бидејќи се работи за Index Scan (не Full Scan), операциите не можат значително да се подобрат со дополнителни индекси.
     26
     27 * Времето изминато во извршување на операциите insert и update изнесува
     28
     29 * Нема потреба да се преуреди прашалникот.
     30
     31 * Време на извршување на операциите insert и update останува исто.
     32
     33----
     34
     35== View 2: Извештаи (Receipt view) ==
     36
     37 * '''Филтри:''' Примарен филтер за погледот `v_client_receipts` ќе биде според `client_id`, а дополнително може да се користи и според `transaction_date` (по временски период - месец и година).
     38
     39 * '''Употреба:''' Примарен случај на употреба е преглед на издадени сметки за клиент по одреден период. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
     40
     41 * '''Иницијално време:''' Иницијалното време за извршување на погледот e 705ms. Ова е прифатливо време за апликацијата.
     42
     43 * Нема потреба од правење план на извршување, бидејќи времето е задоволително. Времето на операциите insert и update е
     44
     45 * Нема потреба да се преуреди прашалникот.
     46
     47 * Време на извршување на операциите insert и update останува исто.
     48
     49----
     50
     51== View 3: Рати (Loan installments view) ==
     52
     53 * '''Филтри:''' Примарен филтер за погледот `v_loan_installments` ќе биде според `loan_id`.
     54
     55 * '''Употреба:''' Примарен случај на употреба е кога клиентот или банкарскиот персонал сака да ги прегледа ратите за конкретен кредит. За овој поглед ни се важни перформансите.
     56
     57 * '''Иницијално време:''' Иницијалното време за извршување на погледот е 250.5ms. Ова е прифатливо време за апликацијата.
     58
     59 * Нема потреба од правење план на извршување, бидејќи времето е задоволително. Пребарувањето по `loan_id` секогаш враќа мал број рати за конкретен кредит, па табелата не се пребарува со висока фреквенција истовремено. Времето на операциите insert и update изнесува
     60
     61 * Нема потреба да се преуреди прашалникот.
     62
     63 * Времето на извршување на операциите insert и update останува исто.
     64
     65----
     66
     67== View 4: Преглед на кредити ==
     68
     69 * '''Филтри:''' Примарен филтер за погледот `v_loan_details` ќе биде според `loan_id`, а исто така и според `client_id`.
     70
     71 * '''Употреба:''' Примарен случај на употреба е целосен преглед на кредитна апликација. За овој поглед ни се важни перформансите, бидејќи без него се губи многу време при извршување.
     72
     73 * '''Иницијално време:''' Иницијалното време за извршување на погледот e 1s 735ms. Времето е побавно поради повеќе JOIN операции и full scan на табелите Account и Collateral. Ова не е прифатливо за апликацијата.
     74
     75 * Најбавните операции се JOIN-овите на Account и Collateral преку `loan_id`, кои немаат индекси на надворешниот клуч.
     76
     77 * Времето изминато во извршување на операциите insert и update изнесува
     78
     79 * Времето изминато во извршување на query-то со индекси изнесува 781ms, и тоа е прифатливо време.
     80
     81 * Времето изминато во извршување на операцијата update по индексирање изнесува
     82
     83----
     84
     85== View 5: Трансфери меѓу сметки, трансакции ==
     86
     87 * '''Филтри:''' Примарен филтер за погледот `v_client_transfers` ќе биде според `sender_client_id`, а дополнително и според `transaction_date`.
     88
     89 * '''Употреба:''' Примарен случај на употреба е кога клиентот сака да ги прегледа своите извршени трансфери. За овој поглед ни се важни перформансите.
     90
     91 * '''Иницијално време:''' Иницијалното време за извршување на погледот е 68ms. Времето е прифатливо, бидејќи JOIN операциите се базираат на примарни и надворешни клучеви кои веќе имаат индекси.
     92
     93 * Најбавните операции не претставуваат значителен проблем. Двојниот JOIN на Account и Client (за испраќач и примач) се изведува ефикасно преку постојните индекси.
     94
     95 * Времето на операциите insert и update изнесува
     96
     97 * Нема потреба да се преуредува прашалникот.
     98
     99 * Времето на извршување на операциите insert и update останува исто.
     100
     101----
     102
     103== View 6: Сомнителни трансакции ==
     104
     105 * '''Филтри:''' Примарен филтер за погледот `v_suspicious_transactions` е `amount > 9000 AND status IN ('PENDING', 'FAILED')`.
     106
     107 * '''Употреба:''' Примарен случај на употреба е мониторинг на потенцијално сомнителна активност (AML). За овој поглед ни се важни перформансите, бидејќи без него се губи многу време при извршување.
     108
     109 * '''Иницијално време:''' Иницијалното време за извршување на погледот е 8s 15ms. Времето за извршување е побавно поради full scan на табелата Transaction за да се пронајдат записите со висок износ. Ова не е прифатливо за апликацијата, па затоа пристапуваме кон индексирање.
     110
     111 * Најбавните операции се full scan на Transaction за филтрирање по `amount` и `status`, и JOIN со Account без индекс на `client_id`.
     112
     113 * Времето изминато во извршување на insert и update изнесува
     114
     115 * Времето изминато во извршување на query-то со индекси изнесува 669ms, и тоа е прифатливо време.
     116
     117 * Времето изминато во извршување на операцијата update по индексирање изнесува
     118
     119----
     120
     121== View 7: Вкупна состојба на клиент ==
     122
     123 * '''Филтри:''' Примарен филтер за погледот `v_account_balance` ќе биде според `client_id`.
     124
     125 * '''Употреба:''' Примарен случај на употреба е кога клиентот сака да го провери балансот на своите сметки. Овде се битни перформансите, затоа што сакаме апликацијата да функционира без застој.
     126
     127 * '''Иницијално време:''' Иницијалното време за извршување на овој поглед изнесува 88ms. Времето е мало и прифатливо, бидејќи JOIN-овите се на примарни клучеви.
     128
     129 * Нема потреба од правење план на извршување, бидејќи времето е задоволително. Времето на операции insert и update изнесува
     130
     131 * Нема потреба да се преуреди прашалникот.
     132
     133 * Време на извршување на операциите insert и update останува исто.
     134
     135----
     136
     137== View 8: Следење на доцнења (Loan Default Monitoring) ==
     138
     139 * '''Филтри:''' Примарен филтер за погледот `v_loan_default_monitoring` ќе биде според `installment_status IN ('PENDING','LATE')` и `due_date`, со услов `paid_date IS NULL`.
     140
     141 * '''Употреба:''' Примарен случај на употреба е кога банкарскиот персонал сака да ги идентификува клиентите кои задоцниле со плаќање. За овој поглед ни се важни перформансите, бидејќи без него се губи многу време при извршување.
     142
     143 * '''Иницијално време:''' Иницијалното време за извршување на погледот е 9s 289ms. Иницијалното време за извршување на погледот беше побавно поради full scan на табелата Loan_installment. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
     144
     145 * Најбавните операции се full scan на `Loan_installment` без филтрирање на платените рати, и JOIN со Account без covering индекс.
     146
     147 * Времето изминато во извршување на INSERT и UPDATE пред изнесува
     148
     149 * Времето изминато во извршување на query-то со индекси изнесува 597.9ms, и тоа е прифатливо време.
     150
     151 * Времето изминато во извршување на операциите insert и update по индексирање изнесува
     152
     153----
     154
     155== View 9: Accounts (сметки) ==
     156
     157 * '''Филтри:''' Примарен филтер за погледот `v_accounts` ќе биде според `client_id`.
     158
     159 * '''Употреба:''' Примарен случај на употреба е преглед на сите сметки на клиент при услуги на шалтер. Овде се битни перформансите.
     160
     161 * '''Иницијално време:''' Иницијалното време за извршување на овој поглед е 100ms, што е прифатливо, па затоа нема да имаме потреба од индексирање.
     162
     163 * Нема потреба од правење план на извршување, бидејќи времето е задоволително. Времето на операциите insert и update е
     164
     165 * Нема потреба да се преуредува прашалникот.
     166
     167 * Времето на извршување на операциите insert и update останува исто.
     168
     169----
     170
     171== View 10: Камати по штедни сметки ==
     172
     173 * '''Филтри:''' Примарен филтер за погледот `v_savings_interest_payments` ќе биде според `client_id`.
     174
     175 * '''Употреба:''' Примарен случај на употреба е кога клиентот сака да ги прегледа добиените камати по период. Овде се важни перформансите.
     176
     177 * '''Иницијално време:''' Иницијалното време за извршување на овој поглед е 214ms, што е прифатливо, па затоа нема да имаме потреба од индексирање.
     178
     179 * Нема потреба од правење план на извршување, бидејќи времето е задоволително. Времето на операциите insert и update е
     180
     181 * Нема потреба да се преуредува прашалникот.
     182
     183 * Времето на извршување на операциите insert и update останува исто.
     184
     185----
     186
     187== View 11: Дневен извештај на филијала ==
     188
     189 * '''Филтри:''' Примарен филтер за погледот `v_daily_branch_report` ќе биде според `branch_id`, а дополнително и според `report_date`.
     190
     191 * '''Употреба:''' Примарен случај на употреба е кога раководството на филијалата или централниот менаџмент сака да ги следи дневните активности. Овде се битни перформансите.
     192
     193 * '''Иницијално време:''' Иницијалното време за извршување на погледот е 385ms. Ова е прифатливо време за апликацијата.
     194
     195 * Нема потреба од правење план на извршување, бидејќи времето е задоволително. Времето на операциите insert и update е
     196
     197 * Нема потреба да се преуредува прашалникот.
     198
     199 * Времето на извршување на операциите insert и update останува исто.
     200
     201----
     202
     203'''Членови на тим:'''
     204
     205Михаела Ковчегарска 231068[[BR]]
     206Јована Мечева 231124[[BR]]
     207Емилија Костова 231107