Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ARCHIVE czy InnoDB co wydajniejsze?
Forum PHP.pl > Forum > Bazy danych > MySQL
Mackos
Cześć,
Mam problem całkiem merytoryczny, i trochę się nad nim głowie.
Otóż mam serwer z bazą danych (jest tylko pod baze), dziennie mam do bazy wpisywane ok. 150 000 rekordów,
domyślnie postawiłem to na silniku ARCHIVE żeby możliwie najbardziej zaoszczędzić, jednak ta oszczędność jest pozorna, bo jak wiemy na archive można robić tylko i wyłącznie SELECT i INSERT więc chcąc niechcąc te dane cały czas rosną na serwerze - a prawdę mówiąc po miesiącu czy trzech są przydatne jedynie w celach archiwizacji (na wszelki wypadek) - gdyby ktoś potrzebował konkretnych danych sprzed x czasu dla statystyk.
I zastanawiam się czy nie lepiej przerzucić to na InnoDB a po miesiącu archiwizować dane i oczyszczać baze.
Przeglądałem benchmarki dla silników i InnoDB wychodzi marnie - a ważne jest żeby zapytanie było wykonywane bardzo szybko.
Jak myślicie jakie rozwiązanie będzie lepsze i zdrowsze?
bpskiba
Temat wymaga szerszej analizy...
Silnik ARCHIVE nie jest najlepszy dla selectów, nie mówiąc już o inserach. To jest ARCHIWUM i jego celem jest oszczędność miejsca na dysku kosztem wydajności zapytań
Do codziennej pracy się nie nadaje...
Twój tok rozumowania jest właściwy, ale wymaga szerokiego podejścia do struktury bazy, zapytań, serwera, indexów itd.
irmidjusz
Pozwolę sobie wkleić fragment (z książki Wysoko wydajne MySQL. Wydanie II) dotyczący silnika ARCHIVE:

Cytat
Silnik Archive obsługuje jedynie zapytania INSERT i SELECT, a nie obsługuje indeksów.
Powoduje wykonywanie mniejszej ilości operacji I/O niż MyISAM, ponieważ buforuje zapisywane
dane, a każdy wstawiony rekord jest kompresowany za pomocą zlib. Ponadto każde
zapytanie SELECT wymaga przeprowadzenia pełnego skanowania tabeli. Tabele Archive są
idealnym rozwiązaniem, gdy potrzebujemy zarejestrować i zgromadzić dane, których analiza
wymaga skanowania całej tabeli, bądź wymagane jest wykonywanie szybkich zapytań
INSERT w celu utworzenia replikacji nadrzędnej. Dla tej samej tabeli replikacja podległa może
używać innego silnika magazynowania danych, co oznacza, że tabela w replikacji podległej
może mieć indeksy znacznie zwiększające wydajność analizy. (Więcej informacji na temat
replikacji przedstawiono w rozdziale 8.).
Silnik Archive obsługuje blokowanie na poziomie rekordu oraz specjalny system buforowania
zapewniający wysoki poziom współbieżności wykonywanych zapytań INSERT. Pozwala
na logiczny odczyt danych poprzez zatrzymanie zapytań SELECT po otrzymaniu liczby rekordów
istniejących w tabeli w chwili rozpoczęcia danego zapytania. Ogromna liczba danych
wstawianych za pomocą zapytań INSERT pozostaje niewidoczna aż do chwili zakończenia
wykonywania tych zapytań. Funkcje te emulują pewne aspekty zachowań transakcji i mechanizmu
MVCC, ale silnik magazynu danych Archive nie obsługuje transakcji. To po prostu
silnik magazynu danych zoptymalizowany pod kątem bardzo szybkiego wstawiania danych
oraz przechowywania ich w postaci skompresowanej.
Mackos
Dobra, ta baza danych skupia się niemal wyłącznie na insertach - zapisywane jest do niej każde wyświetlenie reklamy z sieci, oraz do innej każde kliknięcie w reklamę. Same SELECTY są używane średnio co 20 minut żeby podliczyć sumę rekordów z dziś i ewentualnie z wczoraj.
W związku z czym każda reklama żeby się wyświetliła musi poprawnie wykonać INSERT - więc pytanie teraz czy InnoDB przyspieszy czy spowolni cały proces, nie ukrywam że pasowałoby mi usuwanie tych danych po pewnym czasie, jednak nie może to spowolnić ładowania reklamy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.