/ / Jak przechowywać PHP Trie do wszystkich późniejszych zastosowań? - php, struktury danych, trie

Jak przechowywać PHP Trie dla wszystkich późniejszych zastosowań? - php, struktury danych, trie

Projektuję aplikację w języku PHP, która obejmuje strukturę danych Trie.

Aby uzyskać oszczędność czasu w wyszukiwaniu prefiksów, używam Trie.

Konstruuję Trie przy użyciu rekordów z bazy danych.

Teraz baza danych ma miliony rekordów. Dlatego nie jest możliwe za każdym razem tworzenie Trie, a następnie wyszukiwanie w niej, dla każdego nowego żądania użytkownika.

Zamiast tego mogę utworzyć Trie tylko raz iw jakiś sposób przechowują te informacje, tak że nie trzeba ich ponownie tworzyć dla każdego nowego żądania użytkownika, a następnie wyszukiwanie można natychmiast rozpocząć. Czy mogę w jakiś sposób buforować utworzoną Trie (nie tylko dla jednej sesji użytkownika, ale dla wszystkich żądań użytkownika) za pomocą PHP?

Każda pomoc byłaby bardzo cenna.

Odpowiedzi:

0 dla odpowiedzi № 1

Masz kilka standardowych opcji.

Buforuj bazę danych w pamięci, używając prostej pamięci podręcznej, takiej jak memcached

Używaj pamięci podręcznej Redis, być może wykorzystując niektóre z jego dodatkowych funkcjifunkcje. Może to obejmować proces, w którym ładujesz dane do struktury w REDIS, a Twój kod wyszukiwania trie działa bezpośrednio na Redis, a nie zestaw wyników bazy danych.

W obu przypadkach będziesz buforować wynik przez pewien okres czasu, który jest akceptowalny, a ponieważ wynik bazy danych będzie w jakiejś formie przechowywany w pamięci, RDBMS nie zostanie obciążony.

W swoim powiązanym pytaniu wskazałeś, że onsurowa zserializowana postać zmiennej miałaby rozmiar około 200 MB. To mieści się w granicach maksymalnego rozmiaru obiektu (512 MB) dla Redis, ale może być problematyczne dla memcached. Obecnie osobiście korzystam z Redis do większości pamięci podręcznych serwerów aplikacji.