[PYTHON] Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (3))

Bis zum letzten Mal

―― [x] Irgendwie sieht die Gegend um Twitter so aus, nicht wahr?

Was du tun musst

Die höchste Priorität auf der MongoDB-Seite in diesem Programm ist "** Speicherung empfangener Daten in MongoDB ". Mit anderen Worten, basierend auf den Spezifikationen, wäre es " Speichern Sie die empfangenen Daten ohne Verlust und speichern Sie sie für 3 Monate **"?

Ich werde die möglichen Situationen vorerst auflisten

Was kann passieren, wenn die Eingabe in die Datenbank fehlschlägt?

Ich frage mich, ob dies das einzige ist, was mir in den Sinn gekommen ist (weil es ein Heppoko ist, entschuldigen mich die technischen Aspekte).

  1. Die Person, die die Verbindung verliert, ist zwischen Localhosts, sodass Sie sich vielleicht nicht zu viele Sorgen machen müssen.
  2. Wenn die DB selbst ausfällt, muss ich über eine andere Gegenmaßnahme nachdenken, also habe ich diese Zeit bestanden.
  3. Ich denke, Sie können dem Formatfehler vertrauen, da es sich um die von Twitter gesendeten Daten handelt, solange sie ohne Verarbeitung eingefügt werden.
  4. Ich fürchte, ich bin tot, weil ich mit dem Prozess nicht Schritt halten kann.

Ich glaube, dass die Flussrate in Ordnung ist, aber im Gegensatz zu der Entwicklungsmaschine mit relativ hoher CPU- und Festplattengeschwindigkeit ist Die Ausführungsumgebung ist Celeron 2.41GHz und der Speicher wird auf 8 GB (erweitert) erhöht. Da es auch als NAS verwendet wird, finde ich die Umgebung ziemlich rau.

Basierend auf dem vorherigen Experiment wird angenommen, dass 2 GB pro Tag überflutet werden. Bei Umrechnung auf einen Stundendurchschnitt sind es 33 MB / h, und bei maximaler Spitze ist es erforderlich, sich zu verdoppeln, dh 66 MB / h.

…… Hmm? Ist es weniger als ich erwartet hatte? ?? Ist die Berechnung irgendwo wieder falsch? ?? Ich werde es später überprüfen. Berechnet mit 70 MB / h unter der Annahme, dass die Werte auf leicht verständliche Weise gemittelt werden. Da die durchschnittliche Länge der in SQLite gespeicherten JSON-Daten 7000 Byte beträgt, beträgt sie * 10.000 Tweets / h *. … Wirklich? Ich habe nicht das Gefühl, dass irgendwo ein Loch ist ...

Ich werde vorerst versuchen zu programmieren

Vorerst habe ich beschlossen, ein Programm mit PyMongo zu schreiben und es als Kontrolle zu belassen.

pymongotest1.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import MongoClient

Client = MongoClient()  # Localhost,Für den Standardport ist keine Einstellung erforderlich
db = Client.testdb      #DB-Name: testdb(Automatisch erstellt)
Collection = db.testCollection    #Sammlung(Tabelle)Name: testCollection

Collection.insert({"test": "Tesuto"})

...... Nun, ist das okay? Laufen Sie nach der Installation von Pymongo, während Sie nachdenken. Wenn Sie das Ergebnis auf der GUI anzeigen möchten, gibt es ein Tool namens Robomongo . Es ist für den normalen Gebrauch kostenlos, also installieren und schnell ausführen.

実行結果

Enthält die registrierten Daten. Es scheint, dass "_id" automatisch zugewiesen wird. Möchten Sie sich beim nächsten Mal mehr als einmal registrieren ...

for i in range(0, 10):
	Collection.insert({"test": "Tesuto"})

