Welcome! 🙋‍♂️ View more

분류 전체보기 44

[DB] Index란 (feat. B+-Tree)

DB의 성능 DB는 많은 사람들이 공통으로 사용하는 데이터 모음이기 때문에, 대량의 데이터가 조회/저장되는 일이 빈번하게 발생한다. 그리고 이를 빠르게 진행하는 것이 무엇보다 중요하다. 이때 DB의 성능과 관련된 핵심이 디스크 I/O를 어떻게 줄이느냐이다. 디스크 I/O = 플래터(원판)을 돌리고, 디스크 헤더를 이동하여 데이터를 읽는 것을 의미한다. 물론 순차 I/O가 랜덤 I/O보다 빠르다. 하지만 현실은 대부분 랜덤 I/O이며, 이를 순차로 바꾸어 보자는 아이디어에서 Index와 쿼리 튜닝이 나타났다. Index란? Index란 추가적인 저장 공간을 활용하여 DB 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 DB 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래 걸릴..

Engineering 💻/DB 2022.02.13

[PostgreSQL] Python에서 다중 행을 Insert하는 다양한 방법과 비교

🤔 Python으로 DB에 데이터를 입력할 때, 다중 행을 입력하는 경우가 많을 것이다. 이를 어떻게 실행해야 가장 빠르게 입력할 수 있을까? 😀 이러한 고민에 3가지 방법을 실행해봤고, 각 방법이 시간이 어떻게 차이나는 지 공유해보고자 한다. 먼저 입력할 데이터와 DB를 연결하자.사용될 데이터는 10만개의 행과 3개의 열을 가진 Integer 데이터를 사용할 것이다. DB는 PostgreSQL로 구축한 DB를 활용할 것이다.import timeimport psycopg2N = 100000data = [(i,i,i) for i in range(N)]print('data length: ', len(data)) #10만개의 행db = psycopg2.connect(host='localhost', dbna..

Engineering 💻/DB 2022.02.10

[알고리즘] 다이나믹 프로그래밍 (feat. Leetcode)

다이나믹 프로그래밍이란? 큰 문제를 작은 문제로 나누어 풀고, 작은 문제의 답을 재활용하는 기법을 의미한다. 메모리 비용을 활용하여 시간적 비용을 줄이는 방식이다. 👉 조건 부분 반복 문제: 작은 문제가 반복되는 경우 최적 부분 구조: 같은 문제는 구할 때마다 정답이 같을 경우 작은 문제가 반복되고 그 문제의 답이 같기 때문에, 굳이 작은 문제에 대한 계산을 반복하지 않고 이를 메모리에 저장하여 활용하는 것이다. Fibonacci 수열 DP를 설명할 때 가장 기본적으로 예를 들 수 있는 것이 Fibonacci 수열이다. 이는 f(n) = f(n-1) + f(n-2)의 점화식을 가진다. 아래 Leetcode 문제를 재귀 함수를 이용하는 방법과 동적 프로그래밍을 사용하는 방법으로 풀어볼 것이다. https:..

[자료구조] 힙 (Heaps)

Heap이란? 👉 개념 우선순위큐(Priority Queue)에서 사용되는 자료구조이며, 최대값이나 최솟값을 찾는 데 소요되는 시간이 O(1)이다. 하지만 노드 수정시, 힙구조 유지하기 위해 heapify과정을 거쳐 구조를 유지한다. 이는 결국 O(log n)의 시간 복잡도를 가진다. 👉 특징 Tree 중 배열에 기반한 완전 이진 트리 형식(왼쪽에서 오른쪽으로 순서대로 차곡차곡 채워진 이진 트리)을 가지며, 최대힙/최소힙 두 종류가 있다. 최대 힙 key(부모 노드) ≥ key(자식 노드) 최소 힙 key(부모 노드) ≤ key(자식 모드) 완전 이진 트리이기 때문에 삽입/삭제 연산이 배열의 가장 끝에서 발생한다. BST의 경우 삽입/삭제를 위해서 값을 찾아주는 과정이 필요했지만, 힙은 일단 배열의 맨 ..

[자료구조] Binary Search Tree

Binary Search Tree란? 👉 개념 Binary Search Tree(BST)는 효율적인 탐색을 위한 데이터 저장 방법이다. 👉 규칙 노드에 저장되는 키는 유일하다. 부모의 키 값이 왼쪽 자식 노드의 키 값보다 크다. 부모의 키 값이 오른쪽 자식 노드의 키 값보다 작다. 왼쪽과 오른쪽 서브트리도 BST이다. 👉 장단점 장점 탐색 연산 시간복잡도가 O(log N)이다. (명확히 말하면 O(h)) 단점 편향 트리의 경우 저장 순서에 따라서 한 쪽으로만 노드가 추가되는 경우가 발생한다. 최악의 경우는 탐색 시간복잡도가 O(N)이다. 배열보다 많은 메모리를 사용한다. Leetcode 문제를 통한 BST 구현 BST를 직접 구현하는 것이 도움이 될 것이라 생각하여 아래 문제를 풀어보았다. 1. 탐색: ..

