Las necesidades de nuestro módulo en términos de almacenamiento y consulta son diferentes a las de los demás módulos. La diferencia principal es el volumen de datos a almacenar y la concurrencia de las consultas. En primer lugar, nuestro módulo almacenará muchísimos más datos que los demás, sólo el hecho de publicar un contenido en el módulo de Contenidos almacenará una actividad en nuestro módulo, o el simple hecho de loggearse ó visitar un perfil.
Por las razones anteriormente expuestas, nuestra aplicación necesita un mecanismo altamente escalable, fácilmente provisto por una base de datos NOSQL. Además, los queries tienen que tener tiempos rápidos de respuesta. Por estas razones creemos conveniente utilizar el motor MongoDB que ofrece estas ventajas (frente a otras desventajas como la imposibilidad de hacer consultas sobre atributos anidados de una entidad, aunque en nuestro caso no es necesario esto).
En cuanto a XML, para las respuestas de nuestro servicio web, no es necesario tener almacenados las respuestas sino que se generaran en la marcha cuando sean solicitadas. En el peor de los casos, si se necesita almacenar un XML, se puede hacer en texto plano en MongoDB pero no ofrece ninguna ventaja para procesarlo o consultarlo.
Nuestra aplicación ofrecerá los métodos que habíamos acordado anteriormente de la siguiente manera.
Método aplicación: registrarActividad(Actividad actividad)
URL: /activities
Método HTTP: POST
Parámetros:
<activity>
<module>Perfil</module>
<action>Ver</action>
<user_id>1234</user_id>
<module_parameters>
<profile_id>4567</profile_id>
</module_parameters>
</activity>
Respuesta:
<response>
<code>544</code>
<authorized>true</authorized>
<module_response>
<![CDATA[
<html>
<body>This is the profile</body>
</html>
]]>
</module_response>
<response>
Nuestro módulo tendrá una interfaz para los administradores de la comunidad:
Proveerá la siguiente información:
-
Estadísticas del uso de la comunidad. Ej: A qué horas hay más usuarios? Cuales son los contenidos más visitados?
-
Últimas 100 actividades realizadas por usuarios.