현 회사에서 데이터베이스로 mongoDB를 사용하여 이에 대해서 공부하고 정리해보고자 한다. 아마 익숙하거나 최소한 어디서 들어봤을 것이다.
MongoDB는 NoSQL 데이터베이스 시스템의 한 종류이다
관계형db가 아니라 Json 형태로 저장되는 것을 뜻한다. 한 마디로 데이터를 조회하면..
{
"_id": ObjectId("5f63b1a7a0f9a982aede4101"),
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"zipcode": "12345"
},
"hobbies": ["reading", "traveling", "photography"]
}
요런 형태로 저장되는 것이다!
mongoDB에서는 모든 데이터는 반드시 JSON 타입으로 표현되지만 데이터베이스 내에서 저장될 때는 BSON 타입의 바이너리 형태의 데이터로 반환되어 저장된다.
BSON 타입은 Binary JSON의 약어로, JSON 문서를 바이너리로 인코딩한 포맷이다. JSON과 비교하여 BSON은 스토리지 공간과 스캔 속도 모두에서 효율적으로 설계되어 있다는 장점이 있다!
address를 보면 또 중첩된 형태로 딕셔너리가 들어가있다. 이를 통해 다양한 데이터 유형을 저장할 수 있다. 그리고 필요에 따라 새로운 필드를 추가하거나 기존 필드를 수정하는 등 관계형db에 비하여 유연성을 가진다.
샤딩(Sharding) 기능을 통해 데이터를 수평적으로 분할하고 여러 노드에 분산 저장함으로써 트래픽을 분산시켜 안정적인 서비스 운영이 가능하다. 또한 쿼리를 위한 인덱스를 지원하기 때문에 효율적인 데이터 검색과 분석을 가능케한다.
데이터의 안정성을 보장하기 위해 여러 노드 간의 데이터 복제를 지원한다. 이는 데이터베이스의 가용성을 높이고 장애 복구 기능을 제공하여 대규모 시스템에서의 안정성을 보장할 수 있다.
이게 무료라니...
db.users.insertOne({"name":"sue", "age":26, "status":"pending"})
db.users.find({age:{$gt:18}},{name:1, address:1}).limit(5)
db.users.updateMany( {age:{$gt:18}}, {$set: {status:"reject"}} )
db.users.deleteMany( {status: "reject"} )
db.collection.createIndex( { key: 1 } )
db.COLLECTION.getIndexes()
ACID 트랜잭션을 완전히 지원하지 않아 복잡한 다중 문서 트랜잭션 처리가 어려울 수 있다고 한다. (솔직히 경험해보지않아서 잘 와닿지는 않지만..)
추후에는 이 단점들에 대해서 좀 더 자세히, 그리고 mongoDB의 핵심 기능인 샤딩에 대해서 알아보자
mongoDB 관련 블로그글
Chat GPT