위상 정렬 / BOJ 2252번 줄세우기
·
Study/알고리즘
정의유향 그래프의 정점을 간선의 방향에 거스르지 않도록 나열하는 것ex) 대학 선수 과목: 특정 과목들을 수강해야 할 때 선수 과목이 있다면 위상 정렬을 통해 올바른 수강 순서를 찾을 수 있음모든 유한 부분 순서 집합은 유향 그래프 G = (V,E)로 나타낼 수 있으므로,해당 그래프의 모든 간선 e = (u,v)에 대해 u가 v보다 앞에 위치하도록 만드는 과정을 위상 정렬이라고 한다.단, 유향 그래프 G는 DAG(유향 비순환 그래프)일 때만 위상 정렬이 성립한다. 사이클이 있는 그래프는 진입 차수가 0이 될 수 없기 때문에 위상 정렬이 불가능하다. 알고리즘위상 정렬은 꼭지점의 양수 노드의 선형 실행 시간을 갖는다O(|V| + |E|) Kahn 알고리즘모든 정점의 진입 차수를 계산한다.그래프 입력 시, 간..
검색엔진 적용까지의 기록 - Elasticsearch
·
Tech/Develop
상황검색 API를 개선했음에도 발생하는 병목https://marstech.tistory.com/17 검색 API 최적화 여행기들어가기 앞서..개발이 끝난 후, 코드를 검증해보기 위해 성능테스트를 진행하고 끔찍한 쿼리의 응답속도와 비효율적인 코드에 의한 병목을 발견하고 개선해나가는 경험을 쓴 기록입니다.해당marstech.tistory.com 앞선 글의 내용과 같이 검색 API를 최적화하여 평균 응답속도를 22초 -> 1.5초까지 줄일 수 있었습니다.하지만 1500자 이상의 텍스트가 들어간 100만개의 데이터에서 검색시간 1.5초는 너무나도 아쉬운 결과였습니다. 왜 이런 결과가 나왔을까요? 특정 검색어 검색 시 최악의 경우 20초 이상의 응답 지연 발생 거의 대부분의 요청이 600ms 내에 처리가 되고 있..
캐시를 적용해보자! 본격 캐시 적용기
·
Tech/Develop
들어가기 앞서..링크 된 글에서 파생된 글입니다. 왜 이런 짓(?)을 하는 지는 글을 읽으시면 이해하실 수 있습니다!https://marstech.tistory.com/17 검색 API 최적화 여행기들어가기 앞서..개발이 끝난 후, 코드를 검증해보기 위해 성능테스트를 진행하고 끔찍한 쿼리의 응답속도와 비효율적인 코드에 의한 병목을 발견하고 개선해나가는 경험을 쓴 기록입니다.해당marstech.tistory.com위의 글을 요약하자면, Full-Text Index 적용은 성공적이었지만, 빈도수가 높은 단어는 적용되지 않는 점을 보완하기 위해캐싱을 도입하여 최초 1회의 요청을 제외한 나머지 요청의 응답속도를 낮춰 평균 응답속도를 개선하고자 캐시 도입을 시작하였습니다. 캐시 도입앞선 이유들로 인해 캐시를 적용..
검색 API 최적화 여행기
·
Tech/Develop
들어가기 앞서..개발이 끝난 후, 코드를 검증해보기 위해 성능테스트를 진행하고 끔찍한 쿼리의 응답속도와 비효율적인 코드에 의한 병목을 발견하고 개선해나가는 경험을 쓴 기록입니다.해당 경험에 앞서 효율적인 최적화를 위해 MySQL 공식문서의 최적화 문서를 읽고 고민했습니다.약 1주일간 성능테스트와 리팩토링을 진행하며 경험과 느낀점을 공유하고자 합니다.성능테스트를 진행한 이유스마일게이트 데브캠프를 진행하며 코드리뷰 플랫폼 개발을 진행했습니다. 플랫폼이란 많은 사람이 쉽게 이용하거나 다양한 목적으로 사용되는 공간을 차용해서 일컫습니다.IT 서비스에서 가장 중요한 가치는 편리성이라고 생각합니다. 애플리케이션 레벨에서의 편리성은 많은 사람을 받아들일 수 있는 능력과 받아들인 모두에게 좋은 경험을 제공하는 능력 이..
MySQL Optimize with 공식문서 (5)
·
Reference/MySQL
Ref.https://dev.mysql.com/doc/refman/8.0/en/optimization.html MySQL :: MySQL 8.0 Reference Manual :: 10 OptimizationMySQL 8.0 Reference Manual  /  Optimization This chapter explains how to optimize MySQL performance and provides examples. Optimization involves configuring, tuning, and measuring performance, at several levels. Depending on your job role (developer, DBAdev.mysql.com LIMIT 쿼리 최적화LI..
MySQL Optimize with 공식문서 (4)
·
Reference/MySQL
Ref.https://dev.mysql.com/doc/refman/8.0/en/select-optimization.html MySQL :: MySQL 8.0 Reference Manual :: 10.2.1 Optimizing SELECT Statements10.2.1 Optimizing SELECT Statements Queries, in the form of SELECT statements, perform all the lookup operations in the database. Tuning these statements is a top priority, whether to achieve sub-second response times for dynamic web pages, or to chop hou..
MySQL Optimize with 공식문서 (3)
·
Reference/MySQL
https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html MySQL :: MySQL 8.0 Reference Manual :: 10.2.1.3 Index Merge Optimization10.2.1.3 Index Merge Optimization The Index Merge access method retrieves rows with multiple range scans and merges their results into one. This access method merges index scans from a single table only, not scans across multiple tables. The merge can prod..
MySQL Optimize with 공식문서 (2)
·
Reference/MySQL
Ref.https://dev.mysql.com/doc/refman/8.0/en/select-optimization.html MySQL :: MySQL 8.0 Reference Manual :: 10.2.1 Optimizing SELECT Statements10.2.1 Optimizing SELECT Statements Queries, in the form of SELECT statements, perform all the lookup operations in the database. Tuning these statements is a top priority, whether to achieve sub-second response times for dynamic web pages, or to chop hou..