![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 30.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
W chwili obecnej próbuje zaprojektować bazę MySQL, aczkolwiek nie wiem czy moje rozwiązanie jest najbardziej optymalne. Poniżej przedstawię swój problem i moje rozwiązanie. Jeżeli ktoś posiada lepszy pomysł to proszę dać znać. Zadanie: Do bazy MYSQL co godzinę z komputerów klientów dostarczane są logi, które zawierają spis wszystkich ściągniętych plików i ich rozmiarów. W każdym znajduje się średnio 500 informacji o "plikach" i każdy przesyłany jest z X komputerów co godzinę. W chwili obecnej mam dwie tabele. Jedna to standardowa tabela zarejestrowanych użytkowników, a druga to tabela plików. Tabela plików przedstawia się następująco: + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY + user_id INT NOT NULL (powiązanie z użytkownikiem, który przesłał loga) + logfile_id INT NOT NULL (numer identyfikacyjny loga, z którego "pochodzi" dany plik) + nazwa_pliku varchar(128) + rozmiar_pliku INT NOT NULL Log wyświetlane są klientom na żądanie dlatego musi istnieć powiązanie plik <-> log. Przyjmując, że mam bardzo dużą liczbę użytkowników i logi wysyłane są średnio co godzinę to jak nietrudno się domyślić w bazie robi się małe kongo-bongo. Myślałem o stworzeniu jednej "tabeli plików" dla jednego użytkownika, ale z tego, co wyczytałem na innych serwisach to nie jest dobry pomysł. Czy istnieje jakieś lepsze rozwiązanie tego problemu? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Twoja obecna struktura wydaje się być jak najbardziej w porządku. Jedyne co bym zmienił to zwiększył limit 128 znaków na nazwę pliku - rzadko, ale jednak mogą pojawić się dłuższe pliki; zaś rozmiar pliku musi być typu BIGINT - chyba, że masz gwarancję, że wszystkie będą poniżej ~2 GiB.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Wydaje się, że partycjonowanie może być ciekawym rozwiązaniem np interwałem czasu
http://dev.mysql.com/tech-resources/articl...rtitioning.html |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 41 Pomógł: 9 Dołączył: 8.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
polecam stworzyć trzecią tabelę gdzie zapiszesz dane logów czyli
id użytkownika, id pliku, czas rozpoczęcia pobierania, ewentualny ip i co tam jeszcze tylko potrzebujesz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 05:00 |