[DB] SQL과 NoSQL

데이터를 다룸에 있어서 SQL과 NoSQL을 필수적으로 접해야하는 언어이고, 그 차이도 분명히 할 필요가 있다고 생각했다. 이 전에 정리를 했지만, 좀 더 자세히 정리를 해보기로 했다! 😤 https://deep-flame.tistory.com/7 [DB] 데이터베이스 기초 데이터베이스란? 데이터베이스란 여러 사람들이 공유하고, 사용될 목적으로 통합하여 관리되는 데이터의 집합 데이터 베이스를 사용하기 이전에는 파일 시스템을 이용하여 데이터를 관리했다. deep-flame.tistory.com SQL Structured Query Language의 줄임말로, 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어이다. 👉 SQL 문법의 종류 DDL (Data Definitio..

Engineering 💻/CS 2022.02.02

[Docker] 컨테이너와 도커 그리고 쿠버네티스

Cloud를 공부하다보면 컨테이너/도커/쿠버네티스라는 개념이 자주 등장한다. 간단히 말하면 과거 가상머신의 불편함을 해결하고자 컨테이너와 도커라는 개념이 생겨났고, 컴퓨팅 파워가 늘어나다보니 다수의 도커와 컨테이너를 운영해야하는 상황이 발생하여 쿠버네티스가 생겨났다. 해당 글에서는 이 항목들에 대해서 살펴볼 것이다. 도커와 컨테이너 소프트웨어는 OS와 라이브러리에 의존한다. 따라서 성격이 다른 컴퓨터(OS, 라이브러리 버전이 다름)에서 같은 소프트웨어를 실행할 때 어려움을 느낄 수 있다. Docker는 Container기반의 가상화 플랫폼이다. Docker를 사용하여 Container를 생성할 수 있으며, 같은 Container를 여러 개 생성하는 것도 가능하다. 이렇게 위의 문제를 해결할 수 있는 것이..

[Hadoop] Spark 동작 단계

Spark는 Hadoop의 연산 프레임 워크 중 하나로서, 대규모 통합 분석 엔진으로 가장 범용적으로 쓰이는 기술 중 하나이다. 이에 동작 단계에 대해 좀 더 상세히 알아보기 위해 블로그에 정리해보기로 했다. 해당 자료는 이전에 작성했던 글이다. https://deep-flame.tistory.com/10 [Hadoop] 연산 프레임워크 (feat. MapReduce, Spark, Flink) 대다수 프레임워크는 사용자가 정의하거나 합성한 임의의 연산을 잘게 나눠서 분산 실행한다. Hadoop MapReduce 대용량의 데이터를 분산/병렬 컴퓨팅 환경에서 처리하기 위해 제작된 모델이다. 단순 deep-flame.tistory.com Spark의 동작 단계 크게 5단계로 이루어진다. DataFrame이나 ..

[D/L] CNN 이란? (feat. DACON)

CNN(Convolutional Neural Networks)이란? 이미지인식과 음성 인식 등의 주변 정보에 영향을 받는 데이터에 적합한 딥러닝 기법이다. Ex. 흰색 와이셔츠 이미지가 있다면 흰색의 픽셀 주변에는 흰색일 확률이 높다. 이러한 형상이 가진 정보를 CNN은 이해할 가능성이 높다. 만약 이런 데이터를 1차원 데이터로 바꾼 다음 단순 딥러닝을 적용하게 된다면 이러한 형상이 가진 공간정보를 제대로 살릴 수 없다. CNN의 구조 1. Convolution (합성곱 연산) 사람은 사물을 인식할 때 이미지 전체를 보는 것이 아니라, 사물의 위치를 본다. 이부분에 해당되는 것이 Filter이다. 즉 객체를 단순 1차원 데이터로 바꾸는 것이 아니라 객체가 인식된 정보를 점으로 나타내어 1차원 데이터로 바..

AI 2022.01.16

[CS] 객체 지향 프로그래밍

객체 지향 프로그래밍 이란? 현실 세계는 사물(객체)로 이루어져있고, 발생하는 사건들은 사물간의 상호작용을 통해 이루어진다. 여기에서 착안하여 클래스를 이용해 연관있는 객체의 속성과 행위를 하나로 묶고, 그 객체들 간의 상호작용을 구현하는 프로그래밍 방법이다. 장단점 장점 재사용성 남이 만든 클래스를 가져와서 그 속의 속성과 함수를 사용할 수 있고, 상속을 통해 확장하여 사용할 수 있다. 코드 중복 제거 코드의 중복을 제거하여 코드 불일치를 방지할 수 있다. 유지보수 많은 인스턴스들이 한 클래스 내 변수와 함수를 사용한다. 함수에 버그가 있다면 그 부분만 수정하면 따로 인스턴스들의 수정이 필요 없다. 단점 개체 수가 증가하면 용량이 커질 수 있고, 처리 속도가 상대적으로 느리다. 5가지 키워드 1. 추상..

Engineering 💻/CS 2022.01.16
반응형