컴퓨터언어/Database(39)
-
n+1 문제
n+1 문제는 데이터베이스 쿼리 최적화와 관련된 성능 문제로, 주로 ORM(Object Relational Mapping) 프레임워크에서 발생한다. 간단히 말하면, 한 번에 해결할 수 있는 작업을 불필요하게 여러 번 쿼리하는 문제다. 기본 개념 n+1 쿼리는 특정 객체를 가져오고 관련된 객체를 로드할 때, 1개의 메인 쿼리로 상위 데이터를 가져온 후,n개의 추가 쿼리로 관련 데이터를 각각 개별적으로 가져오는 경우를 말한다.이로 인해 필요 이상으로 많은 데이터베이스 호출이 발생하게 되고, 성능 저하를 초래한다. 예제 게시글과 댓글이 1:N 관계에 있다고 가정하자. 그리고 게시글 리스트를 조회하면서 각 게시글에 달린 댓글도 가져오려는 경우를 생각해보자. 이때 n+1 쿼리가 발생할 수 있다.-- 1개의 메인 ..
2024.11.22 -
Expressions with $project
db.movies.aggregate([ { $match: { cast: { $elemMatch: { $exists: true } }, directors: { $elemMatch: { $exists: true } }, writers: { $elemMatch: { $exists: true } } } }, { $project: { _id: 0, cast: 1, directors: 1, writers: { $map: { input: "$writers", as: "writer", in: { $arrayElemAt: [ { $split: ["$$writer", " ("] }, 0 ] } } } } }, { $project: { labor_of_love: { $gt: [ { $size: { $setIntersecti..
2021.02.04 -
Chapter 1: Basic Aggregation - $match and $project
Shaping documents with $project The correct answers are the following: Once we specify a field to retain or perform some computation in a $project stage, we must specify all fields we wish to retain. The only exception to this is the _id field. $project implicitly removes all other fields once we have retained, reshaped, or computed a new field. The exception to this is the _id field, which we m..
2021.02.03 -
max_user_connection 초과라고? 내 코드에 문제가 있는 거 아닐까?
python - flask - mariadb를 사용하던 중 자꾸 max_user_connection을 초과하는 상황이 생겼다. 처음에는 timeout을 짧게 해서 오래된 프로세스를 강제종료 시켜야 하나 싶었다. 하지만 뭔가 찜찜했다. 명색이 많은 사람이 함께 쓰기 위해 존재하는 데이터베이스지 않은가? 아무리 root권한이 없다고 해도 timeout을 만지면서까지 user_connection을 해결하는건 좀 이상하지 않나? 역시 모든 문제는 나로부터 시작된 것. connection을 열기만 하고 닫지를 않아서 프로세스가 증식했던 것이다. 누수가 생기는 것은 아닌지 잘 확인하고 다닐 것! conn.close();
2021.02.01 -
[MongoDB University] 정리
파이프라인 : $match(일치모양골라내기) -> $project(형태변형) -> $group(단일파일로만들어전체에대한비율계산) Stages cannot be configured to produce our desired output. This is definitely not correct. Stages can be configured in almost any way we desire. Pipelines must consist of at least two stages. This is not correct. Pipelines must consist of at least one stage, and can have many stages. Documents flow through the pipeline, pass..
2021.02.01 -
[반정규화] 테이블 분할의 단점 (Feat. 정규화vs반정규화)
👍 테이블 분할이란? 정규화 != 테이블분할(반정규화의 방법 중 하나) 데이터의 무결성을 확보하기 위해서는 정규화를 실시하는 것이 일반적이지만, 오히려 정규화 때문에 쪼개진 테이블이 서로 연산하기 위해 트랜잭션이 증가하여 비용이 높게 청구된다면, 무결성을 포기하는 대신 반정규화를 실시하게 된다. 그런데 여기서 혼동의 우려가 있는데, 정규화도 테이블을 쪼개는 과정이지만, 반정규화에도 "테이블 분할"이라는 방식이 존재한다는 것이다. 그래서 차이점을 정확히 알아야 한다. "정규화"로서의 테이블 쪼개기와 "반정규화의 테이블 분할"로서의 테이블 쪼개기는 각각 유형이 따로 정해져 있다. 정규화로서의 테이블 쪼개기는 테이블이 원자성을 보유하거나, 부분함수종속성/이행함수종속성을 탈피하도록 각각의 단계에 맞추어 테이블을..
2020.08.03