7
votes

Recherche multidimensionnelle en combinant des index géospatiaux

I Construire une application qui stocke des millions de vecteurs de points flottants, chaque vecteur ayant ~ 100 dimensions. Avec un vecteur de requête, je dois rechercher ces vecteurs pour les matchs K les plus proches (euclidiens) les plus proches. Le temps d'exécution doit être plus rapide que de numériser toutes les millions de vecteurs. Par "Vector" Je veux dire dans l'algèbre linéaire Terme une liste d'~ 100 numéros de point flottant I.e. [0,3, -15,7, 0,004, 457.1, ...]

Je connais des bases de données telles que MySQL et MongoDB fournissent des index spatiaux qui fonctionnent pour 2 dimensions. Existe-t-il un moyen d'adapter cela à de nombreuses autres dimensions peut-être avec des index composites? Ou y a-t-il d'autres autres magasins de données supportant les index sur plus de dimension?


4 commentaires

Quand vous dites "Vector" et "le plus proche" pouvez-vous définir exactement ce que vous voulez dire? - Je crois comprendre qu'un vecteur est une direction seulement et comme telle ne conviendrait pas à l'indexation spatiale. Vous supposez que tous les vecteurs proviennent de l'origine et du "plus proche" seraient mesurés à la distance entre les points d'extrémité de deux vecteurs donnés?


Je suppose que entre les deux significations du "vecteur comme une séquence d'éléments" et "vecteur comme une direction dans un cadre spatial", il signifie vraiment "vecteur comme position dans un cadre spatial"


clarifié en question. Faites-moi savoir si cela n'est toujours pas clair.


Le plus proche == EN.Wikipedia.org/wiki/norm_(Mathematics)#ucuccidean_norm


3 Réponses :



0
votes

Je peux comprendre votre douleur. Il n'y a pas de type de mise en œuvre R-arbre dans MongoDB, je ne suis pas sûr de ne pas être un dans SQL DBS. J'ai trouvé le lien suivant utile:

http://www.slideshare.net/nknize/mongo-sv-knizefinal < / a>


0 commentaires

1
votes

PostgreSQL . Il prend en charge tout nombre de dimensions que vous souhaitez. La taille par défaut est 100. Ceci peut être modifié dans le fichier CubedAta.h lors de l'installation. Opérateur de cube au sein de Postgres a été mis en œuvre pour des requêtes rapides.


2 commentaires

S'il vous plaît expliquer un peu plus, comment l'utiliseriez-vous pour un problème donné, s'il vous plaît?


Un vecteur de 100 Taille est plus peut être stocké dans une seule cellule à Postgres. Postgres a un calculateur de distance eulidien. SO OP peut utiliser cette fonction disponible dans l'opérateur de CUBE pour effectuer KNN. Pour améliorer les temps de réponse, nous pouvons créer un index sur cette colonne pour des requêtes rapides.