[PYTHON] [Vérification] LevelDB prend-il du temps pour enregistrer les données lorsque la quantité de données augmente? ??

Ce qui m'intéressait

J'ai trouvé un article selon lequel lorsque la quantité de données augmente lors de l'utilisation d'ethereum en tant que blockchain privée, il faut du temps pour enregistrer les données dans le levelDB utilisé dans geth (go-ethereum). Il y a une telle chose. Je l'ai mesuré

Ce que j'ai fait

La clé enregistre 1 million d'éléments trop appropriés, tels que les données appropriées pour le numéro de traitement et la valeur. Le temps de traitement requis pour chaque 100 cas a été mesuré et il a été confirmé si le temps de traitement augmentait.

J'ai essayé non seulement levelDB mais aussi mongoDB

temps de traitement levelDB

Enregistrer les données avec le code suivant

import time
import leveldb

# Données de test: 750 octets
 inputData = '{"_ id": "ObjectId (\ 5e3b4dd825755df3f15a2d17 \") "," coediting ": False," comments_count ": 0," created_at ":" 2020-02-05T20: 20: 10 + 09: 00 ", "group": Aucun, "id": "6ed1eec1d6fba127a863", "likes_count": 0, "private": False, "reactions_count": 0, "tags": [{"name": "Python", "versions": []}, {"name": "MongoDB", "versions": []}, {"name": "Python3", "versions": []}, {"name": "pymongo", "versions" : []}], "title": "Fonctionnement de mongoDB avec Python-Part 6: aggregate-", "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"], "stocks_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

Résultat du traitement levelDB.png

temps de traitement de mongoDB

Mesuré avec le code suivant

from mongo_sample import MongoSample
import time

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

# Données de test: 750 octets
 inputData = '{"_ id": "ObjectId (\ 5e3b4dd825755df3f15a2d17 \") "," coediting ": False," comments_count ": 0," created_at ":" 2020-02-05T20: 20: 10 + 09: 00 ", "group": Aucun, "id": "6ed1eec1d6fba127a863", "likes_count": 0, "private": False, "reactions_count": 0, "tags": [{"name": "Python", "versions": []}, {"name": "MongoDB", "versions": []}, {"name": "Python3", "versions": []}, {"name": "pymongo", "versions" : []}], "title": "Fonctionnement de mongoDB avec Python-Part 6: aggregate-", "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"], "stocks_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()

Résultat du traitement mongoDB.png

résultat de l'inspection

En regardant la distribution des résultats de traitement, levelDB et mongoDB sont généralement distribués dans un certain fuseau horaire de traitement. Il y en a qui nécessitent un temps de traitement exceptionnel, mais comme il n'y a que quelques cas, on ne peut pas dire que la vitesse d'écriture s'est détériorée.

Si la vitesse d'écriture ralentit en fonction de la quantité de données, la distribution montera vers la droite ou dessinera une courbe vers le coin supérieur droit, mais cette vérification n'a pas abouti à une telle distribution.

Impressions

Étant donné que l'environnement détaillé et la quantité de données de l'article lu étaient inconnus, il n'est pas certain que le contenu de l'article en question soit vrai. De plus, geth est bien sûr un langage go, et j'ai trouvé gênant de créer un environnement go, alors je l'ai essayé avec python. Ce domaine peut également avoir un impact, alors je pense que je vais continuer à enquêter.

Je suis content d'avoir un peu de connaissances sur levelDB.

Recommended Posts

[Vérification] LevelDB prend-il du temps pour enregistrer les données lorsque la quantité de données augmente? ??
Exemple de ce qu'il faut faire lorsque l'exemple de script ne fonctionne pas (OpenCV-Python)
Je voulais juste extraire les données de la date et de l'heure souhaitées avec Django
Il est temps de réfléchir sérieusement à la définition et aux compétences des data scientists
[Introduction au modèle SIR] Prédire l'heure de fin de chaque pays avec l'ajustement des données COVID-19 ♬
[Introduction au graphique logarithmique] Prédire l'heure de fin de chaque pays à partir du graphique logarithmique des données sur le nombre d'infections ♬
Comment calculer la somme ou la moyenne des données csv de séries chronologiques en un instant
Grep pour que grep n'apparaisse pas au moment de grep
Comment calculer la quantité de calcul appris de ABC134-D
[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬
Lorsque vous souhaitez enregistrer les données initiales de Django avec des relations
L'histoire de la copie de données de S3 vers TeamDrive de Google
Vérifier quand le conteneur Docker ne se connecte pas à Internet
La méthode minimale à retenir lors de l'agrégation de données avec Pandas
J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Gérez le chevauchement lors du dessin d'un diagramme de dispersion avec une grande quantité de données (Matplotlib, Pandas, Datashader)
Apprenez les données comptables et essayez de prédire les comptes à partir du contenu de la description lors de la saisie des journaux