Software Development/Database
-
Database의 파일시스템 EXT4, XFS 비교 (Feat. MongoDB, ScyllaDB)Software Development/Database 2024. 6. 22. 00:00
https://www.mongodb.com/docs/manual/administration/production-notes/#kernel-and-file-systems Production Notes - MongoDB Manual v7.0This page details system configurations that affect MongoDB, especially when running in production.To learn more about running in production for deployments hosted in MongoDB Atlas, see Atlas Production Notes.For running in production, refer to the Recommewww.mongodb..
-
[몽고디비] Query PlansSoftware Development/Database 2023. 5. 9. 14:58
https://www.mongodb.com/docs/manual/core/query-plans/ Query Plans — MongoDB Manual Docs Home → MongoDB Manual For a query, the MongoDB query optimizer chooses and caches the most efficient query plan given the available indexes. The evaluation of the most efficient query plan is based on the number of "work units" (works) performed by www.mongodb.com 위의 사이트에서 참고하였습니다. 쿼리 성능이 제대로 안나오는 원인은 인덱스랑 관련..
-
[MongoDB] createIndex commitQuorumSoftware Development/Database 2023. 3. 31. 23:00
몽고디비 인덱스 생성시에 commitQuorum 옵션이 있다. 기본값은 'votingMembers'인데, 데이터 보유 노드 전체에 인덱스를 생성해야 결과를 출력한다. 만약 데이터 보유 노드 중 한대가 RECOVERING 상태이고 commitQuorum: votingMembers 옵션으로 createIndex를 생성하면 결과를 반환하지 않는다. 결과를 반환하지 않는다고 해서 인덱스가 생성되지 않은 것은 아니다. 프라이머리노드 및 살아있는 세컨더리 노드는 인덱스가 생성됐을 수 있다. 그렇기 때문에 createIndex시에 응답이 필요한 경우는, commitQuorum옵션을 majority로 설정하는 것이 좋다. 만약 노드중 한대가 RECOVERING일 때, commitQuorum옵션을 votingMember..
-
-
[MongoDB] 재해복구 시스템을 위한 몽고디비 노드 설정.Software Development/Database 2023. 3. 10. 20:30
재해복구 시스템을 위해서는 다른 Zone 또는 Region에 클러스터를 배포해야 한다. 예를 들어, 데이터센터 A와 데이터센터 B가 있을 경우, A, B에 각각 2~3대의 노드를 배포하는 방식으로 동작한다. 몽고디비는 프라이머리 노드 선출을 위해 노드의 개수를 홀수로 설정하는 것을 권장한다. 만약 A, B에 2대 2대가 있다면, 4대의 노드로 짝수의 노드이기 때문에 해당 권장사항을 따르지 않는다. 이를 해결하기 위해서, A에 3대 B에 2대를 설정하여 홀수개의 노드로 해당 권장사항을 충족할 수 있다. 그런데 위의 방식은 문제점이 존재한다. 만약 A 데이터센터가 정전, 네트워크 이슈 같은 이유로 3대가 사용이 불가능하게 된다면 어떻게 될까? 5대의 노드 중에 총 B 데이터 센터의 2대의 노드만 살아있게 된..
-
[MongoDB] Compound Index 생성해도 왜 쿼리가 느리지?Software Development/Database 2022. 5. 31. 20:40
여러개의 field를 가지고 index를 생성할 때 compound index를 이용한다. 생성한 compound index의 field를 포함하는 조건을 가지고 query를 실행해도 느린 경우가 있다. 그 이유는 Query Selectivity과 관련이 있다. eplain('executionStats')로 쿼리플랜을 조회하면, totalKeysExamined, nReturned가 있다. 위 두 값의 차이가 크면 성능이 좋지 못한 것이다. 예를 들어 nReturned가 100이고, totalKeysExamined가 100,000이라면 100개의 문서를 찾는데 100,000개의 키를 스캔하게 되는 것이다. 인덱스를 타서 Collection Scan을 피하긴 했지만, 여전히 스캔하는 데이터의 양이 많은 것이..
-
데이터베이스 인터널스Software Development/Database 2022. 4. 27. 18:24
Database Internals를 읽고 주요 내용을 요약 정리합니다. 데이터베이스 비교 데이터베이스 시스템 선택은 장기적인 결과를 초래할 수 있다. 마이그레이션 작업은 쉬운 것이 아니기 때문에 개발 초기 단계에 성능, 일관성 문제 운영 문제 등 여러 요소를 고려해야 한다. 최악의 경우 애플리케이션의 많은 부분을 수정해야 한다. 데이터베이스를 비교하기 전에 목표를 명확하게 세우자. 성능과 확장성에 관련된 문제는 시간이 지나거나 사용량이 증가했을 때 나타난다. 운영 환경과 최대한 유사한 환경에서 오랫동안 테스트하는 것이 가장 좋다. 데이터베이스 선택은 장기적인 결정이라 최신 버전에 정확히 무엇이 변경됐고 왜 변경됐는지 파악하고 업그레이드 전략을 세워 두는 것이 좋다. 데이터베이스 개발업체가 지금까지 어떤 ..
-
[MongoDB] collection.count(), collection.countDocuments({})Software Development/Database 2022. 1. 14. 00:48
MongoDB에서 흔히 전체 문서가 얼마나 저장되어 있는지 세기 위해서 db.collection.find({}).count(), db.collection.count()를 실행합니다. 그러나 위의 방법은 권장하지 않습니다. 왜냐하면 find({}) 처럼 쿼리에 조건이 없거나 그냥 count()를 실행할 경우, 메타데이터에서 값을 가져오기 때문입니다. 메타데이터에서 값을 가져오기 때문에 실행하면 굉장히 빠르게 값을 반환하는 것을 볼 수 있습니다. 이런 현상은 몽고디비가 샤딩됐을 때, 고아 문서가 적절히 필터링되지 못하거나 몽고디비가 비정상적으로 종료하게 되면 count가 적절하지 않을 수 있습니다. Wired Tiger storage engine을 쓰는 mongod가 비정상적으로 종료됐을 때 count()가..