1. NoSQL
DB는 RDB(SQL)과 NoSQL로 나뉜다.
- RDB : 관계형 데이터베이스. SQL 쿼리로 데이터를 가져올 수 있다. 처음부터 정리된 상태(스키마, 테이블간 관계, Primary key)로 저장되기 때문에 꺼내올 때도 쉽다. 하지만 짧은 시간 안에 많은 데이터를 저장하기는 어렵다.
- NoSQL : 관계형 데이터베이스가 아닌 모든 DB. 몽고DB, 카산드라 등이 있다. 데이터를 막 때려넣을 수 있기 때문에 큰 기업에서 많이 쓴다. 일례로 인스타그램도 처음 출시됐을 때는 RDB를 썼지만 사용자가 많아지자 NoSQL로 넘어갔다. NoSQL은 넣을 당시 막 집어넣었기에 꺼내올 때 생각을 많이 해야할 수도 있다.
a. NoSQL의 종류
- Key-Value 타입 : 데이터를 Key-Value의 쌍을 속성으로 하는 배열 형태로 저장합니다. 여기서 Key는 속성 이름을 뜻하고, Value는 속성에 연결된 데이터 값을 의미합니다. Redis, Dynamo 등이 대표적인 Key-Value 형식의 데이터베이스입니다.
- 문서형(Document) 데이터베이스 : 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미합니다. JSON 유사 형식으로 데이터를 문서화하는 것이 보통입니다. 각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리합니다. 대표적인 문서형 데이터베이스에는 MongoDB가 있습니다.
- Wide-Column 데이터베이스 : 데이터베이스의 열(column)에 대한 데이터 관리를 집중하는 데이터베이스입니다. 각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리할 수 있습니다. 하나의 행에 많은 열을 포함할 수 있어서 높은 유연성을 자랑합니다. 데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터 분석에 주로 사용되는 데이터베이스 형식입니다. 대표적인 wide-column 데이터베이스에는 Cassandra, HBase가 있습니다.
(출처 : 코드스테이츠 강의노트)
b. MongoDB Atlas
https://account.mongodb.com/account/login
오늘 써볼 DB. MongoDB Atlas는 NoSQL 클라우드 DB 서비스다. 가입해서 cluster를 생성하면 이용할 수 있다.
2. python과 MongoDB 연결
pymongo 라이브러리를 이용해 MongoDB Atlas와 연결될 수 있다.
# 연결 정보
HOST = ''
USER = ''
PASSWORD = ''
DATABASE_NAME = '' #데이터베이스 이름
COLLECTION_NAME = '' #테이블 이름
MONGO_URI = f"mongodb+srv://{USER}:{PASSWORD}@{HOST}/{DATABASE_NAME}?retryWrites=true&w=majority"
# 연결
client = MongoClient(MONGO_URI)
database = client[DATABASE_NAME]
collection = database[COLLECTION_NAME]
# 연결된 테이블에 데이터 insert
collection.insert_one(document=openweather) # openweather는 JSON 데이터
collection.insert_many(documents=octokit) # insert_many를 이용하면 여러개의 데이터도 입력이 가능하다
로컬 컴퓨터의 csv 파일을 mongoDB로 업로드하기
# DB 연결
client = MongoClient(MONGO_URI)
database = client[DATABASE_NAME]
# 만들려던 테이블이 이미 만들어져 있다면 없애주자
if COLLECTION_NAME in database.list_collection_names():
database.drop_collection(COLLECTION_NAME)
# 테이블 생성
collection = database[COLLECTION_NAME]
# 로컬 컴퓨터 데이터 준비
data = pd.read_csv('./titanic.csv')
passenger = data.to_dict('records') # dict 타입으로 변환
# mongoDB에 insert
collection.insert_many(documents=passenger)
데이터를 꺼내올 수도 있다.
# 데이터의 name 필드를 가져오는 쿼리
result = collection.distinct('name')
# set 타입으로 변환
names = set(result)
'Codestates AI 부트캠프 > 4. Data Engineering' 카테고리의 다른 글
[데이터 엔지니어링] 3-1 Docker (0) | 2023.06.26 |
---|---|
[데이터 엔지니어링] 2-3. API (0) | 2023.06.03 |
[데이터 엔지니어링] 2-2. Crawling (1) | 2023.06.03 |
[데이터 엔지니어링] 1-4 파이썬으로 DB 불러오기 (0) | 2023.05.26 |
[데이터 엔지니어링] 1-3 SQL(2) (0) | 2023.05.26 |