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

Jaki typ kolumny powinien być używany do przechowywania serializowanych danych w bazie danych mysql?

Odpowiedź:wydaje się, że tekst jest przestarzały w wielu DBMS, więc lepiej użyj albo blob, albo varchar z wysokim limitem (a z blobem nie będziesz mieć żadnych problemów z kodowaniem, co jest głównym problemem w przypadku varchar i tekstu) .

Również jak wskazano w ten wątek na forach MySQL , dyski twarde są tańsze niż oprogramowanie, więc lepiej najpierw zaprojektuj oprogramowanie i spraw, aby działało, a dopiero wtedy, gdy miejsce stanie się problemem, możesz chcieć zoptymalizować ten aspekt. Więc nie próbuj zbyt wcześnie nadmiernie zoptymalizować rozmiaru swojej kolumny, lepiej najpierw ustaw większy rozmiar (plus to pozwoli uniknąć problemów z bezpieczeństwem).

O różnych komentarzach:Za dużo fanatyzmu SQL tutaj. Pomimo tego, że bardzo lubię SQL i modele relacyjne, mają one również swoje pułapki.

Przechowywanie serializowanych danych w bazie danych bez zmian (np. przechowywanie danych w formacie JSON lub XML) ma kilka zalet:

  • Możesz mieć bardziej elastyczny format dla swoich danych:dodawanie i usuwanie pól w locie, zmiana specyfikacji pól w locie itp...
  • Mniejsza niezgodność impedancji z modelem obiektowym:przechowujesz i pobierasz dane tak, jak w programie, w porównaniu do pobierania danych, a następnie konieczności ich przetwarzania i konwertowania między strukturami obiektów programu a strukturami relacyjnej bazy danych .

I jest o wiele więcej innych zalet, więc proszę nie fanboyism:relacyjne bazy danych są świetnym narzędziem, ale nie traćmy innych narzędzi, które możemy zdobyć. Więcej narzędzi, tym lepiej.

Jeśli chodzi o konkretny przykład użycia, mam tendencję do dodawania pola JSON do mojej bazy danych, aby przechowywać dodatkowe parametry rekordu, w którym kolumny (właściwości) danych JSON nigdy nie będą wybierane indywidualnie, ale używane tylko wtedy, gdy właściwy rekord jest już wybrany. W takim przypadku nadal mogę odróżnić moje rekordy od kolumn relacyjnych, a po wybraniu właściwego rekordu mogę po prostu użyć dodatkowych parametrów w dowolnym celu.

Tak więc moja rada, aby zachować to, co najlepsze z obu świata (szybkość, możliwość serializacji i elastyczność strukturalna), po prostu użyj kilku standardowych kolumn relacyjnych, które będą służyć jako unikalne klucze do rozróżniania między wierszami, a następnie użyj kolumny typu blob/varchar, w której będą być wstawiony. Zwykle dla unikalnego klucza wymagane są tylko dwie/trzy kolumny, więc nie będzie to duże obciążenie.

Może Cię również zainteresować PostgreSQL, który ma teraz typ danych JSON, oraz projekt PostSQL bezpośrednio przetwarzać pola JSON tak samo jak kolumny relacyjne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zapisać wygenerowane pliki PDF do bazy danych MySQL za pomocą Javy?

  2. Dynamicznie twórz obiekt PHP na podstawie napisu

  3. Błąd w MySQL podczas ustawiania domyślnej wartości DATE lub DATETIME

  4. Wygeneruj plik Excel w PHP po echo

  5. mysql dodatkowe kolumny o tej samej nazwie z dwóch tabel