Mi piace la semplicità, la scalabilità e la facilità d'uso del datastore; e i miglioramenti trovati nella nuova libreria ndb sono favolosi.ricerca di idee/alternative alla fornitura di una pagina/numero di elementi/navigazione di articoli che corrispondono a una query del datastore GAE
Come comprendo le best practice del datastore, non si dovrebbe scrivere codice per fornire il conteggio degli articoli e/o delle pagine dei risultati della query corrispondenti quando il numero di elementi corrispondenti a una query è elevato; perché l'unico modo per farlo è recuperare tutti i risultati che richiedono un uso intensivo delle risorse.
Tuttavia, in molte applicazioni, inclusa la nostra, è comune il desiderio di vedere il conteggio degli articoli corrispondenti e di fornire all'utente la possibilità di navigare verso una pagina specifica di tali risultati. Il problema del paging del datastore è ulteriormente complicato dall'obbligo di aggirare i limiti di fetch (limite, offset = X) come indicato nell'articolo Paging Through Large Datasets. Per supportare l'approccio consigliato, i dati devono includere una colonna con un valore univoco che può essere ordinata nel modo in cui i risultati devono essere visualizzati. Questa colonna definirà un valore iniziale per ogni pagina di risultati; salvandolo, possiamo recuperare la pagina corrispondente in modo efficiente, consentendo la navigazione verso una pagina specifica o successiva come richiesto. Pertanto, se si desidera visualizzare i risultati ordinati in più modi, potrebbe essere necessario mantenere diverse colonne di questo tipo.
Si segnala che a partire dal SDK v1.3.1, Query Cursors sono il modo consigliato di fare datastore di paging. Hanno alcune limitazioni, inclusa la mancanza di supporto per gli operatori di filtri IN e! =. Attualmente alcune delle nostre query importanti utilizzano IN, ma proveremo a scriverle usando O per l'utilizzo con i cursori di query.
Seguendo le linee guida suggerite, un utente potrebbe essere data una (Avanti) e (Prev) pulsanti di navigazione, così come i tasti di pagine specifiche come la navigazione procedeva. Ad esempio se l'utente ha premuto (Avanti) per 3 volte, l'app potrebbe mostrare i seguenti pulsanti, ricordando l'unico record di inizio o cursore per ciascuno per mantenere efficiente la navigazione: (Indietro) (Pagina-1) (Pagina-2)) (Pagina-3) (Pagina-4) (Successivo).
Alcuni hanno suggerito di tenere traccia dei conteggi separatamente, ma questo approccio non è pratico quando gli utenti potranno interrogare su un ricco set di campi che varieranno i risultati restituiti.
sto cercando approfondimenti su questi temi in generale e alle seguenti domande in particolare:
Che navigazione opzioni dei risultati delle query offrite nei vostri apps datastore per aggirare queste limitazioni?
Se fornendo agli utenti conteggio dei risultati efficienti e pagina di navigazione del l'intero set di risultati della query è una priorità, dovrebbe usare il datastore essere abbandonato a favore della GAE MySql solution ora offerto.
Ci sono cambiamenti imminenti nell'architettura della tabella grande o nell'implementazione dello storage di dati che fornirà funzionalità aggiuntive per contando i risultati di una query in modo efficiente?
Molte grazie in anticipo per il vostro aiuto.
Supponendo che usiamo l'approccio C = query.count (N) per mostrare all'utente "1-20 di C" o "1-20 di molti, come possiamo determinare un valore ragionevole, costo saggio, per N. Nel nostro uso caso 100 sarà troppo piccolo.Qualsiasi suggerimento su come dimensionare al meglio questo per mantenere il costo $ in calo? Da documenti NDB: "Si noti che count(), mentre più veloce di fetch(), fa ancora molto lavoro ogni volta che viene chiamato ". Quanta quota è utilizzata? Guido, Grazie per Python, NDB e il tuo aiuto :) I conteggi e nav IMO sono una funzionalità utile per alcune app perché gli utenti possono valutare e regolare le dimensioni dei dati corrispondenti ai propri parametri prima di perforare. –
Puoi calcolare il costo utilizzando questa pagina: http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Costs. AFAIK a Count() è come una query solo per chiavi. conta. (A seconda del professionista blem, se hai un numero limitato di conteggi da memorizzare nella cache, potresti essere in grado di memorizzare i conteggi nel datastore usando il modello del contatore di caratteri.) –
Anche un aggiornamento sulle query IN/OR: puoi trasformare qualsiasi query in un cursore -sostenendo la query aggiungendo un ordinamento di __key__ alla fine dell'ordine di ordinamento esistente. Per esempio. in NDB: 'Employee.query (Employee.name.IN (['Joe', 'Jane'])). order (Employee.name, Employee.key) .fetch_page (N)' - senza l'ordine Employee.key solleva BadArgumentError. –