| Version 20 (modified by , 34 hours ago) ( diff ) |
|---|
Query Optimization
View 1: Live offers for customer
- Примарен случај на употреба на овој поглед е за добивање на моменталните активни понуди за еден корисник при побарување на такси.
- Примарен филтер за овој поглед е атрибутот customer_id во релацијата offer
- Иницијално време на извршување на погледот е 1s и 533ms
Ова време е задоволително (помало од 3 секунди), па затоа не е потребно да се извршува оптимизирање на прашалникот.
- Нема потреба од правење на план за извршување поради тоа што времето е задоволително.
- Иницијалното време за insert и update во табелата offer е:
- Нема потреба да се преуреди прашалникот
- Времето на извршување на операциите останува исто
View 2: Available drivers
- Примарен случај на употреба на овој поглед е за добивање на слободните возачи во моментот за дадена компанија.
- Примарен филтер за овој поглед е атрибутот company_id во релацијата employmenthistory.
- Иницијално време на извршување на погледот е 3s и 982ms:
Ова време не е прифатливо за нашата апликација, па затоа пристапуваме кон индексизање за оптимизација на прашалникот
- Најскапи операции се full scan на табелата ride и driver_vehicle:
- Иницијалното време на insert и update во ride и driver_vehicle е:
- Времето потребно за извршување на прашалникот после вметнување на индекс на customerpreferences по атрибутот company_id изнесува 984ms што е прифатливо време:
- Времето потребно за извршување на insert и update во ride и driver_vehicle изнесува:
View 3: Unassigned requests
- Примарен случај на употреба овој поглед ќе се користи за добивање на недоделените барања за такси од страна на компаниите во зависност од преференците на корисниците.
- Примарен филтер би бил атрибутот company_id во customerpreference релацијата.
- Иницијалното извршување на погледот е 5s и 109ms:
Ова време е неприфатливо за апликацијата па затоа извршуваме оптимизирање со користење на индексирање.
- Најскапи операции се full scan на табелите request и customerpreference:
- Иницијалното време на insert и update на табелата requests е:
- Времето потребно за извршување на прашалникот после вметнување на индекс на customerpreferences по атрибутот company_id изнесува 702ms што е прифатливо време:
- Времето потребно за извршување на insert и update во request после индексирање:
- И покрај тоа што се справивме со full scan на табелата ride сеуште времето е незадоволително. Па затоа за подобрување на перформансите прашалникот може да се реструктуира така што ќе се користи limit и offset за имплементација на пагинација при користење на апликацијата:
Овој поглед во иднина ќе биде оптимизиран со помош на PostGIS така што ќе се земаат барања во радиус од неколку километри и бројот на редици ќе се намали, а со тоа и потребното време за извршување.
View 4: Customer payments for rides
- Примарен случај на употреба на погледот customer_payments_ride е добивање на извештај за сите уплати за возења кои еден корисник ги извршил.
- Примарен филтер за овој поглед е атрибутот user_id од релацијата Customer.
- Иницијално време на извршување на пребарување во погледот customer_payments_ride е 925ms.
- Времето на извршување е задоволително и нема потреба од дополнително оптимизирање. Се зема во предвид и фактот дека корисниците кои ќе ја користат апликацијата најверојатно ретко ќе бараат увид во сите нивни плаќања.
- Иницијално време на внес на нов запис во табелата Payment е 461ms.
- Сметаме дека времето е доволно брзо за insert операција во табелата Payment, од таа причина нема потреба од индексирање.
View 5: Reviews on drivers
- Примарен случај на употреба на погледот reviews_on_drivers е добивање на преглед на сите оценки и коментари кои биле оставени за еден возач.
- Примарен филтер на овој поглед е атрибутот user_id од релацоијата Driver.
- Иницијално време на извршување на едно пребарување врз погледот е 1s 656ms. Во продолжение е даден планот за извршување на прашалникот и информации за секоја од операциите.
- Времето на извршување е задоволително и нема потреба од дополнително оптимизирање.
- Иницијално време за внес на нови вредности во табелата Review e 725ms.
- Ова време е прифатливо за корисниците кои за едно возење смеат да остават само еден review.
View 6: Reports on drivers during rides
- Примарен случај на употреба на погледот reports_on_drivers_rides е добивање на преглед на пријави поднесени од патници за возачите.
- Примарен филтер над овој поглед е атрибутот user_id од ентитетот Driver.
- Иницијално време на извршување на пребарување во погледот е 3s 33ms.
- Времето го сметаме за задоволително. Се зема во предвид дека доколку се додаде индекс, индексот е структура која дополнително зафаќа простор и при тоа ги успорува операциите како што се insert и update. Операцијата insert во табелата Report треба да биде брза според функционалноста која ја нуди апликацијата.
- Иницијално времето на внес на нов запис-пријава во табелата Report e 100ms.
- Ова време е идеално за ситуацијата, бидејќи репортите се пријави кои корисниците можат да ги поднесат за време на возењето и истите треба да бидат брзо внесени во системот.
View 7: Live ride monitor
- Примарен филтер за погледот vw_live_ride_monitor ќе биде според id на компанија (company_id), со цел компаниите да можат да ги следат само нивните активни возења, а уште ќе се користи и според име на возач
- Примарен случај на употреба ќе е следење на сите активни возења во реално време (live monitoring) од страна на такси компаниите. За овој поглед ни се исклучително важни перформансите, бидејќи без него се губи време при извршување и се губи ефектот на „реално време“.
- Иницијалното време за извршување на погледот е 12 s 477 ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
- Најбавната операција е full scan на табела ride.
и таа може да се подобри со индекси. Времето изминато во извршување на операциите insert и update изнесувa:
- Времето изминато во извршување на query-то со индекси изнесува 1s 430ms, и тоа е прифатливо време.
- Времето изминато во извршување на операциите insert и update по индексирање изнесува:
View 8: User message driver
- Примарен филтер за погледот user_message_driver ќе биде според id на клиент (user_id), id на возач (driver_id) или id на патување (ride_id), со цел да се филтрираат пораките за конкретна сесија или конкретен корисник.
- Примарен случај на употреба ќе е вчитување и приказ на историјата на пораки испратени од клиентот до возачот за време на активно возење (chat функционалност во самата апликација). За овој поглед ни се исклучително важни перформансите, бидејќи секое доцнење при вчитувањето на пораките директно го нарушува корисничкото искуство за комуникација во реално време (real-time chat).
- Иницијалното време за извршување на погледот е 1s 260ms. Ова е прифатливо време за апликацијата и затоа нема потреба да се оптимизира прашалникот.
- Нема потреба од правење на план за извршување поради тоа што времето е задоволително.
- Времето изминато во извршување на операциите insert и update изнесува
View 9: Active ride vehicle details
- Примарен филтер за погледот vw_active_ride_vehicle_details ќе биде според customer_user_id (id-то на патникот) или според ride_id (id-то на самото возење).
- Примарен случај на употреба е екранот за следење на активното возење на корисникот (live-tracking), каде што патникот ги гледа моделот, брендот, регистарската табличка и проценетото време на пристигнување (ETA) на возилото кое доаѓа да го земе. За овој поглед перформансите се од критична важност, бидејќи се повикува често од страна на апликацијата додека возењето е со статус in_progress и не смее да има доцнење.
- Иницијалното време за извршување на погледот е 5 s 754 ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
- Најбавната операција е full scan на табелата ride
и таа може да се подобри со индекси. Времето изминато во извршување на операциите insert и update изнесувa.
- Времето изминато во извршување на query-то со индекси изнесува 746ms, и тоа е прифатливо време.
- Времето изминато во извршување на операциите insert и update по индексирање изнесува:
Attachments (62)
- 1.png (19.8 KB ) - added by 3 weeks ago.
- 2.png (32.2 KB ) - added by 3 weeks ago.
- 3.png (12.6 KB ) - added by 3 weeks ago.
- 4.png (28.5 KB ) - added by 3 weeks ago.
- 5.png (139.7 KB ) - added by 3 weeks ago.
- 6.png (24.6 KB ) - added by 3 weeks ago.
- 7.png (13.5 KB ) - added by 3 weeks ago.
- 8.png (18.7 KB ) - added by 3 weeks ago.
- 9.png (13.3 KB ) - added by 3 weeks ago.
- 10.png (13.5 KB ) - added by 3 weeks ago.
- 11.png (28.6 KB ) - added by 3 weeks ago.
- 12.png (111.9 KB ) - added by 3 weeks ago.
- 13.png (25.2 KB ) - added by 3 weeks ago.
- 14.png (13.0 KB ) - added by 3 weeks ago.
- 15.png (18.5 KB ) - added by 3 weeks ago.
- 16.png (13.7 KB ) - added by 3 weeks ago.
- 17.png (26.3 KB ) - added by 3 weeks ago.
- 18.png (69.9 KB ) - added by 3 weeks ago.
- 19.png (40.4 KB ) - added by 3 weeks ago.
- 20.png (14.1 KB ) - added by 3 weeks ago.
- 21.png (7.5 KB ) - added by 3 weeks ago.
- 22.png (26.3 KB ) - added by 3 weeks ago.
- 23.png (70.1 KB ) - added by 3 weeks ago.
- 24.png (40.5 KB ) - added by 3 weeks ago.
- 25.png (14.2 KB ) - added by 3 weeks ago.
- 26.png (29.0 KB ) - added by 3 weeks ago.
-
view1k.jpg
(22.2 KB
) - added by 6 days ago.
View customer_payment_ride
-
optimization1k.jpg
(11.0 KB
) - added by 6 days ago.
Time for query on view customer_payments_ride
-
optimization2k.jpg
(7.8 KB
) - added by 6 days ago.
Time for insert in Payment
-
view2k.png
(18.4 KB
) - added by 6 days ago.
View reviews_on_drivers
-
optimization3k.png
(27.3 KB
) - added by 6 days ago.
Time for query on view reviews_on_drivers
-
optimization4k.jpg.png
(25.5 KB
) - added by 6 days ago.
Time for insert in Review
-
analyze1k.png
(116.1 KB
) - added by 6 days ago.
Query plan
-
analyze2k.png
(53.5 KB
) - added by 6 days ago.
Query execution
-
view3k.png
(56.8 KB
) - added by 6 days ago.
View reports_on_drivers_rides
-
optimization5k.png
(31.9 KB
) - added by 6 days ago.
Time for query on view reports_on_drivers_rides
-
optimization6k.png
(23.7 KB
) - added by 6 days ago.
Time for insert into Report
- analyze3k.png (125.4 KB ) - added by 6 days ago.
- analyze4k.png (61.6 KB ) - added by 6 days ago.
- advdb 1.png (11.3 KB ) - added by 4 days ago.
- advdb 2.png (77.9 KB ) - added by 4 days ago.
- advdb 3.png (29.2 KB ) - added by 4 days ago.
- advdb 4.png (7.9 KB ) - added by 4 days ago.
- advdb 10.png (11.8 KB ) - added by 4 days ago.
- advdb 5.png (11.1 KB ) - added by 4 days ago.
- advdb 6.png (83.3 KB ) - added by 4 days ago.
- advdb 7.png (29.2 KB ) - added by 4 days ago.
- advdb 11.png (41.9 KB ) - added by 4 days ago.
- advdb 12.png (12.7 KB ) - added by 4 days ago.
- advdb 13.png (10.7 KB ) - added by 4 days ago.
- advdb 14.png (5.7 KB ) - added by 4 days ago.
- advdb 15.png (11.8 KB ) - added by 4 days ago.
- advdb 16.png (37.4 KB ) - added by 4 days ago.
- advdb 17.png (12.9 KB ) - added by 4 days ago.
- advdb 18.png (10.8 KB ) - added by 4 days ago.
- advdb 19.png (11.9 KB ) - added by 4 days ago.
- advdb 20.png (76.7 KB ) - added by 4 days ago.
- advdb 21.png (33.3 KB ) - added by 4 days ago.
- advdb 22.png (6.8 KB ) - added by 4 days ago.
- advdb 23.png (14.3 KB ) - added by 4 days ago.
- advdb 24.png (79.8 KB ) - added by 4 days ago.
- advdb 25.png (33.6 KB ) - added by 4 days ago.
























































