2011-02-05 2 views
2

En raison de la nature des données que nous recueillons dans notre application, le nécessaire pour permettre à l'utilisateur d'être en mesure de rechercher par 1.000.000 lignes de données, et recevoir les résultats côté client aussi vite que possible.Comment montrer énorme quantité de côté client de données du rapport (MongoDB, JS)

Nous avons joué avec différentes techniques et expérimentons actuellement le moteur de stockage de documents MongoDB. Nous stockons essentiellement les données du rapport dans Mongo de la façon dont nous voulons le montrer du côté client. Mais, c'est ici que je voulais m'appuyer sur votre expérience. Nous avons utilisé des plugins de table de rapports tels que datatables.net, mais lorsqu'un client demande des données pouvant correspondre à plus de 100 000 enregistrements, la latence dans la livraison de ces données au client peut prendre plus d'une minute pour exporter le JSON du serveur vers client.

J'ai essayé filtrer l'ensemble de résultats que par l'envoi de 1000 résultat à la fois pour le client, mais si l'utilisateur décide de trier une colonne? La requête entière doit être effectuée à nouveau, et les 1000 premiers résultats chargés dans le client. Mais si le client choisit de faire une recherche dans une colonne, les résultats doivent être ré-extraits. Tous ces problèmes n'existent pas lorsque tous les des données a été chargé dans le côté client. Donc essentiellement ma question est, comment pouvez-vous efficacement et rapidement, permettre aux clients de rechercher et de manipuler de grands ensembles de données, mais les résultats sont livrés au côté du client d'une manière qui ne nécessite pas que tous les résultats soient envoyés en une seule fois , gardant ainsi le côté client aussi léger que possible?

Je suis sûr qu'il doit y avoir quelques plugins de type datatable frontaux pour MongoDB, potentiellement via Node.js pour la communication directe JSON, mais je ne peux pas trouver quoi que ce soit!

Merci pour votre aide.

+1

Il est intéressant de noter que MongoDB stocke des objets dans [BSON] (http://bsonspec.org/), donc il y a toujours une conversion vers JSON. Je pense qu'une grande partie de la latence que vous voyez est simplement due à la quantité de données qui doit être transférée et analysée côté client. –

Répondre

5

Il semble que votre problème réside dans le volume de données que vous essayez de transmettre côté client. Quel écran affiche 1000 lignes de données ??

Faire une demande avec un indice de départ, un ordre de tri et une taille de page et extraient que beaucoup de données que dans cet ordre et le retourner côté client.

Jetez un oeil à jqGrid par exemple sous forme de grille côté client qui passe au serveur d'informations de pagination et de tri et récupère seulement une page de soi à la fois. jqGrid avec MongoDB et les index corrects en place est incroyablement rapide.

+0

Cela ressemble à un bon plugin de table à coup sûr, merci! Je vais bien jouer avec ça. –

1

MongoDB est grande, mais vous voudrez peut-être à l'index aussi ce contenu à l'extérieur de MongoDB pour fournir les performances et la flexibilité que vous décrivez. Jetez un oeil à Apache Solr ou Elastic Search. Les deux sont basés sur Lucene, qui a des capacités de recherche très robustes. En particulier, vous pouvez exécuter une requête avec pagination et tri d'une manière très performante. Ces deux outils peuvent renvoyer le jeu de résultats dans JSON. Avec autant d'enregistrements, et en utilisant quelque chose basé sur Lucene, vous serez également en mesure de fournir des capacités de filtrage plus avancées très facilement, comme la navigation factice et le bourrage.

+0

Apache Solr est doux! – Stephen

Questions connexes