Hola a todos y gracias de antemano. Soy nuevo en el juego NoSQL, pero mi lugar de trabajo actual me ha encomendado la tarea de establecer comparaciones de algunos big data.¿La mejor solución para encontrar una intersección de conjunto de 1 x 1 millón? Redis, Mongo, otro
Nuestro sistema tiene conjunto de etiquetas de cliente y conjuntos de etiquetas específicas. Una etiqueta es un número de 8 dígitos.
Un conjunto de etiquetas de cliente puede tener hasta 300 etiquetas, pero promedia 100 etiquetas
Un conjunto de etiquetas específicas puede tener hasta 300 etiquetas pero promedia 40 etiquetas.
El cálculo previo no es una opción, ya que estamos buscando una base de clientes potenciales de mil millones de usuarios.
(Estas etiquetas son jerárquicos por lo que tener una etiqueta implica que también tiene sus marcas para padres y ancestros. Poner esa información a un lado por el momento.)
Cuando un cliente golpea nuestro sitio, tenemos que intersectan su etiqueta establecer contra un millón de conjuntos de etiquetas específicas lo más rápido posible. El conjunto de clientes debe contener todos los elementos del conjunto objetivo para que coincida.
He estado explorando mis opciones y la intersección establecida en Redis parece ideal. Sin embargo, mi búsqueda en Internet no ha revelado cuánto carnero se necesitaría para guardar un millón de juegos de etiquetas. Me doy cuenta de que la intersección sería muy rápida, pero es una solución factible con Redis.
Me doy cuenta de que esto es fuerza bruta e ineficiente. También quería usar esta pregunta como medio para obtener sugerencias sobre cómo se manejó este tipo de problema en el pasado. Como se dijo anteriormente, las etiquetas se almacenan en un árbol. También comencé a considerar a Mongodb como una posible solución.
Gracias de nuevo
Este es un uso típico de almacenamiento/memoria vs dilema tiempo de procesamiento, no es así? Puede calcular el conjunto de etiquetas resultante en las actualizaciones de etiquetas, almacenarlas y publicarlas más rápido o hacer un cálculo dinámico cuando los datos realmente se necesitan. Puede considerar elegir la primera opción si las actualizaciones de etiquetas no son tan comunes o pensar en una opción de base de datos agrupada (Clustrix, por ejemplo) –
Gracias. Debería haber especificado. Actualmente precalculamos, pero si tenemos éxito como empresa, podríamos estar viendo a un billón de clientes potenciales. Voy a revisar Clusterix – MFD3000
Mongodb no ofrece nada para establecer la intersección. Y si obtienes algo de RAM (como 100+ GB), puedes almacenar bastantes teclas en redis :) –