"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > (SQL 쿼리) Express.js의 캐싱과 인덱싱

(SQL 쿼리) Express.js의 캐싱과 인덱싱

2024-11-08에 게시됨
검색:868

(SQL Query) Caching vs Indexing in Express.js

안녕하세요 개발자 여러분, 이것은 이 플랫폼의 첫 번째 게시물입니다! ?

Express.js와 SQL을 사용하면서 겪었던 놀라운 경험을 공유하고 싶었습니다. 저는 초보 개발자이고, 프로젝트의 API 작업을 하면서 하루에 200,000개가 넘는 API 요청을 처리하고 있었습니다. 처음에는 Express.js API를 사용하여 SQLite 데이터베이스(~400MB)를 설정하고 작업 속도를 높이기 위해 Node.js 캐싱을 사용했습니다.

처음에는 쿼리에 여러 JOIN 및 검색이 포함되었기 때문에 쿼리에 대한 응답 시간은 약 200-300ms였습니다. 그래서 성능을 향상시킬 수 있는지 알아보기 위해 몇 가지 실험을 해보기로 했습니다.

내가 한 일은 다음과 같습니다.

  • 노드 캐싱을 제거했습니다.
  • 5개 테이블의 20개 열에 인덱스를 생성했습니다(내 DB에는 5개 테이블에 총 103개의 열이 있습니다).

결과는 의외였습니다! 인덱싱 후 여러 JOIN이 포함된 좀 더 복잡한 쿼리 중 일부가 단 3~5ms 만에 실행되었습니다.

이전에는 노드 캐싱을 사용했습니다.

  • 첫 번째 요청에는 약 300-400ms가 걸렸습니다.
  • 후속 요청에는 2~5ms가 소요됩니다(캐싱으로 인해).

이후, SQLite 인덱스만 사용:
모든 요청에는 캐싱 없이 7~10ms만 소요됩니다.

이제 쿼리가 지속적으로 빨라지고 서버 부하도 줄어듭니다! 처음에는 4GB RAM과 4개의 vCPU를 갖춘 DigitalOcean 드롭릿에서 앱을 실행했습니다. 하지만 SQL 쿼리를 최적화한 후에는 단 2GB의 RAM과 2개의 vCPU만으로 동일한 워크로드를 편안하게 처리할 수 있습니다.

간단하게 들릴 수도 있지만 적절한 SQL 인덱싱을 통해 쿼리 성능이 크게 달라져 더 이상 캐싱에 의존할 필요가 없게 되었습니다. ?

릴리스 선언문 이 글은 https://dev.to/w3vish/sql-query-caching-vs-indexing-in-expressjs-40n6?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3