Si todos los humanos usaran 100 atributos corporales (p. Ej., Color de cabello, color de ojos, altura, peso, longitud de tibia, etc.) como puntos de datos y los almacenen en una base de datos, ¿qué base de datos y método de búsqueda usaría para clasificar a las personas por su similitud con usted?

Este problema no se adapta bien a RDBMS, que normalmente utiliza índices de árbol B + para buscar datos por valor o rango de valores, pero en su consulta solo obtiene una dimensión de búsqueda por instancia de tabla.

Una forma diferente de organizar los datos es en una base de datos multidimensional , que permite buscar una colección por múltiples atributos y luego encontrar la intersección. Aquí hay un artículo que describe la comparación: Comparación de estructuras de bases de datos relacionales y multidimensionales

Hay bases de datos OLAP implementadas como bases de datos multidimensionales; vea algunos productos de ejemplo que figuran en esta entrada de wikipedia: MOLAP

También puede leer sobre los algoritmos de Hilbert R-tree, que pueden indexar datos de alta dimensión. No conozco ningún producto de base de datos específico que implemente Hilber R-trees, pero puedes investigar un poco por ti mismo. Puede mencionarse en las características de indexación espacial de algunas bases de datos o productos de búsqueda de texto completo como Apache Solr.

La conclusión es que el problema que está describiendo generalmente no se resuelve con productos DBMS disponibles en el mercado, y si desea crear un producto para hacer esto, debe considerar que podría tener que crearlo desde el principio. arriba.

Cualquiera: solo debes crear un hash de diferentes combinaciones de atributos:
así que Redis, SQL, Mongo, Cloudant, Neo4J todo funcionaría. Si desea mantenerlo como una estructura gráfica y predefinir las agrupaciones y relaciones, entonces Neo4J es la mejor db.

Consulte el problema del par de puntos más cercano. Este es el problema exacto que describió, tiene un espacio euclidiano de 100 dimensiones. Mientras que Wikipedia no explica mucho el problema dimensional, esta página en ucsb.edu sí lo hace.

El problema más importante es el caso de uso real, ya que puede almacenar de varias maneras, y como medio de almacenamiento, muchas opciones están bien.
Supongo que, por lo general, no se trata de una base de datos actualizada con frecuencia, sino más bien de lectura intensiva, en busca de personas por sus características.
En mi opinión, este tipo de problema es muy adecuado para las estructuras de memoria, ya que el tamaño de la base de datos no es demasiado grande. si desea mantener información sobre 100 millones de personas X 100 atributos, terminaría con algo así como 10-50 GB de memoria (suponiendo que lo que guarda es principalmente punteros: relaciones entre personas y atributos). Esto se puede implementar fácilmente en una máquina de tamaño mediano.
La ventaja de tener esto en la memoria es la capacidad de atender muchas consultas, rápidamente. Toda la estructura puede volcarse en archivos con registros de actualización o en cualquier base de datos, ya que las actualizaciones no son tan frecuentes. para una carga rápida de los datos en la memoria (en caso de un apagado) NoSql db’s sería mucho más rápido.