Przechowuję obecnie dość dużą liczbe danych w MySQLu około 300000 nowych rekordów na godzine. Przy obecnie kilku milionach rekordów select
trwa lekko poniżej sekundy, co nie jest zbyt zadowalających wynikiem. Mam parę pomysłow jak to zoptymalizować, lecz nie do końca wiem jak to zrealizować. Obecny schmat tabelii to mniej więcej coś takiego:
id, point1, point2, time
point1 i point2 to inty, które mogą się powtarzać i bardzo często to robią.
time trzyma czas w którym akcja zapisu do bazy danych miała miejsce.
Żeby zwrócić interesujący mnie wynik używam mniej więcej takiego query:
select id, point1, point2, time from table where point1 = 1 and point2 = 1 order by time desc limit 25;
Tu już pojawią się 2 możliwości optymalizacji, nie potrzebuje trzymać, więcej niż 25 elementów z danymi punktami i nie potrzebuje też starszych niż np. dzień.
Dlatego najlepiej byłoby po prostu te informacje z bazy danych usuwać.
Zastanawiałem się też nad jakimś podzieleniem tych informacji, te punkty należą zawsze do jakiegoś regionu i dla tego danego regionu mogłoby być 200 razy mniej elementów do przeszukania.
Tylko nie wiem czy w mysqlu jest możliwość zrobienia coś własnie w rodzaju tych grup.
Oprócz optymalizacji aplikacji pod obecną bazę danych myślałem też nad jej zmianą, wydaje mi się, że mysql nie jest odpowiednią bazą do przechowywania takiej ilości takich informacji. Czy w tej sytuacji wybranie np. Cassandry nie byłoby dużo lepszym rozwiązaniem?