Existen algunos hilos de discusión sobre el tema, pero creo que mi caso de uso es algo diferente.Búsqueda de texto completo en Google App Engine (Java)
Lo que quiero hacer:
- completo componente de búsqueda de texto para mi GAE/J aplicación
- El tamaño del índice es pequeño: 25-50MB más o menos
- No necesito actualizar en tiempo real a el índice, una revisión periódica de dicha indexación está bien
- Esto es para auto-completar y similares, por lo que debe ser extremadamente rápido (me da la impresión de que la aplicación de un índice invertido en el almacén de datos introduce latencia considerable)
Mi estrategia hasta el momento (simplemente planeando, no han intentado implementar nada todavía):
- Uso Lucene con RAMDirectory
- una tarea programada periódica crea el índice, serializa al almacén de datos, almacena una actualización Identificación del (o marca de tiempo)
- Buscar servlets carga el índice en el arranque y crea la RAMDirectory
- en cada petición al servlet comprueba el actual identificador de actualización y vuelve a cargar el índice según sea necesario
Lo principal de lo que estoy confundido es cómo sincronizar los datos en memoria entre las instancias: ¿funcionará, o me falta algo?
Además, ¿qué tan lejos puedo presionarlo antes de comenzar a tener problemas con el uso de la memoria? No pude encontrar nada en las cuotas de RAM para GAE. (Este índice es pequeño, pero puedo pensar en más cosas que me gustaría agregar)
Y, por supuesto, ¿alguna reflexión sobre mejores enfoques?
memoria es separada entre instancias GAE, por lo que un directorio de memoria RAM recto-para arriba no sería compartido entre ellos. Tendría que inicializarlo para cada instancia al inicio. Lo cual podría no ser tan malo teniendo en cuenta los nuevos servidores en espera y las solicitudes de preparación. –
Bueno, sí, eso es parte de lo que describí anteriormente ... – Dmitri