Ci sono alcuni thread che fluttuano sull'argomento, ma penso che il mio caso d'uso sia un po 'diverso.Ricerca a testo integrale su Google App Engine (Java)
Quello che voglio fare:
- completa componente di ricerca del testo per il mio GAE/J app
- Le dimensioni indice è piccola: di solito 25-50 MB o giù di lì
- Non ho bisogno di aggiornamenti in tempo reale a l'indice, una reindicizzazione periodica va bene
- Questo è per il completamento automatico e simili, quindi deve essere estremamente veloce (ho l'impressione che l'implementazione di un indice invertito in Datastore introduca una notevole latenza)
La mia strategia finora (solo la pianificazione, non hanno provato ancora nulla attuazione):
- Usa Lucene con RAMDirectory
- Un lavoro cron periodica crea l'indice, serializza al Datastore, memorizza un aggiornamento id (o timestamp)
- Ricerca servlet carica l'indice all'avvio e crea la RAMDirectory
- a ogni richiesta del servlet controlla l'attuale aggiornamento id e ricarica l'indice, se necessario
La cosa principale su cui sono confuso è come sincronizzare i dati in memoria tra le istanze: funzionerà o mancherò qualcosa?
Inoltre, fino a che punto posso spingerlo prima che inizi ad avere problemi con l'uso della memoria? Non ho trovato nulla sulle quote RAM per GAE. (Questo indice è piccolo, ma posso pensare a più cose che vorrei aggiungere)
E, naturalmente, qualche idea su approcci migliori?
memoria è separata tra le istanze GAE, quindi una directory di RAM straight-up non sarebbe condivisa tra di loro. Dovresti inizializzarlo per ogni istanza all'avvio. Quale non potrebbe essere così cattivo dato i nuovi server in standby e le richieste di riscaldamento. –
Beh, sì, è una specie di parte di ciò che ho delineato sopra ... – Dmitri