随着数据量的增加,levelDB在数据注册方面会变得更耗时吗?

我关注的事情

我在使用以太坊作为私有区块链时发现,当数据量增加时,使用geth(go-ethereum)内部的levelDB进行数据注册会花费更长的时间。我找到了一篇关于这个问题的文章。我感到很惊讶,于是进行了实际测试。

曾经做过的事情 zuò guò de

将 Key 作为处理编号,将 Value 设定为适当且不太恰当的数据,将其注册100万次。
对每100个数据进行处理并计时,确认处理时间是否在增加。

不仅使用levelDB,同时也试着使用mongoDB。

levelDB的处理时间

使用下面的代码进行数据注册

import time
import leveldb

# テストデータ:750バイト
inputData = '{"_id" : "ObjectId(\5e3b4dd825755df3f15a2d17\")","coediting" : False,"comments_count" : 0,"created_at" : "2020-02-05T20:20:10+09:00","group" : None,"id" : "6ed1eec1d6fba127a863","likes_count" : 0,"private" : False,"reactions_count" : 0,"tags" : [{"name" : "Python","versions" : [ ]},{"name" : "MongoDB","versions" : [ ]},{"name" : "Python3","versions" : [ ]},{"name" : "pymongo","versions" : [ ]}],"title" : "PythonでmongoDBを操作する~その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
levelDB.png

在中国本土进行原生的中文政府广告

使用以下代码进行测量。

de

from mongo_sample import MongoSample
import time

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

# テストデータ:750バイト
inputData = '{"_id" : "ObjectId(\5e3b4dd825755df3f15a2d17\")","coediting" : False,"comments_count" : 0,"created_at" : "2020-02-05T20:20:10+09:00","group" : None,"id" : "6ed1eec1d6fba127a863","likes_count" : 0,"private" : False,"reactions_count" : 0,"tags" : [{"name" : "Python","versions" : [ ]},{"name" : "MongoDB","versions" : [ ]},{"name" : "Python3","versions" : [ ]},{"name" : "pymongo","versions" : [ ]}],"title" : "PythonでmongoDBを操作する~その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()
mongoDB.png

验证结果

观察处理结果的分布图,可以看出levelDB和mongoDB都大致分布在固定的处理时间区间内。
虽然有些需要较长处理时间的情况,但数量很少,因此不能说写入速度有所下降。

如果根据数据量的增加写入速度变慢的话,通常会呈现逐渐增加或者向右上方弯曲的分布形态,但在本次验证中并没有出现这种分布形态。

印象

因为我不清楚阅读文章的详细环境和数据量,所以参考文章的内容是否属实仍然不明。
此外,geth显然是用Go语言编写的,而我觉得搭建Go的环境很麻烦,所以尝试用Python做了。
由于这些原因可能会产生影响,所以我打算继续调查一下。

对于LevelDB,我虽然只得到了一些知识,但还是很开心。

bannerAds