#NoSQL #JSON #MongoDB #Pymongo
π νμ΅ λͺ©ν
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(RDB) | NoSQL(λΉκ΄κ³ν λ°μ΄ν°λ² μ΄μ€) | |
---|---|---|
μ μ₯ μ 보 μ’ λ₯ | κ³ μ λ λ°μ΄ν°λ² μ΄μ€ | κ³ μ λμ΄ μμ§ μμ λ°μ΄ν°λ² μ΄μ€ |
λ°μ΄ν° μ μ₯(Storage) | - SQLμ μ΄μ©ν΄μ λ°μ΄ν°λ₯Ό ν
μ΄λΈμ μ μ₯ - 미리 μμ±λ μ€ν€λ§λ₯Ό κΈ°λ°μΌλ‘ μ ν΄μ§ νμμ λ§κ² λ°μ΄ν°λ₯Ό μ μ₯ν΄μΌ νλ€.(JSON νμ±) - νλμ instance : νλμ κ° (ex. νμ:name) | - key-value (Redis, Dynamo) : λ°μ΄ν°λ₯Ό Key-Valueμ μμ μμ±μΌλ‘ νλ λ°°μ΄ ννλ‘ _idκ°μ 무쑰건 κ°μ§λ©° μ΄ κ°μ μ€λ³΅λμ§ μλ κ³ μ κ°μ΄λ€. - document (MongoDB) : JSON μ μ¬ νμμΌλ‘ λ°μ΄ν°λ₯Ό λ¬Έμν - graph - wide-column (Cassandra, HBase) : λ°μ΄ν°λ² μ΄μ€μ μ΄(column)μ λν λ°μ΄ν° κ΄λ¦¬λ₯Ό μ§μ€νλ λ°μ΄ν°λ² μ΄μ€ - νλμ instance : μ¬λ¬ κ° (ex. queen: [name, age, height]) |
μ€ν€λ§(Schema) | - νμμ΄ κ³ μ λ μ€ν€λ§ νμ (λ°μ΄ν° μμ±λ³λ‘ μ΄(column)μ λν μ λ³΄κ° λ―Έλ¦¬ μ ν΄μ ΈμΌ νλ€λ μλ―Έ) - λ°μ΄ν°λ₯Ό μΈ λ μ€ν€λ§μ λ§μΆ€ - μ€ν€λ§κ° λλ ·μ΄ λ³΄μΈλ€ (ν μ΄λΈ κ° κ΄κ³κ° μ 보μΈλ€) | - λμ μΈ μ€ν€λ§ νν (νμ μΆκ°ν λ μ¦μ μ΄μ ν¨κ» μΆκ°ν μ μκ³ , κ°λ³ μμ±μ λν΄μ λͺ¨λ μ΄μ λν λ°μ΄ν°λ₯Ό λ°λμ μ λ ₯νμ§ μμλ λ¨) - λ°μ΄ν°λ₯Ό μ½μ΄μ¬ λ μ€ν€λ§μ λ°λΌ μ½μ΄μ΄ |
쿼리(Querying) (λ°μ΄ν°λ² μ΄μ€μ λν΄μ μ 보λ₯Ό μμ²νλ νλ) | - SQL(ꡬ쑰νλ 쿼리 μΈμ΄)μ ν΅ν΄ λ°μ΄ν° λ° μ 보 μμ²μ μ¬μ© | - UnQL(UnStructured Query Language;ꡬ쑰ν λμ§ μμ 쿼리 μΈμ΄)λ‘λ λ°μ΄ν° μμ² κ°λ₯ |
νμ₯μ±(Scalability) | - μμ§μ νμ₯ (λμ λ©λͺ¨λ¦¬, CPU μ¬μ© νμ₯) - λ§μ λΉμ©κ³Ό μκ° μλͺ¨ | - μνμ νμ₯ (λ³΄λ€ κ°μΌ μλ² μ¦μ€, λλ ν΄λΌμ°λ μλΉμ€ μ΄μ©νλ νμ₯)λ³΄λ€ κ°μΌ μλ² μ¦μ€, λλ ν΄λΌμ°λ μλΉμ€ μ΄μ©νλ νμ₯- λΉμ© ν¨μ¨μ± λμ |
μ | - MySQL - Oracle - SQLite - PostgresSQL - MariaDB | - MongoDB(Document) - DynamoDB(Key-value) |
μ¬μ© μΌμ΄μ€ | - λ°μ΄ν°λ² μ΄μ€μ ACID μ±μ§μ μ€μν΄μΌ νλ κ²½μ° (μ μ μκ±°λ, κΈμ΅ μλΉμ€λ₯Ό μν μννΈμ¨μ΄ κ°λ°) - μννΈμ¨μ΄μ μ¬μ©λλ λ°μ΄ν°κ° ꡬ쑰μ μ΄κ³ μΌκ΄μ μΈ κ²½μ° | - λ°μ΄ν°μ κ΅¬μ‘°κ° κ±°μ λλ μ ν μλ λμ©λμ λ°μ΄ν°λ₯Ό μ μ₯νλ κ²½μ° - ν΄λΌμ°λ μ»΄ν¨ν λ° μ μ₯곡κ°μ μ΅λν νμ©νλ κ²½μ° - λΉ λ₯΄κ² μλΉμ€λ₯Ό ꡬμΆνκ³ λ°μ΄ν° ꡬ쑰λ₯Ό μμ£Ό μ λ°μ΄νΈ νλ κ²½μ° |
λ¬Έμν(Document) λ°μ΄ν°λ² μ΄μ€
λ°μ΄ν°λ₯Ό ν μ΄λΈμ΄ μλ λ¬Έμμ²λΌ μ μ₯νλ λ°μ΄ν°λ² μ΄μ€λ₯Ό μλ―Έν©λλ€. JSON μ μ¬ νμμΌλ‘ λ°μ΄ν°λ₯Ό λ¬Έμννλ κ²μ΄ 보ν΅μ λλ€. κ°κ°μ λ¬Έμλ νλμ μμ±μ λν λ°μ΄ν°λ₯Ό κ°μ§κ³ μκ³ , 컬λ μ μ΄λΌκ³ νλ κ·Έλ£ΉμΌλ‘ λ¬Άμ΄μ κ΄λ¦¬ν©λλ€. λνμ μΈ λ¬Έμν λ°μ΄ν°λ² μ΄μ€μλ MongoDBκ° μμ΅λλ€.
Organization μμ±
- Project μμ±
- Database μμ±
IP μ£Όμ
, Username
, Password
μ€μ Cluster connect
pymongo
ν΅ν΄ μ°κ²°### ν¨ν€μ§ μ€μΉ
pip install pymongo
pip install dnspython
### import
from pymongo import MongoClient
### client κ°μ²΄ νμ±νμ¬ MongoDBμ μ°κ²°
# URI/ν΅ν© μμ μλ³μ νμ : mongodb+srv://{μ μ μ΄λ¦}:{μ μ λΉλ°λ²νΈ}@cluster-prac.hubjn.mongodb.net/{κΈ°λ³Έ λ°μ΄ν°λ² μ΄μ€ μ΄λ¦}?retryWrites=true&w=majority
URI = "mongodb+srv://shuser:rRawtPfp7t9J2Wvh@cluster0.8dwi3.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
client = MongoClient(URI)
### client κ°μ²΄μ fieldλ‘ λ°μ΄ν°λ² μ΄μ€ μμ±/μ ν
DATABASE = 'myFirstDatabase' # λ°μ΄ν°λ² μ΄μ€ μ΄λ¦
database = client[DATABASE]
### λ°μ΄ν°λ² μ΄μ€μ collection μ‘°μ
COLLECTION = 'sh-collection' # 컬λ μ
μ΄λ¦
collection = database[COLLECTION]
### collectionμ document μ½μ
: 'JSON' ννλ‘ μΆκ°
# _id:ObjectId("κ³ μ λ²νΈ") ν΅ν΄ κ° λ¬Έμμ κ³ μ λ²νΈ λΆμ¬νμ¬ κ΅¬λΆ (κ³ μ λ²νΈλ λ³κ²½ κ°λ₯νλ μ€λ³΅λμ΄μλ μλλ€.)
collection.insert_one(document = {"hello":"suhyun"})
collection.insert_one(document = {"today":"first day of mongodb"})
doc_1 = collection.list()
doc_2 = collection.find_one()
print(doc_1)
print(doc_2)