SteemData vs Steem-js의 간단한 성능 비교

in #kr-dev7 years ago

안녕하세요.
jongeun 입니다.

스티밋 관련 데이터를 활용한 서비스 개발에서 퍼포먼스를 고려해 봐야합니다.
저도 많이 다뤄보지는 않아서 정보가 빈약하거나 틀릴 수도 있으나, 이 부분은 댓글로 남겨주시면 감사하겠습니다.

SteemData VS steem-js

  • SteemData(이하 스팀데이터)

스팀 블록체인을 파싱하여 포스트, 계정, 커멘트 등을 데이터베이스화 한 @furion, @cass 님의 주도하는 프로젝트 입니다.
자세한 내용은 해당 링크를 참조하세요. https://steemdata.com/

  • steem-js(이하 스팀JS)

노드js 모듈로서 스팀 공식 프로젝트 입니다.
자세한 내용은 해당 링크를 참조하세요. https://github.com/steemit/steem-js

성능 측정 방법

  • 데이터 요청 시간에서 데이터 출력 시간까지 소요된 시간을 측정
  • 측정은 총 5회를 하고, 평균값을 이용하여 비교
  • 측정은 특정 사용자 조회, 특정 포스트 조회, 특정 사용자의 보트 히스토리 조회 3개 항목을 비교

특정 계정 정보 조회

  • 스팀데이터 코드
db.getCollection('Accounts').find({name:{$in: [ 'ned',
                 'dan']}})
  • 스팀JS 코드
steem.api.getAccounts(['ned', 'dan'], function(err, response){
    console.log(err, response);
});

특정 포스트 조회

  • 스팀데이터 코드
db.getCollection('Posts').find({author:'jongeun', permlink:'5nxotp'})
  • 스팀JS 코드
steem.api.getContent('jongeun', '5nxotp',  function(err, response){
    console.log(err, response);
});

특정 사용자의 보트 히스토리 조회

  • 스팀데이터 코드
db.getCollection('AccountOperations').find({type:'vote', account:'jongeun'})
  • 스팀JS 코드
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를 사용해보자

$in 보다는 $or가 빠르지 않을까? 라는 생각을 하고 아래와 같이 쿼리를 변경해보았습니다.

{$or:[ {name:user1, {name:user2, ... {name:user30}]}

결과는 9.11초 입니다.
ㅜㅜ 좌절이네요.

몇 가지 경우를 가지고 테스트를 해보았습니다.
아직 결론을 내리기엔 부족한 정보이지만, 제가 생각하기엔 스팀데이터와 스팀js를 아래의 상황에서 선택해서 사용하는 것이 좋다고 판단됩니다.

  • 스팀js에서 제공하는 기능이라면, 스팀데이터를 이용해서 구현해보고 성능을 평가후 하나를 선택
  • 스팀js에서 제공하지 않는 기능이라면, 선택의 여지 없이 스팀데이터를 사용

이상으로 포스트를 마치겠습니다.

Sort:  

생각보다 속도가 늦네요~ 좋은 정보 잘 보고 업보팅하고 갑니다.

개인적인 의견을 드리면, steem.js에서 stream을 열어놓고 필요한 데이터를 로컬DB에 저장해서 사용하는 것이 제일 빠른 것 같습니다. 해보시고 괜찮으시면 저도 서버 계정 하나만...^^

좋은 의견 감사합니다. 스팀js에서 스팀을 열어놓는다는 것이 어떤 것을 의미하는지 이해가 안갑니다. 혹시 자세한 설명 및 관련 예제가 있을까요?

웹 서비스측면에서 둘다 만족할만한 속도는 아니네요. 잘 보았습니다

네. 영~~ 만족스럽지 않습니다.ㅠㅠ

흥미롭네요 .. 저도 개발분야에서 일하는데
오픈소스 좀 파 보고 이것저것 시도해봐야겠습니다.

여러번 콜해서 평균 속도를 측정하신건가요?

많이는 안했는데, 총 5회 콜의 평균 값입니다.

좋은정보 감사합니다.
주말에 소스 좀 훑어봐야겠군요 ^^