Me pregunto cuál sería la mejor manera de diseñar una aplicación social donde los miembros realicen actividades y sigan las actividades de otros miembros usando Google AppEngine.¿Cómo diseñarías un almacén de datos de AppEngine para un sitio social como Twitter?
Para ser más específicos Asumamos que tenemos estas entidades:
- Usuarios que tienen amigos
- Actividades que representan las acciones realizadas por los usuarios (digamos que cada uno tiene un mensaje de cadena y una ReferenceProperty a su usuario propietario, o puede usar la asociación de padres a través de la clave de appengine)
Lo difícil es seguir las actividades de su amigo, lo que significa agregar las últimas actividades de todos tus amigos. Normalmente, eso sería una unión entre la tabla de Actividades y su lista de amigos pero no es un diseño viable en appengine ya que no hay unión simulando que requerirá activar N consultas (donde N es el número de amigos) y luego fusionarse en la memoria - muy caro y probablemente excederá el plazo de solicitud ...)
Actualmente estoy pensando en implementar esto usando colas de la bandeja de entrada donde la creación de una nueva actividad iniciará un proceso en segundo plano que colocará la clave de la nueva actividad en la bandeja de entrada "de cada usuario siguientes:
- conseguir 'Todos los usuarios que siguen X' es una posible consulta appengine
- No es una entrada por lotes muy costosa en una nueva entidad "Bandeja de entrada" que básicamente almacena tuplas (usuario, clave de actividad).
voy a estar feliz de pensamiento oído sobre este diseño o sugerencias alternativas, etc.
Estaba viendo el mismo problema y encontré esta excelente (!) Presentación de la App Engine, que dieron en Google I/O: http://www.scribd.com/doc/16952419/Building-scalable-complex -apps-on-App-Engine Espero que también lo encuentres útil. –