안녕하세요.
jongeun 입니다.
스티밋 관련 데이터를 활용한 서비스 개발에서 퍼포먼스를 고려해 봐야합니다.
저도 많이 다뤄보지는 않아서 정보가 빈약하거나 틀릴 수도 있으나, 이 부분은 댓글로 남겨주시면 감사하겠습니다.
SteemData VS steem-js
스팀 블록체인을 파싱하여 포스트, 계정, 커멘트 등을 데이터베이스화 한
@furion,
@cass 님의 주도하는 프로젝트 입니다.
자세한 내용은 해당 링크를 참조하세요. https://steemdata.com/
노드js 모듈로서 스팀 공식 프로젝트 입니다.
자세한 내용은 해당 링크를 참조하세요. https://github.com/steemit/steem-js
db.getCollection('Accounts').find({name:{$in: [ 'ned',
'dan']}})
steem.api.getAccounts(['ned', 'dan'], function(err, response){
console.log(err, response);
});
db.getCollection('Posts').find({author:'jongeun', permlink:'5nxotp'})
steem.api.getContent('jongeun', '5nxotp', function(err, response){
console.log(err, response);
});
db.getCollection('AccountOperations').find({type:'vote', account:'jongeun'})
steem.api.getAccountVotes('jongeun', function(err, result) {
console.log(err, result);
});
스팀데이터 3.96 초
스팀jS 1.48 초
스팀데이터 0.33초
스팀jS 1.49초
스팀데이터 0.66초
스팀jS 2.18초
전반적으로 스팀데이터가 더 빠르네요.
하지만, 왜 특정 계정 정보 조회는 스팀데이터가 느린 것일까요?
저도 몽고DB 성능에 대한 부분은 잘 알지 못하여, 여러 가지 경우를 가지고 테스트를 해보았습니다.
앞선 방식에서는 ['ned', 'dan'] 2명의 사용자를 조회했습니다.
이번에는 30명의 사용자를 추가하여 아래오 같이 조회를 해보았습니다.
$in : {[user1, user2, ... user29, user 30]}
결과는 다음과 같습니다.
스팀데이터 7.53초
스팀jS 2.5초
$in 보다는 $or가 빠르지 않을까? 라는 생각을 하고 아래와 같이 쿼리를 변경해보았습니다.
{$or:[ {name:user1, {name:user2, ... {name:user30}]}
결과는 9.11초 입니다.
ㅜㅜ 좌절이네요.
몇 가지 경우를 가지고 테스트를 해보았습니다.
아직 결론을 내리기엔 부족한 정보이지만, 제가 생각하기엔 스팀데이터와 스팀js를 아래의 상황에서 선택해서 사용하는 것이 좋다고 판단됩니다.
이상으로 포스트를 마치겠습니다.