Mam aplikację, która wywołała dość gorącą dyskusję między kilkoma programistami.
Zasadniczo jest podzielony na warstwę internetową i warstwę zaplecza. Warstwa internetowa zbiera informacje za pomocą prostego formularza internetowego, przechowuje te dane jako dokument JSON (dosłownie plik .json) w folderze obserwacyjnym używanym przez zaplecze. Zaplecze sonduje ten folder co kilka sekund, podnosi plik i wykonuje jego funkcje.
Same pliki są bardzo proste (tzn. Wszystkie dane łańcuchowe, bez zagnieżdżania), a ich wielkość wynosi około 1-2 tys., Przy czym system spędza większość czasu bezczynnie (ale rozrywa do 100 wiadomości w danym momencie). Krok przetwarzania zaplecza zajmuje około 10 minut na wiadomość.
Argument pojawia się, gdy jeden programista sugeruje, że użycie systemu plików jako warstwy przesyłania wiadomości jest złym rozwiązaniem, gdy zamiast tego należy użyć czegoś takiego jak relacyjna baza danych (MySQL), baza danych noSQL (Redis), a nawet zwykłe wywołanie interfejsu API REST.
Należy zauważyć, że Redis jest używany gdzie indziej w organizacji do obsługi wiadomości w kolejce.
Argumenty, które słyszałem, zostały rozbite w następujący sposób
Na korzyść plików płaskich:
Pliki płaskie są bardziej niezawodne niż jakiekolwiek inne rozwiązanie, ponieważ plik jest przenoszony tylko z folderu „obserwuj”, do folderu „przetwarzającego” po jego pobraniu, a na koniec do folderu „gotowego” po zakończeniu. Istnieje zerowe ryzyko zniknięcia wiadomości z wyjątkiem błędów na bardzo niskim poziomie, które i tak popsułyby inne rzeczy.
Pliki płaskie wymagają mniej technicznego wyrafinowania do zrozumienia - po prostu
cat
to. Brak zapytań do napisania, brak ryzyka przypadkowego wyskoczenia wiadomości z kolejki i pozostawienia jej na zawsze.Kod zarządzania plikami jest prostszy niż interfejsy API baz danych z punktu widzenia programowania, ponieważ jest częścią standardowej biblioteki każdego języka. Zmniejsza to ogólną złożoność podstawy kodu i ilość kodu strony trzeciej, który należy wprowadzić.
Zasada YAGNI mówi, że pliki płaskie działają teraz dobrze, nie ma potrzeby zmiany na bardziej skomplikowane rozwiązanie, więc zostaw to.
Na korzyść bazy danych:
Łatwiej jest skalować bazę danych niż katalog pełen plików
Pliki płaskie mogą spowodować, że ktoś skopiuje „gotowy” plik z powrotem do katalogu „watch”. Ze względu na charakter tej aplikacji (zarządzanie maszynami wirtualnymi) może to spowodować katastrofalną utratę danych.
Wymagająca bardziej technicznego wyrafinowania dla T / S aplikacja oznacza, że niewykształcony personel jest mniej skłonny do zepsucia się przez zwykłe szturchanie rzeczy.
Kod połączenia DB, szczególnie w przypadku czegoś takiego jak Redis, jest co najmniej tak solidny, jak standardowe funkcje zarządzania plikami bibliotek.
Kod połączenia DB jest widocznie (jeśli nie funkcjonalnie) prostszy z punktu widzenia programisty, ponieważ jest wyższy niż manipulacja plikami.
Z tego, co widzę, obaj programiści mają wiele ważnych punktów.
Tak więc spośród tych dwóch osób, twórcy pro-plików lub pro-baz danych, który jest bardziej zgodny z najlepszą praktyką inżynierii oprogramowania i dlaczego?