Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie SerialBlob vs byte[]

Masz rację, że SerialBlob to tylko cienka abstrakcja wokół byte[] , ale:

  • Czy pracujesz w zespole?
  • Czy czasami popełniasz błędy?
  • Czy jesteś leniwy w pisaniu komentarzy?
  • Czy czasami zapominasz, co właściwie robi Twój kod sprzed roku?

Jeśli na którekolwiek z powyższych pytań odpowiedziałeś tak , prawdopodobnie powinieneś użyć SerialBlob .

Zasadniczo jest tak samo z każdą inną abstrakcją wokół prostej struktury danych (pomyśl ByteBuffer na przykład) lub inną klasę. Chcesz go użyć przez byte[] , ponieważ:

  1. Jest bardziej opisowy. byte[] może to być jakiś rodzaj pamięci podręcznej, może to być bufor cykliczny, może to być jakiś mechanizm sprawdzania integralności, który nie działa prawidłowo. Ale jeśli używasz SerialBlob , oczywiste jest, że jest to po prostu blob danych binarnych z bazy danych / do przechowywania w bazie danych.

    Zamiast ręcznej obsługi tablic, używasz metod w klasie, co znowu jest łatwiejsze do odczytania, jeśli nie znasz kodu. Nawet banalna manipulacja tablicą musi być zrozumiana przez czytelnika twojego kodu. Metoda o dobrej nazwie jest samoopisowa.

    Jest to przydatne dla twoich kolegów z drużyny, a także dla ciebie, gdy będziesz czytać ten kod za rok.

  2. Jest bardziej odporny na błędy. Za każdym razem, gdy piszesz nowy kod, istnieje duża szansa, że ​​zrobiłeś w nim błąd. Może na początku nie widać, ale prawdopodobnie tam jest. SerialBlob kod został przetestowany przez tysiące ludzi na całym świecie i można śmiało powiedzieć, że nie dostaniesz żadnych związanych z nim błędów.

    Nawet jeśli jesteś pewien, że poprawnie obsługujesz swoją tablicę bajtów, ponieważ jest to takie proste, co jeśli ktoś inny znajdzie Twój kod za pół roku i zacznie „optymalizować” rzeczy? A co, jeśli ponownie użyje starego bloba lub zepsuje twoją magiczną tablicę dopełniającą? Każdy pojedynczy błąd w manipulowaniu indeksem spowoduje uszkodzenie danych i może nie zostać od razu wykryty (Jesteś pisanie testów jednostkowych, prawda?).

  3. Ogranicza cię tylko do kilku możliwych interakcji. Może to wyglądać jak przewinienie, ale tak nie jest! Gwarantuje to, że po zakończeniu nie będziesz używać obiektu BLOB jako lokalnej zmiennej tymczasowej. Gwarantuje, że nie będziesz próbował zrobić String z tego lub cokolwiek głupiego. Daje pewność, że użyjesz go tylko jako bloba. Ponownie, przejrzystość i bezpieczeństwo.

  4. Jest już napisany i zawsze wygląda tak samo. Nie musisz pisać nowej implementacji dla każdego projektu ani czytać dziesięciu różnych implementacji w dziesięciu różnych projektach. Jeśli kiedykolwiek zobaczysz SerialBlob w czyimkolwiek projekcie użycie będzie dla Ciebie jasne. Wszyscy używają tego samego.

TL; DR: Kilka lat temu (a może wciąż w C), używając byte[] byłoby ok. W Javie (i ogólnie OOP), spróbuj użyć konkretnej klasy zaprojektowanej dla zadania zamiast prymitywnej (niskopoziomowej) struktury, ponieważ bardziej przejrzyście opisuje twoje intencje, generuje mniej błędów i zmniejsza długość twojego kodu na dłuższą metę .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niezgodność między wartościami DATETIME w bazach danych H2 i MySQL wstawionych z Javy/Kotlin

  2. Zapytanie MySQL, aby znaleźć najbardziej podobny wiersz liczbowy

  3. Zapytanie z dwóch tabel w raporcie

  4. Rekurencyjna pętla MySql sql

  5. Czy klauzula MySQL IN wykonuje podzapytanie wielokrotnie?