PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Django Postgres ArrayField a relacja jeden-do-wielu

Jeśli używasz pola tablicowego

  • Rozmiar każdego wiersza w Twojej bazie danych będzie nieco duży, dlatego Postgres będzie używał znacznie więcej tabel tostów (http://www.postgresql.org/docs/9.5/static/storage-toast.html )
  • Za każdym razem, gdy otrzymasz wiersz, chyba że specjalnie użyjesz defer (https://docs.djangoproject.com/en/1.9 /ref/models/querysets/#defer ) pole lub w inny sposób wykluczyć je z zapytania za pomocą only lub values czy coś, płacisz koszt ładowania wszystkich tych wartości za każdym razem, gdy iterujesz w tym wierszu. Jeśli tego potrzebujesz, niech tak będzie.
  • Filtrowanie na podstawie wartości w tej tablicy, chociaż możliwe, nie będzie tak przyjemne, a Django ORM nie czyni tego tak oczywistym, jak w przypadku tabel M2M.

Jeśli używasz M2M

  • Możesz łatwiej filtrować te powiązane wartości
  • Te pola są domyślnie odroczone, możesz użyć prefetch_related jeśli ich potrzebujesz, a następnie wyobraź sobie, jeśli chcesz, aby załadowany był tylko podzbiór tych wartości
  • Całkowita pamięć w DB będzie nieco wyższa w przypadku M2M z powodu kluczy i dodatkowych pól identyfikatorów
  • Koszt złączeń w tym przypadku jest całkowicie pomijalny ze względu na klucze.

Osobiście powiedziałbym, że idź ze stołami M2M, ale nie znam twojej konkretnej aplikacji. Jeśli masz zamiar pracować z ogromną ilością danych, prawdopodobnie warto pobrać reprezentatywny zestaw danych i przetestować z nim obie metody.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usunąć zduplikowane wiersze na podstawie pola w zapytaniu wybierającym za pomocą PostgreSQL?

  2. jak skopiować dane z pliku do PostgreSQL za pomocą JDBC?

  3. Jak wstawić listę Pythona do tabeli Postgres

  4. Operatory Postgres dla typu danych JSON przy użyciu Rails 4

  5. Uruchom natywny sql z hibernacją