Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
¿La mejor manera de implementar la clasificación de una gran cantidad de registros en Mongo?

Estoy haciendo una aplicación aquí, los usuarios podrán publicar y dar me gusta/no me gusta. En el backend, estoy usando Node y Mongoose. Ahora, supongamos que tengo unas 500k publicaciones (o pueden ser millones, solo por el bien de la comprensión). Entonces, ¿cómo obtengo las publicaciones más populares? La clasificación requerirá una gran cantidad de tiempo, ¿verdad? ¿Cuál es la mejor manera de hacer esto?

Déjame explicarte un poco más. Supongamos que un usuario ha realizado una publicación en la categoría 'A'. Ahora, para obtener las publicaciones principales en esa categoría, primero tengo que encontrar las publicaciones enumeradas en esa categoría. Entonces tengo que ordenar. Esto tomará años.

¿Cuáles son sus sugerencias para esto? ¿Algún consejo sobre si Mongo es el candidato adecuado para este caso de uso?

Tengo dos cosas de las que ocuparme.

  • Los resultados deben obtenerse en un tiempo razonable.
  • La base de datos tiene que acomodar una gran cantidad de datos.

También busqué en Cassandra y Elasticsearch. Para el contexto dado, ¿crees que estos proporcionarían una mejor solución?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Esto es más como una pregunta de diseño del sistema para ser honesto. Incluso con la búsqueda elástica, tendrá que marcar el analizador sobre la base de ciertos elementos correctos, por lo que no se supone que funcione en todo, tendrá que definirlo de esa manera.

Con respecto a la base de datos, MongoDB, lo mejor que puede hacer es tener índices para ayudar en la clasificación, porque si no es así, el sistema tendrá que buscar esos valores en WiredTiger Cache (WiredTiger = Storage Engine) y luego clasificarlos en la memoria, imagínense la farsa que causará :D

La mayoría de las empresas mantienen un control más granular sobre este tipo de cosas, en función de las expectativas, la mayoría de las cosas están precompiladas, sobre la base de etiquetas, por ejemplo, en Twitter. Y después de que se haya ejecutado una vez, no necesita ordenar todo de nuevo.

He ordenado un conjunto de datos en el campo A, por ejemplo, ¿debo ordenarlo todo nuevamente para una nueva solicitud? No: solo ajuste las nuevas entradas. Este ajuste dependerá de lo que quieras mostrar al usuario.

En general, es un problema interesante de resolver pero que dependerá en gran medida del caso de uso. Patrón de acceso exacto. Habiendo dicho eso, ElasticSearch suena como un buen candidato pero... también tendrá su limitación. Concéntrese en los patrones de acceso exactos, como ya mencioné.

Editar según lo solicitado por OP.

Entonces, ¿cómo obtengo las publicaciones más populares?

Esto no depende completamente de ordenar los resultados, depende más de la explosividad del tema donde la tasa tiene más importancia.

Consulte este artículo aquí por Gilad.

Piénselo cuando verifica la tasa de etiquetas y palabras, mantiene un conteo basado en la tasa para eso.

De manera similar, para su categoría, según el algoritmo, mantenga esta pieza aislada de solo consultar todas las publicaciones.

Amazon no está clasificando productos sobre la marcha para una categoría para todo su conjunto de datos, ¿verdad? Piénsalo.

Cosas de rango previo y basadas en nuevas incorporaciones, mantenga esa parte dinámica y combínelas.

Por ejemplo, para la categoría x => tengo los 500 mejores listos según mi algoritmo, ahora para los nuevos datos que llegaron hoy, uso el algoritmo para obtener una clasificación relativa y luego combino los 500 principales con el contenido clasificado hoy y muestro los resultados.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!