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é
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
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
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
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.
É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