Zagłębiłem się w to również i chociaż jestem zdecydowanie punktem odniesienia w tej sprawie, jest kilka kluczowych faktów, które zebrałem i którymi chciałbym się podzielić:
Przegroda jest podział logiczny danych lub jego elementów składowych na osobne niezależne części. Partycjonowanie bazy danych jest zwykle wykonywane ze względu na łatwość zarządzania, wydajność lub dostępność, na przykład w celu równoważenia obciążenia.
https://en.wikipedia.org/wiki/Partition_(database)
Sharding to rodzaj partycjonowania, taki jak partycjonowanie poziome (HP)
Istnieje również pionowe partycjonowanie (VP), w którym dzielisz tabelę na mniejsze, odrębne części. Normalizacja obejmuje również podział kolumn między tabelami, ale partycjonowanie pionowe wykracza poza to i dzieli kolumny nawet wtedy, gdy są już znormalizowane.
https://en.wikipedia.org/wiki/Shard_(database_architecture)
Bardzo podoba mi się odpowiedź Tony'ego Baco na Quora, gdzie zmusza cię do myślenia w kategoriach schematu (a nie kolumn i wierszy). On uważa, iż...
„ Partycjonowanie poziome ” lub fragmentacja to replikacja [kopiowanie] schematu, a następnie dzielenie danych na podstawie klucza fragmentu.
„ Partycjonowanie pionowe ” polega na podzieleniu schematu (a dane są przesyłane do przejazdu).
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them
Poradnik Oracle dotyczący partycjonowania baz danych zawiera kilka fajnych liczb. Skopiowałem kilka fragmentów artykułu.
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm
Kiedy dzielić tabelę
Oto kilka sugestii, kiedy podzielić tabelę:
- Tabele większe niż 2 GB należy zawsze traktować jako kandydujące do partycjonowania.
- Tabele zawierające dane historyczne, w których nowe dane są dodawane do najnowszej partycji. Typowym przykładem jest tabela historyczna, w której można aktualizować tylko dane z bieżącego miesiąca, a pozostałe 11 miesięcy tylko do odczytu.
- Gdy zawartość tabeli musi być dystrybuowana na różne typy urządzeń magazynujących.
Przycinanie partycji
Przycinanie partycji jest najprostszym i jednocześnie najważniejszym sposobem na poprawę wydajności przy użyciu partycjonowania. Czyszczenie partycji może często poprawić wydajność zapytań o kilka rzędów wielkości. Załóżmy na przykład, że aplikacja zawiera tabelę zamówień zawierającą historyczne rekordy zamówień i że tabela ta została podzielona według tygodni. Zapytanie żądające zamówień na jeden tydzień miałoby dostęp tylko do jednej partycji tabeli Zamówienia. Gdyby tabela Zamówienia zawierała dane historyczne z 2 lat, to zapytanie uzyskałoby dostęp do jednej partycji zamiast 104 partycji. To zapytanie mogłoby potencjalnie zostać wykonane 100 razy szybciej po prostu z powodu czyszczenia partycji.
Strategie partycjonowania
Możesz czytać ich tekst i wizualizować ich obrazy, które wyjaśniają wszystko całkiem dobrze.
I wreszcie, ważne jest, aby zrozumieć, że bazy danych są niezwykle zasobochłonne:
- procesor
- Dysk
- I / O
- Pamięć
Wiele DBA będzie partycjonować na tej samej maszynie, gdzie partycje będą współużytkować wszystkie zasoby, ale zapewnią poprawę dysku i operacji we / wy poprzez podzielenie danych i / lub indeksu.
Podczas gdy inne strategie będą wykorzystywać architekturę „nic wspólnego”, w której fragmenty będą znajdować się w oddzielnych i odrębnych jednostkach obliczeniowych (węzłach), mając 100% procesora, dysku, we / wy i pamięci. Zapewnienie własnego zestawu zalet i złożoności.
https://en.wikipedia.org/wiki/Shared_nothing_architecture