Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Projekt dużej bazy
Renamon
post 7.10.2011, 13:19:08
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.04.2010

Ostrzeżenie: (0%)
-----


Potrzebuję zaprojektować dużą bazę (być może nawet kilka set milionów rekordów)
Baza danych będzie zawierać kolory (R,G,B - do 255 czyli wystarczy TINYINT unsigned) , następne będzie 3 ciągi znaków od 000 do 255255255 (w tym wypadku zostaje mi jedynie int ? wykorzystane 28 z 32 bitów - 4 bity zmarnowane na każdy rekord) jeden oznaczający obecne kolory i 2 potrzebne do wyszukania z których zostały stworzone (to już raczej nie istotne tak musi być tongue.gif).

Czyli sama tabela wygląda tak:

R TINYINT unsigned
G TINYINT unsigned
B TINYINT unsigned
Znak INT unsigned
Zak1 INT unsigned
Znak2 INT unsigned


Program będzie pobierał 2 wartości R,G,B 2 różnych rekordów mieszał je wg. wzoru oraz zapisywał R,G,B, Znak tego co wyszło oraz Znak1 i Znak2 aby można było znaleźć z jakich zrobił.

Z racji tego że będzie potrzeba dużo miejsca na bazę zastanawiam się czy nie rozdzielić znaki:
zamiast Znak1 - R1,G1,B1
zamiast Znak2 - R2,G2,B2

wtedy oszczędzamy po 6 bajtów na każdy rekord ale będzie trzeba zapisywać więcej liczb (chyba że to że te liczby będą mniejsze to też +)

Czy potrzebuję jeszcze pola które będzie numerował rekordy czy można w jakiś sposób wyciągnąć od 5 do 10 rekordu?

Oraz czytałem trochę o indexowaniu wyszukiwać będę tylko po nr. rekordu więc chyba tylko w tym miejscu muszę dodać index?

Ewentualnie inne pomysły jak można by było zbudować taką tabelę aby jak najbardziej zaoszczędzić miejsce jednocześnie nie tracić na szybkości działania (oczywiście i na jednym i na drugim mi zależy tongue.gif )
Go to the top of the page
+Quote Post
Swirek
post 7.10.2011, 14:11:00
Post #2





Grupa: Zarejestrowani
Postów: 221
Pomógł: 20
Dołączył: 4.05.2006
Skąd: Polska

Ostrzeżenie: (0%)
-----


nie wiem po co sadzić wszystkie dopasowania kolorów bo tak się domyślam do bazy danych wink.gif no ale nie wnikam

id unikalne zrób a indeksy daj na te pola po których będziesz najwięcej wyszukiwał.
możesz zawsze indeks dodać i sprawdzić czy zapytania się wykonują szybciej. Pamiętaj, że indeksy to też dodatkowe megabajty


--------------------
Macho odpadacie ;) .
Go to the top of the page
+Quote Post
Crozin
post 7.10.2011, 14:21:59
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Nie licz już tak każdego bajtu. To pewnie co najwyżej kilka gigabajtów przy kilkudziesięcio-gigabajtowej bazie. To akurat specjalnie istotne nie powinno być.
2. Pamiętaj też o tym, że komputery są najlepiej przystosowane do współpracy z 32-/64-bitowymi liczbami.
3. Kolejna rzecz do uwzględnienia to fakt, że relacyjne bazy danych lubią te relacje - być może warto by było pomyśleć o rozbicu tego na prostsze elementy (więcej tabel i relacji).
4. Napisz dokładnie jakie będzie zastosowane bazy, jakie operacje będziesz na niej wykonywał to zobaczymy, może uda się znaleźć bardziej sensowny schemat.
5. Utwórz sobie taką bazę, dorzuć 350 mln losowych rekordów i sprawdź jak to działa - proste testy niejednokrotnie mówią więcej niż pięć stron wątku.
Go to the top of the page
+Quote Post
Renamon
post 7.10.2011, 15:10:06
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.04.2010

Ostrzeżenie: (0%)
-----


Pole Znak w założeniu miało być tylko po to aby R,G,B było unikalne, tzn nie ma sensu trzymać 2 kombinacji tych samych rgb (z tego co zauważyłem jest możliwość aby baza sama sprawdzała czy dane pole się powtarza i ewentualnie zwróciła błąd)

4. Napisz dokładnie jakie będzie zastosowane bazy, jakie operacje będziesz na niej wykonywał to zobaczymy, może uda się znaleźć bardziej sensowny schemat.


Baza jest po to aby komputery (docelowo ma być ich kilka i praca będzie rozdzielana przez jakiś program zarządzający) pobrały wartości R,G,B 2 rekordów zrobiły to co mają zaprogramowane i zapisały wynik (czyli zależy mi na szybkim dodawaniu oraz pobieraniu danych z tabeli, edycje nie wchodzą w grę).

Z tego wynikało by że będę musiał tylko wyszukać odpowiedni nr. w bazie czyli unikalne id.


I teraz jeszcze jedna rzecz, jeśli zdarzy się że powstaną dziury w numeracji (tzn. 2,3,4,5,9,10,11) to czy jest jakaś możliwość aby baza posegregowała to i zrobił a numerację od nowa ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 05:14