일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- chainlink 설명
- ethers v6
- rust 기초
- ethers typescript
- nestjs 튜토리얼
- 스마트컨트렉트프록시
- 스마트컨트렉트 예약어 함수이름 중복
- 러스트 기초
- multicall
- 스마트컨트렉트테스트
- nest.js설명
- 러스트 기초 학습
- 컨트렉트 배포 자동화
- ethers
- 스마트 컨트렉트 함수이름 중복
- 체인의정석
- ambiguous function description
- 프록시배포구조
- 러스트기초
- Vue
- Vue.js
- ethers type
- 깃허브명령어
- ethers websocket
- vue기초
- SBT표준
- 머신러닝기초
- 컨트렉트 동일한 함수이름 호출
- git rebase
- 스마트컨트렉트 함수이름 중복 호출
- Today
- Total
체인의정석
큰 규모의 서비스에서의 백엔드 최적화 방안들 본문
1. 부하 발생시 node.js의 insperctor 사용해서 체크하기
node.js의 inspector를 다음과 같이 사용하고 접속할 시 inspector가 뜨게 되는데 여기서 메모리 누수 등을 체크할 수 있다.
node inspect node bin/www
//127.0.0.1:9229 접속
https://nodejs.org/ko/docs/guides/debugging-getting-started/
2. sequilze, sequilze 쿼리 등은 사용 최소화 하기
sequilze를 사용하게 되면 db connection을 자동으로 관리하게 되는데 mutex등을 사용해서 각 프로세스에 분리를 하게 될 시 connection이 잘 끊기지 않는 에러가 발생한다. 따라서 connection을 직접 끄는 구조로 가는 것이 더 유리히다.
sequilze 쿼리를 사용하게 될 경우 리소스를 적게 차지하게 만들기 어렵다. 그냥 sql을 날리는 것이 더 좋다.
3. Join 등을 사용하는 대신 테이블을 여러개 생성하기
만약 여러개의 테이블이 있는 경우라면 이를 JOIN 쿼리로 묶어오게 될 경우 부하가 더 많이 들게 된다. 이에 따라서 테이블을 새로 만들어서 쿼리를 한번에 불러오는 것이 속도가 훨씬 빠르다. 복잡한 쿼리의 경우 테이블 자체를 쿼리에 맞게 하나 더 만드는 것이 속도나 리소스 면에서 더 좋다.
4. view 테이블
view 테이블의 경우 결국 원본 테이블에서 계속해서 쿼리를 해오는 구조이다. 따라서 보안성을 위해서 쓰는 경우가 아니라면 raw query로 다루는 것이 더 효율적이다.
5. 백엔드에서의 조회와 섞어서 효율적으로 구현
백엔드에서 컨트렉트 주소들이나 기본 설정 값을 메모리에 올려두고 특정 변수들을 불러올 수 있는 구조가 있다면 이를 이용해서 쿼리문 자체를 바꾸는 형식으로도 사용할 수 있다.
let Query =
`SELECT (
(
sum(
CAST(json_extract(json_data,'$.') AS FLOAT) *
CAST(json_extract(json_data,'$.') AS FLOAT) *
CAST(row1 AS FLOAT) /
CASE
WHEN (A IN (${array.map(d=>'"'+d+'"')}))
THEN CAST(POW(10,6) AS FLOAT)
ELSE CAST(POW(10,18) AS FLOAT)
END
) /
sum(
CAST(value AS FLOAT) *
CAST(POW(10,18) AS FLOAT)
)
)
) * 100
AS ExampleQuery
FROM Database.Table;
`
이런식으로 특정 배열을 넣어서 필터링을 하거나
아니면 쿼리 자체를 만들어 두고 concat을 통해 상황에 맞는 쿼리가 자동으로 생성되게 할 수 있다.
서브 쿼리를 상황에 맞게 만들어 두고 나중에 합치는 방법이다.
'블록체인 > Ethers & web3' 카테고리의 다른 글
hardhat node 버전 맞추기 + 여러 컨트렉트 소스 한번에 컴파일하기 (0) | 2023.03.17 |
---|---|
ethers, hardhat 환경에서 이벤트를 통한 대용량 토큰 스냅샷 처리 프로그램 제작하기 (엑셀파일로 스냅샷 만들기) (0) | 2023.03.16 |
hardhat, ethers 테스트 코드 스크립트로 바꾸는 법 (여러 지갑주소로 서명하는 스크립트 만드는법) (0) | 2023.03.11 |
hardhat 환경에서 잘 작동하지 않는 benchmark와 그에 대한 해결 방안 (0) | 2023.02.21 |
ethers에 typescript 제대로 적용해보기 (0) | 2023.01.06 |