¿Qué tipo de concesiones estás buscando? Si está dispuesto a aguantar un pequeño golpe de rendimiento al insertar estas entidades, puede crear una solución para obtener N de ellas muy rápidamente.
Esto es lo que hay que hacer:
Al insertar sus entidades, especifique la clave. Desea dar las claves a sus entidades en orden, comenzando con 1 y subiendo desde allí. (Esto requerirá un poco de esfuerzo, ya que el motor de la aplicación no tiene autoincrement(), por lo que deberá realizar un seguimiento de la última identificación que usó en otra entidad, vamos a llamarlo IdGenerator)
Ahora cuando lo necesite N entidades aleatorias, genera N números aleatorios entre 1 y cualquiera que sea la última identificación que hayas generado (tu IdGenerator lo sabrá). A continuación, puede hacer un lote por clave usando las teclas N, que solo requerirá un viaje al almacén de datos, y será más rápido que una consulta también, ya que las claves obtenidas son generalmente más rápidas que las consultas, AFAIK.
Este método requiere tratar con algunos detalles molestos:
- Su IdGenerator podría convertirse en un cuello de botella cuando se inserta un montón de estos elementos sobre la marcha (más de uno por segundo), lo que requeriría algún tipo de implementación de IdGenerator fragmentado.Si todos estos datos están precargados, o no son de alto volumen, lo tienes fácil.
- Es posible que descubra que un Id ya no tiene una entidad asociada, porque lo eliminó o porque put() falló en alguna parte. Si esto sucediera, tendrías que tomar otra entidad aleatoria. (Si desea conseguir la suposición y reducir las probabilidades de que esto se podría hacer esta identificación a disposición del IdGenerator reutilizar para "rellenar los huecos")
Así que la pregunta se reduce a la rapidez con que necesita éstos N elementos con respecto a la frecuencia con la que los agregará y eliminará, y si una pequeña complejidad adicional vale la pena para aumentar el rendimiento.
que he creado un problema para esto, puede estrella para ayudar a que te lo arreglen: https://code.google.com/p/googleappengine/issues/detail?id=9044 –