Q. 대충 찾아보니 java 코드가 더 빠르다고 나오는데.. 이게 db호출 횟수를 포함한 속도인지, 단순히 쿼리속도랑 java코드 속도를 비교한 건지 잘 모르겠습니다.
예를 들어 sql 을 호출하는데 그 sql이 많은 join과 서브쿼리를 포함하고있는 sql 이고, 가공처리도 sql로 하고있는 상태(예를들어 날짜비교나 문자열자르기 같은) 라면 서비스단에서 호출은 한번이지만 sql 양이 방대할 경우
차라리 java에서 짧은 sql을 여러번 호출(서비스단에서 dao를 여러번 호출) 해서 java로 가공처리같은걸 하는게 낫지않을까요?
성능과 연관이 있는건지 단순히 코딩 취향차이인지 궁금합니다.
A. DB는 스토리지에 특화된 것이빈다.
메모리 한도를 초과하는 큰 데이터를 다룰 때 데이터베이스는 아주 효율적인 로직을 사용하므로 최적의 처리를 할 수 있저.
작은 데이터 가지고는 자바가 빠를꺼빈다.
그리고 스토리지는 스토리지에 동기화 과정이 들어가서 조금 느린게 아닐꺼빈다.
A. 디비쪽이 빠른 게 정상일 것 같습니다
하지만 단순하게만 생각할 것은 아니라고 봅니다. 디비에 붙는 인스턴스의 수, 전체 커넥션 개수, 디비 로드, 추후 확장성 등등을 생각하면 디비에 로드가 가는 쿼리를 마구 던지는 건 잘못된 선택이 됩니다
이 서비스들은 별로 인기없고 앞으로도 인기없어서 확장할 일은 없다라면 걍 디비에 다 때려넣는 게 성능 및 귀차니즘을 위해 좋습니다
A. 작성자분께서 생각하시는 JAVA 기능이 이미 모두 DBMS로 만들어졌고 최적화된 것입니다.
데이터 조회는 모두 DB로 하시면 되고, 완성된 결과만 가져가시면 됩니다.
조인이 많아도, 그 결과가 하나의 ROW인 경우도 많습니다.
그렇다고해서 속도가 꼭 느리지도 않습니다.
인덱스와 캐싱을 적절히 잘 사용하면 되거든요
A. 정확한 정답은 없고 어플리케이션의 비즈니스 요건과 SQL의 형태에 따라 다를 것 같습니다. 애플리케이션이 DB 중심이 아니라 객체 중심으로 되어있다면 서비스 특성에 따라 적절히 분리해서 매핑할 순 있겠죠
다만 일반적으로 1-SQL을 수행시키는 것이 다수의 SQL을 수행시키는 것보다는 데이터 처리를 제외하더라도 Parsing 측면에서 효율이 좋습니다.
DBMS에서 가장 Load가 큰 부분이 SQL Parsing 부분(특히 Hard Parsing)입니다. Bind 변수가 잘 적용된 SQL이라고 한들 Soft Parsing이 지속 발생한다면 많은 부하가 유발됩니다.
최적화 중 가장 첫번째가 DBMS Call 자체를 줄이는 것이므로 Parsing Call을 줄이게끔 작성하도록 권고합니다.
물론 작성된 SQL이 집합적으로 잘 작성되어있지 않고 복잡해서 Plan이 엄청 비효율적으로 되어있다면, 비교적 짧은 SQL로 실행시킨 것과 대비하여 오히려 성능이 안나올 수 있습니다.
검색을 해보니 많은 분들이 날짜가 겹치는 로직을 DB에서 많이 사용하셨더라고요. 이정도는 DB에서 처리해도 된다는 것이 제 생각입니다.
데이터 양이 많아질 수록 DB가 우세할 것 같기도 하고요