AIB 데이터 엔지니어링 414 Application Programming Interface (+알고리즘)
- Interface: 두 개를 연결시켜주는 것.
- PEP 249: DBAPI v2.0 기준문서. API가 이를 바탕으로 작성되기 때문에 형식이 동일하다.
- SQLite: 파일형 데이터베이스. 간단하게 DB 구축하고 실험하기에 적합하다. 하지만 기능이 제한되기 때문에 고급 쿼리는 실행하기 어렵고, 서버를 띄우고 작업하지 않기 때문에 실행중인 메모리 상에 상주하게 된다면 데이터 손실도 생길 수 있다.
- 연결: Connection을 establish하고 소통할 수 있는 cursor 만들어서 통신.
import sqlite3 # 연결 세션 보관 con = sqlite3.connect('dbfile.db') # dbfile.db 파일 불러오기. 확장자 .sqlite3 등이 있다. 없으면 생성 # con = sqlite3.connect(':memory:') # 메모리에서 실행 # 소통 cursor cur = con.cursor() # Query 실행 cur.execute(''' CREATE TABLE my_table ( id INTEGER PRIMARY KEY, cell VARCHAR(32) ); ''') id_0, cell_0 = 2, 'something' id_1, cell_1 = 4, 'nothing' records = [ (id_0, cell_0), (id_1, cell_1) ] cur.execute('INSERT INTO my_table VALUES (?, ?)', (id_0, cell_0)) # for record in records: cur.execute('INSERT INTO my_table (id, cell) VALUES (?, ?);', record) # commit con.commit() # 결과 조회 cur.fetchall() # fetchmany fetchall # return result one by one
- 연결: Connection을 establish하고 소통할 수 있는 cursor 만들어서 통신.
- 클라우드/원격 데이터베이스. 반대는 온프레미스
- URI uniform resource identifier: 리소스 / 정보 찾고 받아올 때 사용
- 형식:
서비스://유저_이름:유저_비밀번호@호스트:포트번호/경로
- 프로그램에 포트번호가 있을텐데, PostreSQL은
5432
- 형식:
- 연결:
psycopg2
로 파이썬과 PostgreSQL 데이터베이스와 연결 가능import psycopg2 conn = psycopg2.connect( host="서버 호스트 주소", database="데이터베이스 이름", user="유저 이름", password="유저 비밀번호")
- URI uniform resource identifier: 리소스 / 정보 찾고 받아올 때 사용
- 배열: 연속된 공간. 하나의 값을 지워준다면 그 지운 것을 매꾸어주어야 한다. 즉 앞으로 한 칸씩 당겨짐. 삭제 삽입이 비효율적
- 연결리스트: 0, 1, 2가 있을 때 1을 지워도 0과 2로 연결이 된다. 하지만 비연속적인 공간이라 검색이 느릴 수 있다.
- 연결리스트의 시작 head 끝은 tail 후 NULL. 파이썬은 자동으로 메모리 정리해줌. garbae collection. 그런데 진행동안 프로그램 스톱되어 느려질 수 있다. 또한 언어 레벨에서 포인터도 지정해주어서 ㅇㅋ
시간복잡도: 얼마나 시간 걸리는지 계산해볼 수 있다. - for 안에 for가 들어 있으면 O(n^2) - for 하나는 O(n)
sorting: easy sorting, standard sorting - easy sorting - 삽입: 지금 하나와 다음 하나를 비교해볼 수 있다. - 선택: 전체 중 하나 작은 값을 맨 앞으로 보냄 - 버블: 버블: 삽입과 비슷함. - 시프트가 많다. - 전부 다 O(n^2) 너무 길다. - standard sorting - 셸 정렬: 건너 뛰어서 비교하는데, 간격을 점차 줄인다. - 힙 정렬: 힙 트리 - 이미 정렬되어 정리되는 구조에서 하나씩 꺼냄. - 퀵 정렬: 임의의 pivot을 기준으로 왼쪽끼리 정렬, 오른쪽끼리 정렬. 힙과 비교했을 때 구조를 저장할 메모리가 필요 없어서 퀵을 사용한다. - 병합 정렬: 균등한 크기로 나누어 정렬. 퀵의 임의와 다름. 합병할 때 추가적인 공간이 필요하기 때문에 우선순위에서 밀려남. - 기수 정렬: 비교 연산 없이 정렬하는 알고리즘. 자릿수에 대한 큐에 삽입하고 꺼내는 방식으로 한다. 단점으로는 자릿수마다 보관할 공간이 필요함.
stable sorting vs. unstable sorting: 중복 요소의 순서가 바뀔지 안 바뀔지에 대한 부분
binary search, deque, hashmap 찾아보기.
댓글남기기