Projektowanie aplikacji / architektura

0

Witam,

Jestem ciekawy czy znacie jakieś dobre, najlepiej darmowe i w pl e-booki / tutoriale / blogi, które mogą nauczyć jakiś sprytnych rozwiązań jak tworzyć aplikacje takie jak np. Sharding.

Ogólnie tematyka projektowania aplikacji, optymalizacja pod kontem wydajności, jakieś rozwiązania do baz / aplikacji, które działają pod dużym obciążeniem (jak wyżej wspomniany sharding).

Osobiście programuje w C#, ale takie rzeczy zazwyczaj można stosować w każdym języku, wiec to nie gra roli.

0

Tematy o jakich piszesz to temat na kilka encyklopedii, a nie jednej książki.
Optymalizacja aplikacji pod kontem wydajności zależy od języka, środowiska etc. Tu raczej dobrą bazą będzie znajomość algorytmów i struktur danych w implementacji C/C++, aby mieć świadomość jak realizuje się pewne zagadnienia także z dbałością o pamięć. Podstawy assemblera też się przydadzą. Poza tym jeśli mowa o c# i .net to wiedza o tym jak pewne elementy realizowane są w IL.
A generalnie hasła poza zwiększaniem mocy obliczeniowej, to programowanie równoległe i rozproszone, które pomaga wykorzystać duże zasoby sprzętowe. Pomniejsze tematy to wątki, wywołania asynchroniczne.

Optymalizacja baz danych znowu zależy od systemu. Każdy SZBD ma różne niuanse, które można wykorzystać, ponadto masa opcji konfiguracyjnych wpływa na wydajność SZBD. Ale to raczej zagadnienia dla administratorów baz danych. Poza tym wydajne macierze dyskowe. Polecam poczytanie o pewnych wewnętrznych rozwiązaniach danego silnika bazodanowego, aby lepiej zrozumieć pewne mechanizmy w nim zastosowane. Dzięki temu można lepiej projektować struktury bazy danych pamiętając o pewnych niuansach. Wiele rozwiązań w wielu czołowych bazach danych jest podobna, bo nikt ameryki nie odkrywa. Niemniej drobne różnice lub specyficzne funkcje dla danego SZBD mogą posłużyć do optymalizacji bazy.
Jeśli chodzi o MS SQL Server, to mam kilka książek z MS Press, które są jakościowo (jeśli chodzi o wiedzę) bardzo dobre (małe pomyłki i literówki w tłumaczeniu nie mają znaczenia).

Nie zapominaj też że obecnie wiele aplikacji jakie powstają muszą komunikować się z innymi systemami, modułami etc. Czasem ogólna wydajność jest mniej ważna (bo można zrekompensować ją większą mocą obliczeniową), niż modułowość, unifikacja, reużywalność etc.
Wiele osób stara się projektować i pisać aplikacje wielowarstwowe, bo coś tam... tylko nie do końca wiedzą co. A później wychodzi potworek z rozdętą liczbą pseudo warstw, które tak się przenikają, że o prawdziwej wielowarstwowości nie ma mowy.
Większa elastyczność i uniwersalność często jest kosztem wydajności. Z kolei rozwiązanie mocno ukierunkowane na jakiś problem jest trudniejsze w modyfikacji, przez co kosztowniejsze w utrzymaniu. Trzeba umieć zachować balans między uniwersalnością i elastycznością a wydajnością.

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