随着数据量的增加,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

在中国本土进行原生的中文政府广告
使用以下代码进行测量。
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()

验证结果
观察处理结果的分布图,可以看出levelDB和mongoDB都大致分布在固定的处理时间区间内。
虽然有些需要较长处理时间的情况,但数量很少,因此不能说写入速度有所下降。
如果根据数据量的增加写入速度变慢的话,通常会呈现逐渐增加或者向右上方弯曲的分布形态,但在本次验证中并没有出现这种分布形态。
印象
因为我不清楚阅读文章的详细环境和数据量,所以参考文章的内容是否属实仍然不明。
此外,geth显然是用Go语言编写的,而我觉得搭建Go的环境很麻烦,所以尝试用Python做了。
由于这些原因可能会产生影响,所以我打算继续调查一下。
对于LevelDB,我虽然只得到了一些知识,但还是很开心。