La solución más fácil es mostrar a cada usuario el mismo contenido nuevo. Como el contenido es nuevo, ninguno de ellos lo habrá visto todavía. Para muchos tipos de sitios, el contenido nuevo es el tipo de interés que más les interesa a los usuarios.
Si no tiene suficiente contenido nuevo para hacer esto o desea mostrar contenido antiguo, puede hacerlo de manera bastante eficiente a través de un filtro de floración. En lugar de almacenar el contenido visto para cada usuario, usted almacena una estructura de datos de tamaño fijo que le indica si el contenido ha sido visto por el usuario con alguna probabilidad de un falso positivo. Ahora puede generar aleatoriamente una lista de contenido y filtrar el contenido visto, así como una pequeña cantidad de contenido invisible.
La tasa de falsos positivos con este enfoque aumentará para los usuarios más pesados, hasta que eventualmente sea imposible mostrarles contenido nuevo a pesar del contenido que no han visto existente. Para estos usuarios, deberá tomar una decisión.
- ¿Cuál es el mejor algoritmo de procesamiento de imágenes para comparar una pintura recibida como entrada contra la base de datos y seleccionar la coincidencia más cercana?
- ¿Cuál es el algoritmo de Apache Hadoop?
- ¿Por qué deberíamos instanciar una matriz en una línea diferente?
- ¿De dónde viene el nombre perceptrón?
- ¿Por qué necesitamos un árbol AVL en informática?
Una opción es mantener una base de datos fuera de línea de todo el contenido visto por todos los usuarios. Dices que es obvio que no puedes hacer esto, pero no veo por qué esto es obvio. Con la ingeniería adecuada, probablemente incluso podría consultar esto en vivo en producción, pero al menos debería poder encontrar suficiente almacenamiento en la nube para mantener esta información para el procesamiento fuera de línea. Estos datos pueden ser muy valiosos y el almacenamiento en la nube es barato, por lo que debe reconsiderar si realmente no es posible registrar todo. Básicamente estás tirando dinero. Una vez que tenga registros completos, puede precalcular listas aleatorias para usuarios más pesados sin conexión o producir un filtro de floración más grande para ellos. Los filtros Bloom no pueden redimensionarse dinámicamente, por lo que generar filtros más grandes requiere tener registros completos de lo que los usuarios han visto.
Alternativamente, puede aflojar su requisito de que nunca le muestre a alguien algo que haya visto antes. En cambio, solo garantice que solo le mostrará a las personas algo que no han visto en mucho tiempo. Es posible que no pueda mantener una lista completa de todo lo que ha visto un usuario, pero debería poder mantener una lista parcial. Tal vez los últimos 100 o los últimos 1000 artículos que han visto. Ahora solo filtre estos de sus elecciones aleatorias. Los usuarios más ligeros verán contenido completamente nuevo o casi completamente nuevo, mientras que los usuarios más pesados al menos no seguirán viendo el mismo contenido repetidamente.
Su pregunta fue un poco vaga, así que espero que uno de estos enfoques ayude.