2017-04-05 2 views
0

Je travaille sur un projet où j'ai beaucoup de véhicules (environ 2000) et plusieurs polygones sur ma BD (travaillant avec mongo).mongoDB - Quelle est la meilleure façon de vérifier les événements de polygones d'entrée/sortie pour de nombreux endroits?

J'ai différents types de polygones (villes, pays, intersections ...), disons 4 types d'ailleurs.

Chaque minute je reçois le nouvel emplacement des véhicules et je dois montrer sur une table côté client le pays, la ville et l'intersection actuels (ou la dernière intersection). Tout ce que je veux vraiment savoir, c'est quand le véhicule entre/sort polygone.

Je sais qu'il est possible d'interroger le polygone actuel pour l'emplacement spécifique du véhicule, mais je dois obtenir 4 types de polygones courants pour 2000 véhicules.

C'est la requête de 8000 (!!!) DB toutes les minutes.

Quelle est la meilleure façon de faire ce que je veux? merci :)

Répondre

0

Je pense qu'il y a une meilleure solution parce que les véhicules ne peuvent pas changer leur ville/pays fréquemment jusqu'à ce qu'ils volent. Je considérais ci-dessous schema-

Country={ 
     id: ObjectId or String, 
     name: String, 
     cities: [<array of city subdocuments>], 
     near_country: [<array of IDs of neighbour countries>], 
     boundary: location boundary for city <city would be polygon or your choice of geoType> 
} 

ville sous-document dans le pays peut avoir le schéma comme {id, name, boundary, near_city}. je choisirai mon schéma Véhicule {id, location_cordinates, curr_city, curr_country}

Maintenant, quand vous obtenez les données de localisation du véhicule, juste aller chercher curr_city du document de véhicule stocké et vérifier si l'emplacement est toujours dans curr_city. Si ce n'est pas un problème, sinon vous avez juste besoin de vérifier si l'emplacement est dans l'un des near_city.

Si la ville/pays change en raison du mouvement du véhicule, vous devez mettre à jour le véhicule avec les dernières données.

De cette manière, vous minimiserez les requêtes sur la base de données. Cela nécessiterait du code car tout ne sera pas fait dans DB.

Ici, j'ai pris quelques hypothèses mêmes idées

  • emplacement du véhicule seront stockées dans le document du véhicule. Si ce n'est pas votre cas, supprimez-le. Vous pourriez obtenir l'emplacement de GPS ou de chose semblable et ne doit pas le stocker selon votre besoin.
  • Je ne pouvais pas comprendre la partie d'intersection. Est-ce la transition ou l'intersection? Habituellement, le pays a des états, l'état a des villes et ainsi de suite. Le nom de la ville peut être dupliqué à l'intérieur d'un état ou d'un état à l'autre. Mais une ville fera partie d'un seul état. Si ce n'est pas le cas, il vous suffit de mettre la même ville dans plusieurs pays et de mettre une logique de code pour gérer ces villes.
  • En prenant une ville proche, vous devez prendre en compte les villes situées à la limite d'un pays et qui peuvent être proches d'un autre pays.

J'espère avoir compris votre problème et la solution vous aide. Je serais heureux d'aider plus loin si je reçois plus d'informations.