일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스마트컨트렉트테스트
- ethers v6
- 스마트컨트렉트 예약어 함수이름 중복
- nest.js설명
- 스마트 컨트렉트 함수이름 중복
- 러스트기초
- git rebase
- ethers type
- 체인의정석
- 러스트 기초 학습
- 스마트컨트렉트프록시
- chainlink 설명
- 러스트 기초
- 스마트컨트렉트 함수이름 중복 호출
- ambiguous function description
- 컨트렉트 배포 자동화
- 티스토리챌린지
- multicall
- ethers typescript
- 컨트렉트 동일한 함수이름 호출
- Vue
- vue기초
- 프록시배포구조
- 오블완
- 머신러닝기초
- Vue.js
- ethers
- SBT표준
- rust 기초
- ethers websocket
- Today
- Total
체인의정석
Mysql에서 Json Extract & group by & CAST로 스마트 컨트렉트 이벤트 처리하기 본문
상황 : 트랜잭션 데이터 중 이벤트 로그 같은 것들은 json 형태로 조회된다. 이런 자료형들을 DB에서 접근해와서 api를 제작해야 하는 상황
1. json_extract 사용하기
먼저 mysql에서 JSON 형태로 된 자료형의 특정 요소를 뽑아서 쿼리를 하려면 json_extract 를 사용하면 된다.
json_extract(event_data,'$.KEY') as borrower
만약 블록체인 이벤트를 조회하는 event_data가 DB에 저장 되어 있다고 하면
이와 같은 문구에서 KEY에 JSON의 키 값을 넣어주면 된다.
2. grop by 사용하기
여러 데이터들을 합산하기 위해서는 grop by를 사용하면 된다.
다만 이때 select 문에서 선택되는 값들은 합산을 하지 않는 값들을 모두 grop by 에 넣어주어야 한다.
SELECT json_extract(event_data,'$.KEY1') as A, json_extract(event_data,'$.KEY2') as B, sum(json_extract(event_data, '$.KEY3')) as C
FROM 데이터베이스이름.테이블이름 where 조건 group by A, B;
이런식으로 나오게 되면 각각 key값 1, 2 번을 통해 조건을 걸고 해당 조건에 만족하는 C를 합산해서 그룹해버리는 것이다.
이때 A, B 2개의 값이 동일하면 합산이 되고 아니라면 합산이 되지 않는다.
3. db에서의 exponential 해결
토큰과 관련된 사항일 경우 당연히 숫자가 커져서 exponential 형태로 숫자가 표시되게 된다.
이에 따라서 데이터베이스에서도 bignumber 처리처럼 자료형을 변환해서 계산해 주어야 한다.
CAST(json_extract(data,'$.KEY') AS FLOAT) / CAST(POW(10, 18) AS FLOAT)
이런식으로 CAST를 써서 자료형을 float으로 맞춰 준 후에 나누어 주면 우리가 원하는 소수점 처리된 결과가 나오게 된다.
2안은 데이터를 가져와서 백엔드에서 bigInt 처리를 해주어서 계산을 하고 그 결과값을 가져오는 것이다.
하지만 리소스의 절약을 위해서는 쿼리문으로 최대한 처리를 해서 백엔드로 던져주는 것이 좋기 때문에 exponential까지 해결하고 리턴하는 것이 더 좋다.
'개발 > database' 카테고리의 다른 글
MySQL) 쿼리 실행 순서 및 테이블 합치기 (0) | 2023.02.14 |
---|---|
스마트컨트렉트, 백엔드 , DB사이의 작업 처리에 대하여 (MySQL 다중 테이블 쿼리 + 백엔드 처리) (0) | 2023.02.13 |
sequalize에서 토큰의 데이터 타입 정의 (0) | 2022.12.01 |
MY sql 스칼라 서브 쿼리의 사용 (0) | 2022.11.29 |
Object 형태의 값 추출하기 (json_extract) (0) | 2022.11.29 |