![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Do bazy w jednej tabeli planuje zapis dość sporo rekordów , a konkretnie 300 tyś dziennie.
Mam wobec tego pytanie jak zaplanować zapis i odczyt danych ? Chcę podzielić zapisy na miesiące i co miesiąc tworzyć nową tabelę. Ale może są już jakieś dirvery gotowe do takich rzeczy ? Nie chcę wymyślać koła na nowo. Generalnie dane muszą być cały czas dostępne w systemie jak cofnę się w historii. Oczywiście chodzi o statystyki. Robił z was ktoś coś podobnego ? Chętnie wysłucham wasze opinie na to jak podejść do tematu . |
|
|
![]() |
![]() ![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
No więc zrobiłem tak przy zapisie generuję sobie takie zapytanie :
Kod mysql_query(" CREATE TABLE IF NOT EXISTS x_stat_".$tabela_nazwa." ( id BIGINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , site_id INT(11) NOT NULL , key_id INT(11) NOT NULL , wejsc INT(11) NOT NULL , link_type INT(11) NOT NULL , link_url VARCHAR(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , proxy_query VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , date DATE NOT NULL , time TIME NOT NULL , INDEX ( `site_id` , `key_id` , `date` ) ) ENGINE = MYISAM "); Potem wypełniam tabelę . Danymi . Na min robię 1000 - 2000 zapisów rekordów. Ale już przeciętny użytkownik może na raz odczytać tylko wybrane przez siebie 3 miesiące. Co daje max około 264 960 000 rekordów. Tak więc zapytanie pójdzie tak jakby było ich tylko tyle. Nawet po 5 latach będzie działać tak samo. Każdy miesiąc nazywa się inaczej i składam to tak: Kod $rok = strftime('%Y',time()); $mies = strftime('%b',time()); $tabela_nazwa =$rok."_".$mies; $tabela_nazwa = "x_stat_".$tabela_nazwa; Wygenerowałem sobie jakiś jeden mld rekordów w pętli przy użyciu CRON. W pojedynczej tabeli za każdym razem przeszukiwało całą tabelę i trwało to dość długo. Oczywiście gdy ustawiłem indeks po dacie to było niemal identycznie jak z moim swichtem. Teraz sobie przekierowuję zapytania do innych tabel w PHP. Problem był w tym, że system miał trzymać w pamięci ostanie 5 lat i potem przesuwać dane do archiwizacji. Dane w z archiwum będą trafiały na inny serwer i nie będą wykorzystywane w bieżącym działaniu w aplikacji. Dlatego zrobiłem to po swojemu mimo, iż teoretycznie tak nie powinno się robić. Ps. może ktoś sprawdzić czy dobrze tworzę tabelę ? Chodzi mi o to czy dobrze zoptymalizowana ? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 12:49 |