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

Mysql :wiele stołów czy jeden duży stół?

Jeśli zastosujesz się do Zera, Jednego lub Wielu Zasada, zgodnie z którą albo nie ma czegoś takiego, albo nie ma jednej z nich, albo nieograniczona liczba, zawsze budujesz odpowiednio znormalizowane tabele, aby śledzić takie rzeczy.

Na przykład możliwy schemat:

CREATE TABLE user_attributes (
  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
  user_id INT NOT NULL,
  attribute_name VARCHAR(255) NOT NULL,
  attribute_value VARCHAR(255),
  UNIQUE INDEX index_user_attributes_name(user_id, attribute_name)
);

To jest podstawowy wzorzec sklepu klucz-wartość, w którym możesz mieć wiele atrybuty na użytkownika.

Chociaż wymagania dotyczące przechowywania są wyższe niż w przypadku stałych kolumn z wiecznie frustrującymi nazwami, takimi jak attribute1 , koszt jest na tyle niski w dobie dysków twardych o wielkości terabajtów, że rzadko stanowi problem.

Zwykle tworzysz jedną tabelę dla tych danych, dopóki czas wstawienia nie stanie się problemem. Dopóki twoje wstawki są szybkie, nie przejmowałbym się tym. W tym momencie warto rozważyć sharding strategia podzielenia tych danych na wiele tabel o identycznym schemacie, ale tylko wtedy, gdy jest to wymagane.

Wyobrażam sobie, że byłoby to na etapie ~10-50 milionów wierszy, ale mogłoby być wyższe, gdyby ilość aktywności wstawiania w tej tabeli była stosunkowo niska.

Nie zapominaj, że najlepszym sposobem optymalizacji pod kątem odczytu jest użycie pamięci podręcznej:Najszybsze zapytanie do bazy danych to takie, którego nie wykonujesz. Do tego typu rzeczy zwykle używasz czegoś takiego jak memcached do przechowywania wyników poprzednich pobrań i unieważniłbyś to podczas zapisu.

Jak zawsze, porównaj każdy proponowany schemat w produkcji skala.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy - Pobieranie listy tabel

  2. SQL Wybierz tylko wiersze, w których istnieje dokładnie wiele relacji

  3. Tworzenie aplikacji internetowej od podstaw przy użyciu Python Flask i MySQL:część 2

  4. Wyszukiwanie zbliżeniowe

  5. Uruchamianie klastra Galera na Kubernetes