Memorizzazione nella cache dei risultati della query e Interrogazione ogni volta (ricerca di una via di mezzo)

1

Questa è una specie di espansione su una domanda precedente

Alcune informazioni di base:

Querying Over 5,000 items from SQL database that eventually get sorted into a list depending on who the user is. One problem is that users are allowed to have customized lists which means that filtering these 5,000+ items in a uniform way is probably impossible.

Also, important that the amount of users (and users wanting to have custom item lists) is constantly growing, so there will be an unprecedented amount of ways to sort. Basically, we won't be paying attention to filtering this growing list.

Two methods we've come up with so far: -Option 1: Cache item list PER USER (and filter the items needed after) OR -Option 2: Cache the list once for the whole site (every user accesses this one cached list)

The issue with Option 1 is that there will be duplicated lists in cache. Although we do not have an amount of users that will strain our server's memory, we obviously want our system to have scalability.

The issue with Option 2 is that there will be duplicated items in the single, cached list. With the amount of users we have, this can quickly turn into a disorganized list full of duplicated items (i.e. 5,000 items can quickly turn into 10,000 based on a few user's custom item preferences)

C'è una "via di mezzo" per affrontare questa situazione? Uno che combina alcuni vantaggi di query e memorizzazione nella cache.

Anche se una risposta è un link a una fonte potenzialmente utile, la apprezzerei come se fossi in un bivio.

Sto cercando di aprire nuovi percorsi possibili nel mio brainstorming.

    
posta terbubbs 26.05.2015 - 17:34
fonte

2 risposte

2

Alcuni potrebbero non pensare che questa non sia una risposta, ma è un modo per ottenere una risposta migliore.

Raccogli dati sul comportamento degli utenti. Molti utenti preferiscono una configurazione predefinita. Se è così, avrebbe senso memorizzare nella cache questa lista. Ho visto alcune app che sono altamente configurabili, ma la uso solo nel modo in cui è uscita dalla scatola. Sono certo che ci sono centinaia di impostazioni per Microsoft Word che il 90% degli utenti non si preoccupa mai di usare.

Altrimenti, tiralo dal database / disco. A seconda delle dimensioni del db e del particolare RDBMS, la maggior parte dei dati potrebbe essere comunque in memoria (so che SQL Server fa questo). Qui è dove inizierai a vedere eventuali colli di bottiglia. Puoi rivolgerti a quelli successivi.

Non essere troppo ansioso per risolvere un problema troppo presto. Potrebbe non essere un problema. Il problema sbagliato o la soluzione sbagliata. Per quanto si possa desiderare una sorta di "best practice" o un caso d'uso standard, probabilmente non ce n'è uno che corrisponda alla tua situazione.

    
risposta data 26.05.2015 - 23:31
fonte
1

È necessario memorizzare nella cache la query in base ai parametri della query. In questo caso, ID utente.

Tuttavia, il punto di memorizzazione nella cache è di impedire l'esecuzione della stessa query più volte in una rapida esecuzione.

Questo di solito è causato da ogni utente che esegue la stessa query per richiesta. Quando hai 1000 utenti sul sito e ognuno fa richieste contemporaneamente e sta eseguendo una query getMenu, ad esempio, non tutti colpiscono il database e sovraccaricano il tuo db. Il primo viene eseguito e il resto ottiene il risultato memorizzato nella cache. Il tuo Db deve eseguire una query al secondo invece di 1000 query al secondo.

Supponendo che il tuo codice sia ragionevolmente ben scritto, non ti aspetteresti che una singola richiesta faccia la stessa chiamata molte volte, o che un singolo utente faccia molte richieste multiple per la stessa cosa. Dato che ogni utente sta facendo una query unica, tutti colpiranno il db. Non beneficiano di un utente diverso che ha già effettuato la chiamata. Se si memorizzano i risultati in una cache, non si vedono molti benefici e si esaurirà la memoria.

quindi è improbabile che la memorizzazione nella cache ti aiuti molto.

Penso che i commenti abbiano colpito la testa del fatto che il tuo elenco personalizzato per utente sia intrinsecamente non percorribile.

Forse puoi dividerlo in una lista standard e per modifiche dell'utente? oppure optare per gruppi di elementi?

o

puoi memorizzare nella cache il lato client dell'elenco. cioè un cookie. questo consente alla tua memoria effettiva di adattarsi ai tuoi utenti.

    
risposta data 26.05.2015 - 23:45
fonte

Leggi altre domande sui tag