Supongamos que tenemos billones de conjuntos almacenados en alguna parte. El dominio para cada uno de estos conjuntos es el mismo. También es finito y discreto. Por lo tanto, cada conjunto puede almacenarse como un campo de bits (p. Ej .: 0000100111 ...) de una longitud relativamente corta (p. Ej .: 1024). Es decir, el bit X en el campo de bits indica si el elemento X (de 1024 elementos posibles) está incluido en el conjunto dado o no.La forma más rápida de realizar una operación de prueba de subconjuntos en una gran colección de conjuntos con el mismo dominio
Ahora, quiero diseñar una estructura de almacenamiento y un algoritmo para responder eficientemente a la consulta: lo que los conjuntos en el almacén de datos han establecido Y como un subconjunto. El conjunto Y no está presente en el almacén de datos y se especifica en tiempo de ejecución.
Ahora, la forma más simple de resolver esto sería AND Y el campo de bits para el conjunto Y con campos de bits de cada conjunto en el almacén de datos uno por uno, seleccionando aquellos cuyo resultado Y coincida con el campo de bits de Y.
¿Cómo puedo acelerar esto? ¿Existe una estructura de árbol (índice) o algún algoritmo inteligente que me permita realizar esta consulta sin tener que ANDAR cada campo de bit del conjunto almacenado?
¿Existen bases de datos que ya admitan tales operaciones en grandes colecciones de conjuntos?
¿Qué tipo de base de datos está utilizando? ¿Un formato propietario? ¿Servidor SQL? –
La elección de DB dependerá de si admite de manera eficiente las operaciones de conjunto dadas en conjuntos enormes. Ninguno de los SQL DBS se escalará al tamaño requerido (RDMS DBs sería una mala elección para este problema de todos modos). Entonces, la elección es una base de datos especializada o una base de datos que implementaré yo mismo. – niktech
¿Has encontrado alguna solución? Es extraño que no haya bases de datos conocidas para esta tarea. – actual