Ich konnte mich registrieren. Es ist einfacher als du denkst. Als nächstes werde ich Twitter Tweet JSON einfügen. Für die Originaldaten werden die zum Zeitpunkt der ersten Prüfung in SQLite gespeicherten Tweets entsprechend erfasst.

 Collection.insert({"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Weggelassen, weil es lang ist)... })
NameError: name 'false' is not defined

Ich habe einen Fehler bekommen. Wenn Sie es so lesen, wie es ist, bedeutet falsch undefiniert ..., aber das ist richtig. Es sollte rohes JSON sein. Als ich Google ausprobierte, fand ich sofort eine Person, die sich wegen der gleichen Sache Sorgen machte .

import json

#(Abkürzung)

raw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Weggelassen, weil es lang ist)... }'''
json_object = json.loads(raw_string)
Collection.insert(json_object)

Ich wünschte, ich könnte so etwas tun. Ich verstehe, Sie können sich registrieren. Dann ist als nächstes mehrere.

raw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Weggelassen, weil es lang ist)... }'''
json_object = json.loads(raw_string)

for i in range(0, 10):
	Collection.insert(json_object)

Ich habe einen Fehler bekommen. Es scheint, dass "pymongo.errors.DuplicateKeyError: E11000 Duplicate Key Error Collection:", was bedeutet, dass Sie nicht genau dasselbe wiederholen können.

for i in range(0, 10):
	raw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Weggelassen, weil es lang ist)... }'''
	json_object = json.loads(raw_string)

	Collection.insert(json_object)

Wenn ich es so gemacht habe, hat es funktioniert. Es fühlt sich an, als ob die ID in der Phase von json.loads () zugewiesen wird ... denke ich.

Geschwindigkeitsmessung

Nun wollen wir sehen, wie schnell es tatsächlich geht. Der Geschwindigkeitsprüfcode lautet wie folgt.

MongoSpeed.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import MongoClient
import json

import time    #Zeitmessung

Client = MongoClient()
db = Client.testdb
Collection = db.testCollection

start = time.time()   #Messung starten
for i in range(0, 10000):    # 10,000 Schleifen
	aw_string = r'''{"created_at":"Sat Sep 24 15:35:21 +0000 2016", ...(Weggelassen, weil es lang ist)... }'''
	json_object = json.loads(raw_string)
	Collection.insert(json_object)

elapsed_time = time.time() - start   #Berechnung der verstrichenen Zeit durch Subtrahieren des Endes und des Beginns der Messung
print('Ausführungszeit:', elapsed_time * 1000 ,' [ms]')

Die JSON-Daten sind etwas lang, ungefähr 10 KB. Es enthält 4 Bild-URLs und Hash-Tags. Die größten zuletzt erfassten Daten waren 25 KB und die kleineren 2 KB. Ist es etwas groß aus dem Durchschnitt von 7 KB? Daten platzieren. ** Mit anderen Worten, wenn die Ausführungszeit weniger als 1 Stunde beträgt, gibt es fast kein Problem. ** ** **

(Python) >Python .\MongoSpeed.py

Ausführungszeit: 11719.62308883667 [ms]

(Python) >

Was? (Fortsetzung folgt.)

Recommended Posts

Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (3))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (1))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (2))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (5))
Experimentieren Sie, um Tweets für eine lange Zeit (unmittelbar vor der Ausführung) zu sammeln.
Experimentieren Sie, um Tweets über einen längeren Zeitraum zu sammeln (Aggregation und Bestätigung des Inhalts).
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Eine Lernmethode für Anfänger zum Erlernen der Zeitreihenanalyse
Ich möchte vorerst eine Docker-Datei erstellen.
[Profil] Identifizieren Sie, wo das Programm lange dauert (google-perftool)
[Python] Es war sehr praktisch, die Python-Klasse für das ROS-Programm zu verwenden.
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Einführung in discord.py (1. Tag) -Preparation for discord.py-
Eine einfache Problemumgehung für Bots, um zu versuchen, Tweets mit demselben Inhalt zu veröffentlichen
Das Herunterfahren von CentOS 7 mit LVM-Konfiguration dauert lange.