체인의정석

블록체인 데이터 이전 시키기, Mysql 데이터 다른 파일이름에 따른 반복문 쿼리와 시간 측정 본문

개발/database

블록체인 데이터 이전 시키기, Mysql 데이터 다른 파일이름에 따른 반복문 쿼리와 시간 측정

체인의정석 2021. 8. 23. 16:00
728x90
반응형

이더리움 노드에 있는 데이터를 S3에서 DB로 이전 시키기 위하여 시험삼아 몇개의 데이터 파일을 옮기고 걸린 시간도 측정하는 업무를 받았다.

 

다음과 같이 S3에 있는 파일이 0000000000001 , 0000000000002 라고 되어 있을 때

padStart를 사용하여 숫자를 0으로 채워줘서 파일이름을 만들어 주고 반복문을 돌려서 각 데이터베이스 쿼리에 로드를 시켜줄 수 있다.

 

또한 performace.now()를 아래와 같이 사용하여 각 실행별로 시간이 얼마나 걸리는지도 측정할 수 있다.

  async loadFromS3(_idx: string) {
    const sql = `쿼리문 ${_idx}`
    var t0 = performance.now()
    await this.database.query(sql,null);
    var t1 = performance.now()
    console.log(`LoadFromS3 took ${t1 - t0} milliseconds for ${_idx}`);
  }
  
  async run (initIndex : number , endIndex : number) {
    while (initIndex < endIndex) {
      const fileIndex: string = String(initIndex).padStart(12, '0');
      await this.loadFromS3(fileIndex)
      initIndex++;
    }
  }

그 결과 milliseconds 단위로 실행 시간이 나오게 되었다. 

 

생각보다 시간이 많이 걸리게 되었는데 여러개의 노드를 띄우고 실행을 해도 DB가 병목이기 때문에 더 빨라지진 않을 것이라고 한다.

해당 클라우드에 데이터가 구글 빅쿼리로 검색할 수 있어도 쿼리를 돌리면 그게 다 돈이 나오기 때문에 결국 자체적인 DB로 옮겨서 사용하게 된다. 이렇게 자체 DB를 구축해서 머신러닝을 돌려야 하는 상황에서는 데이터를 적재 시켜놓는게 프로젝트의 큰 병목인것 같다. 

728x90
반응형
Comments