―― [x] D'une manière ou d'une autre, la zone autour de Twitter ressemble à ça, n'est-ce pas?
La priorité la plus élevée du côté MongoDB dans ce programme est "** Stockage des données reçues dans MongoDB ". En d'autres termes, selon les spécifications, serait-ce " Enregistrer les données reçues sans les manquer et les stocker pendant 3 mois **"?
Que peut-il se passer lorsque l'entrée dans la base de données échoue?
Je me demande si c'est la seule chose qui m'est venue à l'esprit (parce que c'est une heppoko, je suis désolé pour les aspects techniques).
Je pense que le débit est correct, mais contrairement à la machine de développement avec un processeur et une vitesse de disque relativement abondants, L'environnement d'exécution est Celeron 2,41 GHz et la mémoire est portée à 8 Go (améliorée) . Puisqu'il est également utilisé comme NAS, je pense que l'environnement est assez rude.
Sur la base de l'expérience précédente , on suppose que 2 Go seront inondés par jour. Lorsqu'il est converti en moyenne horaire, il est de 33 Mo / h, et au pic maximum, il est nécessaire de doubler, soit 66 Mo / h.
…… Hmm? Est-ce moins que ce à quoi je m'attendais? ?? Le calcul est-il encore une fois erroné? ?? Je vais le vérifier plus tard. Calculé comme 70 Mo / h, en supposant que les valeurs sont moyennées de manière facile à comprendre. Étant donné que la longueur moyenne des données JSON enregistrées dans Sqlite est de 7 000 octets, elle est de * 10 000 tweets / h *. …… vraiment? Je n'ai pas l'impression qu'il y a un trou quelque part ...
Pour le moment, j'ai décidé d'écrire un programme en utilisant PyMongo, en le laissant comme un chèque.
pymongotest1.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import MongoClient
Client = MongoClient() # Localhost,Aucun paramètre requis pour le port par défaut
db = Client.testdb #Nom de la base de données: testdb(Créé automatiquement)
Collection = db.testCollection #collection(table)Nom: testCollection
Collection.insert({"test": "Tesuto"})
...... Eh bien, est-ce que ça va? Tout en réfléchissant, exécutez après avoir installé pymongo. Si vous voulez voir le résultat sur l'interface graphique, il existe un outil appelé Robomongo . C'est gratuit pour une utilisation normale, alors installez-le et exécutez-le rapidement.
Contient les données enregistrées. Il semble que "_id" soit automatiquement attribué. Souhaitez-vous vous inscrire plus d'une fois la prochaine fois ...
for i in range(0, 10):
Collection.insert({"test": "Tesuto"})
J'ai pu m'inscrire. C'est plus facile que vous ne le pensez. Ensuite, j'insérerai Twitter Tweet JSON. Pour les données d'origine, les tweets stockés dans SQLite au moment de la première vérification sont correctement récupérés.
Collection.insert({"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Omis parce que c'est long)... })
NameError: name 'false' is not defined
J'ai une erreur. Si vous le lisez tel quel, faux signifie indéfini… mais c'est vrai. Il doit s'agir de JSON brut. Quand j'ai essayé google, j'ai trouvé une personne qui s'inquiétait pour la même chose immédiatement .
import json
#(Abréviation)
raw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Omis parce que c'est long)... }'''
json_object = json.loads(raw_string)
Collection.insert(json_object)
J'aimerais pouvoir faire quelque chose comme ça. Je vois, vous pouvez vous inscrire. Ensuite, le suivant est multiple.
raw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Omis parce que c'est long)... }'''
json_object = json.loads(raw_string)
for i in range(0, 10):
Collection.insert(json_object)
J'ai une erreur. Il semble que "pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection:", cela signifie donc que vous ne pouvez pas frapper exactement la même chose à plusieurs reprises.
for i in range(0, 10):
raw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Omis parce que c'est long)... }'''
json_object = json.loads(raw_string)
Collection.insert(json_object)
Si je faisais ça comme ça, ça fonctionnait. On a l'impression que l'identifiant est attribué au stade de json.loads () ... je pense.
Voyons maintenant à quelle vitesse cela va réellement. Le code de contrôle de vitesse est le suivant.
MongoSpeed.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import MongoClient
import json
import time #mesure du temps
Client = MongoClient()
db = Client.testdb
Collection = db.testCollection
start = time.time() #Commencer la mesure
for i in range(0, 10000): # 10,000 boucles
aw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Omis parce que c'est long)... }'''
json_object = json.loads(raw_string)
Collection.insert(json_object)
elapsed_time = time.time() - start #Calcul du temps écoulé en soustrayant la fin et le début de la mesure
print('Temps d'exécution:', elapsed_time * 1000 ,' [ms]')
Les données JSON sont un peu longues, environ 10 Ko. Il contient 4 URL d'image et des balises de hachage. La plus grande donnée acquise la dernière fois était de 25 Ko et la plus petite de 2 Ko. Est-ce un peu gros par rapport à la moyenne de 7 Ko? Placez les données. ** En d'autres termes, si le temps d'exécution de celui-ci est inférieur à 1 heure, il n'y a presque aucun problème. ** **
(Python) >Python .\MongoSpeed.py
Temps d'exécution: 11719.62308883667 [ms]
(Python) >
Quoi? (à suivre.)
Recommended Posts