mysql
[MySQL, Redis, Node.js] Cache를 활용한 Update query 속도 개선
그지같은 Update 속도 때문에, 여러 곳에서 병목 현상이 났다. 프로덕트 성격상, update, Insert, delete가 활발한 table이 있는데, 이 곳에서 데드락도 잘 걸리고, 고통스러웠다. 매번 투매니커넥션 뜰 때마다, 프로세스 리스트에서 병목 현상을 일으키는 쿼리를 보고, 놀러갈 때도, 노트북을 들고다니며, 눈물의 스크립트를 날리는 고통을 받았다... 이번에 시간이 좀 나서, 어떻게든 개선해보려했다. 전체를 다 고치는건, 공수가 너무 들어서 힘들었고, 일단 임시조치를 취했다. 처음엔 서브쿼리, 임시테이블을 활용했으나, 이것도 여의치 않아서, 그냥 캐시를 활용하기로 했다. Redis를 활용해서, Pk를 캐시로 만들었다. redis.commend는 미리 모듈화해 둔 redis 명령어 함수다..
[Node.js, MySQL] Pool.getConnection() 속도 문제
회사에선 cafe24와 AWS 두 개의 호스팅을 사용한다. 모두 3계층 아키텍쳐를 사용하여, 프레젠테이션 / 애플리케이션 / 데이터베이스의 구조다. 데이터베이스는 기존 쇼핑몰 쪽의 cafe24와 내가 만든 AWS Aurora가 있다. AWS Aurora는 Pool연결이 빠른데, cafe24쪽 db의 첫 연결이 굉장히 느렸다.. 처음 mysql2/promise의 pool연결이 느리고 그 후부턴 빨랐다. 그래서 생기는 문제가 첫로그인시 6초나 걸리는 기현상이 일어났다.. 처음 연결에만 5초가 걸렸다. 끔찍 레퍼런스도 없고 고통받았다. pool을 어플을 켜자마자 한번 강제로 연결시켜버리고, 로그인이 끝나면 Pool을 해제시키니까 시간이 많이 단축됐다. exports.mysqlShopStart = async (..
[MySQL] Full Text Search Aws Aurora
mysql에서 데이터를 검색해야하는 작업을 해야했다. like같은걸 쓸 수 있지만 양심상 패스했다. mysql full text search를 활용하여 검색을 하기로 결정했다. 후엔 시간이 나면 일라스턱 서치같은 검색엔진을 따로 적용해볼 예정이다. ALTER TABLE 테이블명 ADD FULLTEXT INDEX 키값(적용할 컬럼1, 적용할 컬럼2) WITH PARSER NGRAM; 이렇게 Ngram을 포함해서 검색하고자 하는 컬럼에 FULLTEXT INDEX를 걸어준다. 처음에 Ngram은 자동으로 포함된다고 들어서, 안했는데 aws aurora는 그딴게 없었다. Ngram은 단어단위로 쪼개서 인덱싱을 한다. 기본 사이즈는 ngram_token_size 2 라서 2글자를 쪼개서 저장한다. 여기서 생기는 ..
Nodejs Excel Mysql
엑셀 파일을 넣었을 때 엑셀 양식에 맞춰 DB에 다 넣어야하는 경우가 생겼다. 엑셀은 처음 다뤄보는거라 난감했는데, 직접 작업을 해보니 엑셀보단 DB에 효율적으로 넣는게 좀 더 까다로웠다. 설치 npm -g install xlsx const excelProducts = xlsx.utils.sheet_to_json(excelFile.Sheets["Sheet1"], { raw: false, header: 1, dateNF: 'yyyy-mm-dd', blankrows: false, }) 엑셀파일의 Sheet1번을 읽어 온다. Node내에서 엑셀을 읽을 때는 엑셀 파일을 읽어야 하는데, 1. 엑셀 파일을 서버 file에 저장한다. 2. file에 저장된 엑셀을 읽고, 필요없어진 엑셀 파일은 바로 삭제 한다. 이..