가입한지는 얼마 되지 않았지만, 지금 스팀잇에 관련하여 준비해보고 있는 프로젝트가 하나 있습니다. 웹앱 기반인지라, 스팀잇의 최근글, 인기글등을 실시간으로 뽑아내야하는 문제에 대해 여러가지 시스템 디자인을 적용해보고 있는 중입니다.
가장 우선 접근했던것은 Javascript library로 공개되어 있는 steem.js입니다.
steem-js GIT
Steemit API Reference
일단 열악한 documentation이 눈에 띄었지만, 괜찮습니다, 스팀잇은 아직 베타서비스이고, API라도 열어준게 얼마나 감사한 일입니까. parameter가 채 정의되지 않은 method들을 실행해보며 실시간으로 스팀잇 웹과 동일한 백데이터가 나옴에 감탄을 했습니다.
"SteemJS 장점: 다양한 실시간데이터, 통계데이터를 스티밋과 동일하게 받아올 수 있습니다."
이를 바로 웹앱에 바로 적용 해보고자 몇가지 RestfulAPI method들을 구현하여 테스트를 해봤었습니다. 리스폰스당 10초 이상되는 경우가 비일비재합니다. 게다가 리턴되는 데이터는 어마무시합니다.
"SteemJS 단점: 리스폰스 데이터가 너무 크고, 그로인해 속도가 너무 느립니다"
하나의 예로, 지금 life카테고리에서 trending 에 올라와있는 30개의 post를 로드해봅니다. 10.9초 정도의 시간이 걸렸고, 데이터 사이즈는 1.7MB정도 됩니다. 동일 카테고리에서 new에 올라와있는 30개의 post를 로드해봅니다. 그나마 빠르게 2.4초만에 응답하고, 111KB크기의 아까의 1/10도 안되는 크기입니다.
데이터를 살펴보니, API에서 리턴하는 데이터는 그야말로 "몽땅"입니다. post에 관련된 정보뿐만아니라 글 하나마다 voting한 모든 voter의 id, weight, percentage, reputation, rshare, time을 함께 전달해주고 있습니다. 물론 좋은 데이터이긴 하지만, voting이 수백개 되는 데이터의 경우 그만큼 크기가 커질수밖에 없지요.
아쉽게도 api요청시에 원하는 정보만을 리턴해주도록 parameter를 설정하는 법을 찾진 못했습니다. 이 때문에 실시간 복잡 다양한 연산을 하기 위해 api를 수번 호출하려던 방식은 현실적으로 어렵다는 판단에 이르렀습니다.
여러가지 리서치 끝에 steemsql라는 mssql기반의 DB서비스를 찾게 되었습니다.
SteemSQL
MSSQL로 steem blockchaing data를 캐싱하는 서비스인것으로 보였는데, 생각보다 가용한 정보가 많아보였습니다. sync gap도 현재는 2300초 정도로 30분~40분정도로, 생각하는 프로젝트의 목적에는 큰 문제는 없어보였습니다.
"SteemSQL 장점: 무엇보다도 속도와, 복합 쿼리 연산이 가능한 점이 장점입니다"
"SELECT * FROM TABLE" 형태의 쿼리를 사용할때는 steem.js 대비 장점이 없습니다. "SELECT author, permlink
FROM TABLE"과 같이 원하는 컬럼만을 취해서 쿼리를 하면 수배 이상 빨라지며, 가벼워집니다.
무엇보다도 RDB의 백미는 Join, nested query, aggregate function이 겠지요. 복합연산을 쿼리하나만으로 할수 있는 장점이 있습니다. 그만큼 요청의 수도 줄어들고, 수행시간도 최적화가 가능합니다. 예를 들어 "한사람의 글에 보팅에 가장 기여를 많이 한 사람", "내가 팔로우하는 사람중에 나에게 보팅을 한번도 하지 않은 사람"등을 sql만으로도 해결이 가능하다는 장점이 있지요
너무 맘에 들어 밤새 이런저런 SQL을 짜보고 있는 중입니다.
"SteemSQL 단점: 아쉽게도, 유료입니다 (일일:1SBD, 월간:10SBD)"
저도 현재 지갑에 1SBD도 없는 상황이라, SBD를 보유한 지인에게 시세대로 값을 치르고, 구독을 하게되었습니다. (결제방법은 사이트에 나와있고, 30분안에 계정이 생성되었습니다) 유료인지라, 망설여지긴했었지만, 서비스 퀄리티를 보고 돈아깝지 않다고 느꼈고, 되려 유료로 운영이 되야 안정적이고 장기적으로 운영이 가능할 것이라는 생각이 듭니다.
혹여나 스팀잇 백데이터에 고민하고 있는 분들은 SteemSQL도 한번 고려해보시면 좋겠습니다.
짱짱맨 호출로 왔습니다!
한주 수고하세요
코인거래소인 고팍스에서 멋진 이벤트중이네요!
https://steemit.com/kr/@gopaxkr/100-1-1
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
보팅 감사드립니다 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
후기 꼭 부탁드립니다 :) 궁금하네요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
관심 감사합니다. 현재 여러가지 써보는 중인데, SQL만 이용해도 유용한 기능을 여러가지 만들수 있을것 같습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit