본문 바로가기

MySQL3

[Python] MySQL 대규모 데이터 삽입 로직 고도화: 비동기, Bulk Insert, 멀티스레드 적용기 프로젝트에서 나스닥에 상장되어있는 약 만개의 종목들에 대해 날짜별로 종가, 시가, 고가, 저가의 최소 40년치의 데이터를 필요로 했다. 대강 계산해봐도 약 10000 * 365 * 40 = 146,000,000 개의 데이터를 삽입해야했고, 매일매일 만개의 레코드씩을 추가로 삽입해야 했다. 그래서 이김에 대규모 데이터 삽입 로직을 좀 열심히 만들어봤다.  먼저 내가 겪었던 로직 고도화 단계는 다음과 같다.*()안에 적힌 값은 한달 단위 데이터들을 넣을때 소요되는 시간이다. 1. 단일 쓰레드, Batch 미사용 (97m)2. INSERT IGNORE 사용하여 중복 데이터 무시 (80~100m)3. 단일 쓰레드 방식 + 비동기처리 통한 동시 작업과 executemany 통한 네트워크 오버헤드 감소 (48~93.. 2025. 1. 25.
[DB/MYSQL] SQL 고득점 Kit - SELECT문(1) 해당 글은 프로그래머스의 'SQL 고득점 Kit'을 풀고 작성한 글입니다. https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr1. FROM - 테이블을 가져옵니다.2. WHERE - 조건에 맞는 행을 필터링합니다.3. GROUP BY - 데이터를 그룹화합니다.4. HAVING - 그룹화된 데이터에 추가 조건을 적용합니다.5. SELECT - 최종 조회할 컬럼을 지정합니다.6. ORDER BY - 결과를 정렬합니다. 1.평균 일일 대여 요금 구하기 (lv.1)문제https://scho.. 2024. 11. 12.
[Spring/Java] 동시성 제어 통한 게시물 좋아요 및 댓글 수 관리 (비관적 락, 반정규화, 세마포어) 상황게시물에 좋아요 버튼을 누르면 좋아요 수가 1씩 증가하거나 감소해야하고, 댓글을 작성하거나 삭제하면 댓글 수가 1씩 증가하거나 감소해야 했다. 그런데, 그런 요청이 있을 때마다 좋아요 댓글 수 컬럼 값을 1씩 증가하거나 1씩 감소시키게 된다면, 충돌의 위험이 있었고, 데이터 무결성에 문제가 생길 수 있었다. 그래서 충돌을 방지하여 데이터 무결성을 높이는 락을 사용해야 했다. 하지만, 동시성 처리가 많은 상황에서는 락 경합이 빈번하게 발생하여 락 대기 시간이 길어질 수 있었고, 데이터베이스의 성능이 저하될 수 있었다. 해결방법 [ 1. 별도의 테이블을 사용하여 성능 향상 ]좋아요와 댓글에 대한 테이블을 따로 만들고, 생성이 될 때마다 데이터를 하나씩 추가시키고 삭제할때마다 해당 데이터를 하니씩 삭제했다.. 2024. 7. 7.