r2dbc

1. 서론Spring WebFlux + R2DBC + MariaDB 조합으로 서비스를 개발하다 보면, 대량 INSERT가 필요한 구간에서 성능 이슈를 마주하게 된다. 특히 “키 생성”, “로그 적재”, “배치성 데이터 적재”처럼 한 번에 수천~수만 건을 넣어야 하는 상황에서Reactive니까 알아서 빠르겠지 라는 기대와 달리,실제로는 몇 분 단위로 시간이 걸리는 경우를 겪게 된다.이 글은Spring WebFlux + R2DBC + MariaDB 환경에서대량 INSERT 성능이 잘 나오지 않았던 원인을 분석하고,다중 VALUES 기반 Bulk Insert 유틸리티로 성능을 개선한 사례와,그 과정에서 고려해야 할 보안·유지보수 관점의 트레이드오프까지 정리한 기록이다. 2. 문제 상황개발하고 있는 차량 키 관..
문제 상황 대량의 데이터를 insert 하는 로직이 있었는데, 계속 데이터 일부분이 누락되는 현상이 발생 하였다. 총 400row가 insert 되어야 하는데, 380개 정도만 insert 되는 식이었다. 내가 insert하는 방식은 아래와 같았다. public Flux setDatas(List dataList){ repository.saveAll(dataList); } repository는 아래처럼 R2DBC Repository를 상속받아 사용하였다. public interface TestRepository extends R2dbcRepository 해결 방법 기존의 Iterable을 바로 인자로 넘기는 방법에서, 아래처럼 Flux형태로 바꾸어 saveAll 하는 방식으로 바꾸니 정상적으로 작동함을 볼..
분명, JDBC를 사용할 때에는, TinyInt를 Integer로 매핑을 했던 기억이 있는데, 에러가 발생하여 찾아보니 TinyInt(1)의 경우에만 Boolean으로 매핑이 되는 걸 알 수 있었다.(당연하겠지만...) R2dbc에서는 다른 매핑으로 작동될 까 걱정했지만, 우선 tinyInt를 boolean으로 매핑하는 점은 jdbc와 동일 한 것 같다. https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-type-conversions.html MySQL :: MySQL Connector/J 8.0 Developer Guide :: 6.5 Java, JDBC, and MySQL Types 6.5 Java, JDBC, and MySQL T..
moyanglee
'r2dbc' 태그의 글 목록