KamoCRM

Member_rights_applied pisze tylko różnicę i odczytuje role w luzem

Performancekamo-shared-library
Szycy
23 września 2026 14:39 UTC
Autor
Kamo
Pochęt się
c4924af

Dwie powiązane poprawki do MemberRightsAppliedService, oba w tym samym pliku: 1. - (poprzez recalcChunk) i ;) Bezwarunkowo usuwa i re-interted every of aplikowanych rzędów praw członka za każdym razem Uciekli. SecurityService MemberRightsBackfillService zwraca na tor Web-Sterowanie Każdy but kapsułowy (autonatne uledzenie, z założenia – zobacz własny javadoc), a recompute jest idempotent: But w stanie stacjonarnym ponownie uruchamia identyczny zestaw. Mierzone w produkcji pg_stat_statements: INSERTs przeciwko stołowi obowiązkowym w wysokości 30 kW-row – około 300 pełnych zapisów, jeden na but, prawie Wszyscy odpisują dokładnie to, co już tam było. Obie metody teraz rozproszyły świeżo tworzony zestaw przeciwko temu, co już posiada member_rights_applied (jedna masa czytana przez cały kawałek) i tylko przejrzysta + przepisać członków, których prawa faktycznie Różni się. Buty bez operacji kosztują teraz jeden odczyt i zeropisów. 2. obliczaj prawa (jedno zarówno ścieżki zapisu powyżej, jak i tylko do odczytu ComputeMemberRights SessionRefreshController sondaże na każdą sesję odświeżają) Member.getRoles(), role()/getRights() oraz member.getRights() jako oddzielne kolekcje leniwe – plus kolejne leniwe obciążenie na odrębną rolę, Za prawa tej roli. Nieograniczony na członka. Sześć nowych pól repozytorium opcjonalnym (MemberRoleRepository, DepartmentRoleRepository, DepartmentRightRepository, JobTitleRoleRepository, JobTitleRightRepository, MemberRightRepository — pierwsze i ostatnie już istniały) zastąpić te leniwe ładunki stałą, niewielką liczbą masową Pytania, każdy z własnymi prawami do roli JOIN-FETCHed. Celowo NIE ?EntityGraph zakorzeniony Członek/TeamMember: oba są „Inhertance(JOINED) i wykres jednostki, który pobiera dalej Stowarzyszenia na rzecz jednostki JOINED to dokładny kształt, który przybrał /odprowadza w produkcji Hibernate 6.2.13 (brakuje wpisu FROM-clause dla stołu korzeniowego – patrz LeadAssigneeRef). Każdy nowy Zamiast tego repozytorium jest zakorzenione w jednostce CHILD (z których żadna nie nosi „Inhertance”) i filtruje się Id rodzica. Pole EntityManager z persistenceContext został wypróbowany i odwrócony: jest przetwarzany przez Wiosenny post-processor JPA za każdym razem, gdy wiosenny jest na ścieżce klasowej, więc ręcznie nowły Usługa w kontekście bez fasoli EntityManagerFactory (SignInReadTest’s hand-rolled Spring Kontekst, który ćwiczy :RetryOnDbConflict przez prawdziwy pełnomocnik AOP) nie powiódł się BEAN CREATION Na wprost. Pola opcjonalnie-repozytorium rozkładają się w ten sam sposób, w jaki zastosowanoModelResolver już: Autowired (wymagane - false) pozostawia je zerowe bez fasoli tego typu, a sześciu pomocników upada Wracając do oryginalnej ścieżki leniwego obciążenia, niezmienionej, w każdym istniejącym teście. SessionRefreshController utrzymuje przetwarzanie na żywo (nie z trwałej migawki) - tego punktu końcowego Cała sens dotyczy „tego, co jest prawdą w tej chwili”, co nie zawsze jest tym, co było trwałe.

Wszystkie zmiany

Jak to, co widzisz żeglugę?

Wszystko to pojawia się w twoim miejscu pracy na własną rękę. Zacznij od bezpłatnego planu i przeczytaj tę stronę ponownie w miesiącu.

Start Free ForeverZobacz ceny