안녕하세요.
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에서 제공하지 않는 기능이라면, 선택의 여지 없이 스팀데이터를 사용
이상으로 포스트를 마치겠습니다.
생각보다 속도가 늦네요~ 좋은 정보 잘 보고 업보팅하고 갑니다.
개인적인 의견을 드리면, steem.js에서 stream을 열어놓고 필요한 데이터를 로컬DB에 저장해서 사용하는 것이 제일 빠른 것 같습니다. 해보시고 괜찮으시면 저도 서버 계정 하나만...^^
좋은 의견 감사합니다. 스팀js에서 스팀을 열어놓는다는 것이 어떤 것을 의미하는지 이해가 안갑니다. 혹시 자세한 설명 및 관련 예제가 있을까요?
웹 서비스측면에서 둘다 만족할만한 속도는 아니네요. 잘 보았습니다
네. 영~~ 만족스럽지 않습니다.ㅠㅠ
흥미롭네요 .. 저도 개발분야에서 일하는데
오픈소스 좀 파 보고 이것저것 시도해봐야겠습니다.
여러번 콜해서 평균 속도를 측정하신건가요?
많이는 안했는데, 총 5회 콜의 평균 값입니다.
좋은정보 감사합니다.
주말에 소스 좀 훑어봐야겠군요 ^^