[검증] levelDB는 데이터량이 증가하면 데이터 등록에 시간이 걸리는가? ?
신경이 쓰인 것
ethereum을 프라이빗 블록체인으로 사용할 경우 데이터량이 늘어나면 geth(go-ethereum) 내에서 사용되고 있는 levelDB에 데이터 등록에 시간이 걸리게 된다는 기사를 발견했다.
그런 일이 있어. 라고 생각해 실제로 계측해 보았다
했던 일
Key는 처리 번호, Value에 적당한 데이터라고 하는 적당한 데이터를 100만건 등록한다.
100건마다 소요한 처리 시간을 계측하여 처리 시간이 증가하고 있는지 확인했다.
levelDB뿐만 아니라 마침내 mongoDB에서 시도했습니다.
levelDB 처리 시간
아래 코드로 데이터 등록
measurement_leveldb.pyimport 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
처리 결과
mongoDB 처리 시간
아래 코드로 측정
measurement_mongodb.pyfrom 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의 환경을 만드는 것이 어색했기 때문에 파이썬으로 시도했습니다.
이 근처도 영향이 있을지도 모르기 때문에 계속 조사해 볼까라고 생각합니다.
levelDB에 대해 조금만 지식을 얻을 수 있었기 때문에 좋았습니다.
Reference
이 문제에 관하여([검증] levelDB는 데이터량이 증가하면 데이터 등록에 시간이 걸리는가? ?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bc_yuuuuuki/items/9f00ed3a27b843cbaa3d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Key는 처리 번호, Value에 적당한 데이터라고 하는 적당한 데이터를 100만건 등록한다.
100건마다 소요한 처리 시간을 계측하여 처리 시간이 증가하고 있는지 확인했다.
levelDB뿐만 아니라 마침내 mongoDB에서 시도했습니다.
levelDB 처리 시간
아래 코드로 데이터 등록
measurement_leveldb.pyimport 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
처리 결과
mongoDB 처리 시간
아래 코드로 측정
measurement_mongodb.pyfrom 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의 환경을 만드는 것이 어색했기 때문에 파이썬으로 시도했습니다.
이 근처도 영향이 있을지도 모르기 때문에 계속 조사해 볼까라고 생각합니다.
levelDB에 대해 조금만 지식을 얻을 수 있었기 때문에 좋았습니다.
Reference
이 문제에 관하여([검증] levelDB는 데이터량이 증가하면 데이터 등록에 시간이 걸리는가? ?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bc_yuuuuuki/items/9f00ed3a27b843cbaa3d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
아래 코드로 측정
measurement_mongodb.py
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의 환경을 만드는 것이 어색했기 때문에 파이썬으로 시도했습니다.
이 근처도 영향이 있을지도 모르기 때문에 계속 조사해 볼까라고 생각합니다.
levelDB에 대해 조금만 지식을 얻을 수 있었기 때문에 좋았습니다.
Reference
이 문제에 관하여([검증] levelDB는 데이터량이 증가하면 데이터 등록에 시간이 걸리는가? ?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bc_yuuuuuki/items/9f00ed3a27b843cbaa3d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
읽은 기사의 상세한 환경이나 데이터량이 불명했기 때문에, 참고로 한 기사의 내용이 사실인지 어떤지까지는 불명인 채입니다.
또한, geth는 당연히 go 언어이고, 나는 go의 환경을 만드는 것이 어색했기 때문에 파이썬으로 시도했습니다.
이 근처도 영향이 있을지도 모르기 때문에 계속 조사해 볼까라고 생각합니다.
levelDB에 대해 조금만 지식을 얻을 수 있었기 때문에 좋았습니다.
Reference
이 문제에 관하여([검증] levelDB는 데이터량이 증가하면 데이터 등록에 시간이 걸리는가? ?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bc_yuuuuuki/items/9f00ed3a27b843cbaa3d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)