Czym zastąpić GetAll w repozytorium?

0

Hej, w którymś wątku dzisiaj przewinął mi się dzisiaj temat korzystania z baz danych i tworzenia repozytoriów. Bodajże @somekind wspominał o tym, że bez sensu jest ładowanie wszystkich rekordów do pamięci, szczególnie jeśli ma się do czynienia z setkami tysięcy, albo milionami rekordów, i trudno się z tym nie zgodzić.

Jako że do tej pory nigdy nie miałem do czynienia z większymi bazami, to zdecydowałem się dopiero teraz dokształcić jak najoszczędniej pobierać dane z bazy lub innego źródła. Czy polecicie jakieś wzorce albo techniki?

Na razie wygrzebałem taki przykład z EF Core.

A może Lazy Loading?

Albo coś innego?

2

Tak, jeśli chodzi o wyświetlanie wielu rekordów użytkownikowi, to stronicowanie (pagination) jest chyba oczywistym rozwiązaniem. Przykład z linka też fajny, bo jest prosty i nie zawiera elementów udających cokolwiek.

Lazy loading służy do czegoś zupełnie innego; do dynamicznego wczytywania powiązanych obiektów podczas nawigowania po właściwościach. Używanie tego podczas wyświetlania danych użytkownikowi to generalnie sposób na zabójstwo wydajnościowe aplikacji.

0

Znalazłem też taki przykład na SO, który chyba wyraźniej do mnie przemawia, ale ok, chyba już rozumiem koncepcję korzystania z paginacji, która się opiera na wyszukanych query/LINQ do bazy. Dzięki.

1

@bakunet

Zastanawiam się jakie argumenty stoją za tym, że przefiltrowanie danych najpierw to herezja?

Jemu chodzi o zastosowanie SQLowego VIEW, a nie o przefiltrowanie danych.

No generalnie to raczej jest taki kompromis - albo masz 0 logiki w bazie i łatwo się wszystko testuje, albo robisz sobie jakiegoś vendor/dbengine-locka, ale za to żyłujesz performance?

1

Tuning bez zmierzenia wydajności to nie herezja tylko utrudnianie sobie życia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1