MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment stocker la sortie de la requête dans la base de données temporaire ?

Mongo ne supporte pas nativement les collections "temp".

Une chose typique à faire ici est de ne pas écrire l'intégralité de la sortie des résultats dans une autre base de données, car cela serait totalement inutile, car Elasticsearch effectue sa propre mise en cache, vous n'avez donc pas besoin de couche par-dessus.

De plus, en raison de problèmes d'E/S, il est normalement déconseillé d'écrire, par exemple, un ensemble de résultats de 10 000 enregistrements dans Mongo ou dans une autre base de données.

Il y a une demande de fonctionnalité pour ce dont vous parlez :https://jira.mongodb.org/ parcourir/SERVER-3215 mais pas de planification pour le moment.

Exemple

Vous pourriez avoir un tableau des résultats.

Dans ce tableau, vous auriez un document qui ressemble à :

{keywords: ['bok', 'mongodb']}

Chaque fois que vous recherchez et faites défiler chaque élément de résultat, vous écrivez une ligne dans ce tableau remplissant le champ des mots-clés avec les mots-clés de ce résultat de recherche. Ce serait par résultat de recherche par liste de résultats de recherche par recherche. Il serait probablement préférable de simplement diffuser chaque résultat de recherche sur MongoDB au fur et à mesure qu'ils arrivent. Je n'ai jamais programmé Python (bien que je souhaite apprendre), donc un exemple en pseudo :

var elastic_results = [{'elasticresult'}];
foreach(elastic_results as result){
    //split down the phrases in this result and make a keywords array
    db.results_collection.insert(array_formed_from_splitting_down_result); // Lets just lazy insert no need for batch or trying to shrink the amount of data to one go or whatever, lets just stream it in.
}

Ainsi, au fur et à mesure que vous progressez dans vos résultats, vous insérez simplement en masse aussi rapidement que possible, créez une sorte de "flux" d'entrées dans MongoDB. Il peut très bien le faire.

Cela devrait alors vous donner une liste partageable de mots et de verbes de langage pour traiter des choses comme les MR et des trucs pour agréger des statistiques à leur sujet.

Sans en savoir de plus en plus sur votre scénario, c'est à peu près ma meilleure réponse.

Cela n'utilise pas le concept de table temporaire, mais rend vos données permanentes, ce qui est bien à première vue puisque vous souhaitez utiliser Mongo comme moteur de stockage pour d'autres tâches.