[PYTHON] [Überprüfung] Nimmt levelDB Zeit zum Registrieren von Daten, wenn die Datenmenge zunimmt? ??

Was mich interessiert hat

Ich habe einen Artikel gefunden, der besagt, dass es einige Zeit dauert, die Daten in der in geth (go-ethereum) verwendeten levelDB zu registrieren, wenn die Datenmenge bei Verwendung von Ethereum als private Blockchain zunimmt. Da ist so etwas. Ich habe es tatsächlich gemessen

Was ich getan habe

Der Schlüssel registriert 1 Million Elemente, die zu geeignet sind, z. B. geeignete Daten für die Verarbeitungsnummer und den Wert. Die für jeweils 100 Fälle erforderliche Verarbeitungszeit wurde gemessen und es wurde bestätigt, ob die Verarbeitungszeit zunahm.

Ich habe nicht nur levelDB, sondern auch mongoDB ausprobiert

LevelDB-Verarbeitungszeit

Registrieren Sie Daten mit dem folgenden Code

import time
import leveldb

# Testdaten: 750 Bytes
 inputData = '{"_ id": "ObjectId (\ 5e3b4dd825755df3f15a2d17 \") "," coediting ": False," comment_count ": 0," created_at ":" 2020-02-05T20: 20: 10 + 09: 00 ", "Gruppe": Keine, "ID": "6ed1eec1d6fba127a863", "Likes_Count": 0, "Privat": False, "Reactions_Count": 0, "Tags": [{"Name": "Python", "Versionen": []}, {"Name": "MongoDB", "Versionen": []}, {"Name": "Python3", "Versionen": []}, {"Name": "Pymongo", "Versionen" : []}], "title": "Betrieb von mongoDB mit Python-Part 6: aggreg-", "updated_at": "2020-02-05T20: 20: 10 + 09: 00", "url": "https://qiita.com/bc_yuuuuuki/items/6ed1eec1d6fba127a863", "page_views_count": 96, "tag1": "Python", "tag2": "MongoDB", "tag3": "Python3", "tag4": "pymongo", "tag5": "", "tag_list": ["Python", "MongoDB", "Python3", "pymongo"], "stock_count": 0} '

start = time.time()

db = leveldb.LevelDB("measurement_test")

start = time.time()

for i in range(1,1000001):
    db.Put(i.to_bytes(4, 'little'), inputData.encode('utf-8'))
    if i % 100 == 0:
        end = time.time()
        print("{0}:{1}".format(i,end-start))
        start = end

Verarbeitungsergebnis levelDB.png

Bearbeitungszeit von mongoDB

Gemessen mit dem folgenden Code

from mongo_sample import MongoSample
import time

mongo = MongoSample("db","measurement")

# Testdaten: 750 Bytes
 inputData = '{"_ id": "ObjectId (\ 5e3b4dd825755df3f15a2d17 \") "," coediting ": False," comment_count ": 0," created_at ":" 2020-02-05T20: 20: 10 + 09: 00 ", "Gruppe": Keine, "ID": "6ed1eec1d6fba127a863", "Likes_Count": 0, "Privat": False, "Reactions_Count": 0, "Tags": [{"Name": "Python", "Versionen": []}, {"Name": "MongoDB", "Versionen": []}, {"Name": "Python3", "Versionen": []}, {"Name": "Pymongo", "Versionen" : []}], "title": "Betrieb von mongoDB mit Python-Part 6: aggreg-", "updated_at": "2020-02-05T20: 20: 10 + 09: 00", "url": "https://qiita.com/bc_yuuuuuki/items/6ed1eec1d6fba127a863", "page_views_count": 96, "tag1": "Python", "tag2": "MongoDB", "tag3": "Python3", "tag4": "pymongo", "tag5": "", "tag_list": ["Python", "MongoDB", "Python3", "pymongo"], "stock_count": 0} '

start = time.time()
path = "measurement.txt"
with open(path, "w") as out:
    for i in range(1,1000001):
        mongo.insert_one({str(i):inputData})
        if i % 100 == 0:
            end = time.time()
            out.write("{0}:{1}\n".format(i,end-start))
            start = time.time()

Verarbeitungsergebnis mongoDB.png

Prüfergebnis

In Bezug auf die Verteilung der Verarbeitungsergebnisse sind sowohl levelDB als auch mongoDB im Allgemeinen in einer bestimmten Verarbeitungszeitzone verteilt. Es gibt einige, die eine hervorragende Verarbeitungszeit erfordern, aber da es nur wenige Fälle gibt, kann nicht gesagt werden, dass sich die Schreibgeschwindigkeit verschlechtert hat.

Wenn sich die Schreibgeschwindigkeit in Abhängigkeit von der Datenmenge verlangsamt, steigt die Verteilung nach rechts oder zeichnet eine Kurve nach rechts oben. Diese Überprüfung führte jedoch nicht zu einer solchen Verteilung.

Impressionen

Da die detaillierte Umgebung und Datenmenge des gelesenen Artikels unbekannt war, bleibt unklar, ob der Inhalt des Artikels, auf den Bezug genommen wird, wahr ist. Außerdem ist geth natürlich eine Go-Sprache, und ich fand es umständlich, eine Go-Umgebung zu erstellen, also habe ich es mit Python versucht. Dieser Bereich kann auch Auswirkungen haben, daher denke ich, dass ich weiter nachforschen werde.

Ich bin froh, dass ich ein wenig über levelDB gelernt habe.

Recommended Posts

[Überprüfung] Nimmt levelDB Zeit zum Registrieren von Daten, wenn die Datenmenge zunimmt? ??
Beispiel, was zu tun ist, wenn das Beispielskript nicht funktioniert (OpenCV-Python)
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Es ist Zeit, ernsthaft über die Definition und die Fähigkeiten von Datenwissenschaftlern nachzudenken
[Einführung in das SIR-Modell] Prognostizieren Sie die Endzeit jedes Landes mit der COVID-19-Datenanpassung ♬
[Einführung in das logarithmische Diagramm] Prognostizieren Sie die Endzeit jedes Landes anhand des logarithmischen Diagramms der Infektionszahldaten ♬
So berechnen Sie die Summe oder den Durchschnitt von Zeitreihen-CSV-Daten in einem Augenblick
Grep, damit grep zum Zeitpunkt von grep nicht angezeigt wird
Berechnen des aus ABC134-D gelernten Rechenaufwands
[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬
Wenn Sie die Anfangsdaten von Django mit Relationen registrieren möchten
Die Geschichte des Kopierens von Daten von S3 auf Googles TeamDrive
Überprüfen Sie, ob der Docker-Container keine Verbindung zum Internet herstellt
Die minimale Methode, die beim Aggregieren von Daten mit Pandas zu beachten ist
Ich habe die Daten von Raspberry Pi an GCP gesendet (kostenlos)
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Verwalten Sie die Überlappung, wenn Sie ein Streudiagramm mit einer großen Datenmenge zeichnen (Matplotlib, Pandas, Datashader).
Lernen Sie Buchhaltungsdaten kennen und versuchen Sie, Konten aus dem Inhalt der Beschreibung vorherzusagen, wenn Sie Journale eingeben