Big database queries and highload optimization | Lifehacks on Rails

아침 얘들 아! 저는 Pavlo이고 Syndicode의 소프트웨어 엔지니어입니다 오늘 우리는 최적화에 대해 이야기 할 예정입니다

큰 데이터베이스 쿼리 및 높은 부하에서 응용 프로그램을 안정적으로 만드는 방법에 대해 설명합니다 시작하자! 루비로 프로그래밍 할 때 좋은 경험을 얻고 싶다면 인터넷에서 찾을 수없는 정보를 얻으려면 – YouTube 채널에 '구독'을 클릭하십시오 현재의 방법은 정말로 느립니다 출력을 살펴 보겠습니다 우리는 하나의 프로젝트를로드하고 'present?'를 사용하여 존재 여부를 확인하기 위해 모든 태스크를로드합니다

이것은 꽤 많은 시간 (~ 900ms)을 소요하여 앱의 성능을 저해합니다 'Any'라는 방법은 어떨까요? '어떤?' 각 작업을로드하는 대신 SQL 수를 사용하므로 더 빠르고 성능이 뛰어난 결과를 얻을 수 있습니다 그러나 우리는 실제로 많은 작업이 필요하지 않습니다 그것이 '존재 하는가?' 하루를 절약하십시오! 그것은 훌륭합니다! 우리는 Project 모델을 가지고 있으며 그 이름으로 프로젝트를 찾아야합니다 인덱스가 없으면 데이터베이스 엔진은 일치 항목이 발견 될 때까지 하나씩 프로젝트 테이블의 모든 레코드를 검사해야합니다

그러나 다음 예제와 같이 '프로젝트'테이블에 색인을 추가하면 조회가 훨씬 빨라집니다 로깅은 특히 디스크에 로깅 할 때 Rails 응용 프로그램의 성능에 항상 작은 영향을 미칩니다 또한, 몇 가지 미묘한 점이 있습니다 : debug 수준을 사용하면 문자열 수가 훨씬 많아지기 때문에 치명적입니다 평가되고 로그 결과에 기록됩니다

또 다른 잠재적 인 함정은 코드에서 Logger를 너무 많이 호출하는 것입니다 따라서, 로거 메서드에 블록을 전달하는 것이 좋습니다 사용자 프로필 페이지에서이 사용자의 댓글 목록을 표시하고자한다고 가정 해 보겠습니다 당신이 끝내는 것은 그것과 같은 것입니다 : 사용자는 9 개의 다른 게시물에 댓글을 달았습니다 결과적으로 데이터베이스에 9 개의 개별 쿼리가 생성됩니다

해결책은 includes () 메소드를 사용하는 것입니다 우리의 질의 스택 목록 모양 그것은 훨씬 더 효율적입니다 공통 페이지 또는 작업을 캐시하면 성능이 크게 향상 될 수 있습니다 귀하의 페이지에 데이터베이스 또는 무거운 동적 컨텐츠에 대한 호출이 포함되어 있지 않더라도, 렌더링 오버 헤드를 피하는 단순한 사실 부분 또는 내용 블록으로 성능 향상 가능 가치있게 만들기에 충분합니다 캐싱에 대한 다른 아이디어가 있다면 동영상 아래에 댓글을 달아주세요

이 자료가 유용했다면 LIKE를 누르십시오! 다음 시리즈에서 만나요!