728x90
반응형

CS 24

Mysql 인덱스

인덱스란? 번역을하면 바로 색인이라는 단어로 번역된다. 색인은, 검색하면 책속의 낱말이나 어떤 챕터나 구절들을 빠르게 찾아볼 수 있게 쪽수 정보를 나타내주는 것을 뜻한다. 이 개념을 DB에 적용시킨 것이다. 인덱스는 어떻게 구성하는가? 인덱스는 CREATE INDEX 키워드로 구성이 가능하다. Team 이라는 테이블이 이렇게 있다. id(primary key) name member_id grade 1 홍길동 1 1 2 가나다 2 2 3 고길동 3 3 4 나길동 4 4 이름만으로 인덱스를 구성하고 싶다면 아래와 같이 수행해주면 된다. CREATE INDEX 테이블(칼럼); CREATE INDEX team_index team(name); 이렇게 해주게 되면 name의 오름차순 순서로 정렬되게 된다. 왜 정렬..

운영체제 3강

이 포스팅은 반효경 운영체제 강의 를 듣고 정리하는 글이다. fork, exec실습 코드는 깃허브에 있다. 프로세스 생성 부모 프로세스는 1개만 존재하고, 자식 프로세스들을 생성한다. copy on write (cow) 기법 주소 공간 자식은 부모의 공간을 복사한다. 자식은 그 공간에 새로운 프로그램을 올린다. 유닉스에서는 fork 시스템 콜 을 통해 부모 프로세스와 똑같이 복사한다. 수행 부모 자식이 공존하며 수행되는 모델 자식이 종료될 때까지 기다렸다가 수행되는 모델 프로세스 종료 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알린다. (exit) 자식이 부모에게 output data를 보낸다. 프로세스의 각종 자원들이 운영체제에게 반납됨 부모 프로세스가 자식의 수행을 종료시킨다. (abort..

CS/운영체제 2022.08.22

운영체제 2강 - 2

동기식, 비동기식 입출력 프로세스가 입출력이 진행되는 동안에 CPU 점유는 중요하지 않음 입출력 명령을 계속 대기하면 동기, 해놓고서 다른 작업을 수행하면 비동기 구현 1 I/O가 끝날때 까지 계속 대기해 CPU를 낭비시킴 매시점 하나의 입출력만 일어남 구현 2 입출력이 완료될 때까지 해당 프로그램에서 CPU를 빼앗음 다른 프로그램에서 CPU를 가지고 연산 수행 입출력 작업이 완료되면 해당 프로세스에 CPU할당 스레드 프로세스 내부의 CPU 수행단위가 여러개 있는것이 스레드 프로세스마다 code, data, stack 이 주어짐 CPU수행과 관련된정보는 스레드가 별도로 가지고있고, 나머지는 공유한다. 스레드의 구성 program counter register set stack 스레드의 장점 다중스레드 구..

CS/운영체제 2022.08.18

운영체제 2강 - 1

반효경 운영체제 강의 정리 컴퓨터 시스템 2 사용자 프로그램이 운영체제를 통해서 무언가를 해야할 때에는 시스템 콜을 이용한다! 프로그램 카운터 (PC, Program Counter) 프로그램 카운터는 CPU안에 포함되어 있는데, 이는, 메모리에서 다음 실행되어야할 작업의 주소가 들어있다. CPU는 이 주소를 바탕으로 다음 작업을 찾아가 작업을 수행하게 된다. 인터럽트가 발생한다면? 인터럽트가 발생한 경우에는, 프로그램 카운터가 가리키고 있는 주소로 바로 이동하지 않고, CPU제어권이 OS로 가게 되면서 해당 인터럽트를 우선으로 처리해준다. 동기식, 비동기식 입출력 비교적 최근에 내가 29cm의 지원을 했을때를 떠올려본다. 그때 당시, 자바에서 csv파일을 읽어들여야 하는 작업이 있었다. 그 부분을 토대로..

CS/운영체제 2022.08.11

운영체제 1강

반효경 교수님의 운영체제 강의를 정리하는 포스팅 System Structure & Program Execution 1 📌 컴퓨터 시스템 구조 컴퓨터 시스템의 구조는 아래와 같다. 이미지 출처 - https://asfirstalways.tistory.com/115 컴퓨터 시스템에는 크게 중앙 처리장치인 CPU, 메모리, 그리고 외부 장치들인 디스크, 키보드 등등 으로 구분된다. 컴퓨터는 외부에서부터 데이터를 읽어와 연산을 한 후에 다시 출력해주는 방식으로 처리한다. 📌 CPU CPU는 Memory에 올라간 프로그램들의 명령들을 하나하나 읽어들여 수행하는 역할을 담당한다. I/O마저도 이 CPU가 관리하게 되면, 너무나도 많은 인터럽트가 발생하게 된다. 이런 경우에는 CPU가 효율적이지 못하다고 할 수 있다..

CS/운영체제 2022.08.11

쿼리 개선 2

쿼리 속도 개선 1.6초 -> 0.4초 메타테이블과의 조인을 해서 정보를 얻어오는 과정 서로 논리적인 데이터베이스는 다른데 mysql에서 뷰 테이블을 사용하고 있음 그런데 유저 개개인의 데이터에서 매칭시키는 메타테이블의 idx 칼럼이 인덱스가 정해져있지 않았다. 그래서 유저 개개인의 데이터를 전부 조회해서 매칭되는 데이터를 추리고 있었다. 개선안 100개 이상의 row를 탐색하던 것이 25개만 탐색하는것으로 바뀐 실행이 나오게 된다. 그러면서 Extra가 제외되고 참조 정보가 인덱스로 가게 된다. 지금은 100개인 데이터였지만, 만약에 조회할 데이터가 10만 건, 100만 건 이렇게 늘어날 수록 시간은 증가했을 것이다. 진행중인 mysql 독서 스터디가 이런 생각을 하는데 도움을 많이 줬다.

쿼리 작성 및 최적화

Real Mysql real mysql 책을 읽으면서 스터디 한 내용을 정리하고자 한다. 일단 11.1 부터 11.3까지의 내용만을 정리했다. 내가 사용하는 애플리케이션에서 특정 데이터를 테이터베이스에 저장하거나 조회를 할 때 SQL이라는 문장을 사용해야 한다. 데이터베이스의 테이블이나 구조를 변경할때는 DDL(데이터 정의 언어) 테이블의 데이터를 조작을 위한 언어는 DML(데이터 조작 언어) 이다. SQL작성 규칙은 mysql의 서버 시스템 정책에 따라 바뀔 수 있다. 이 정책은 데이터베이스에 어떤 테이블의 데이터들이 들어가지 않았을 때 설정하는 것이 중요하다. 영문 대소문자 구분 Mysql에서는 설치된 운영체제에 따라서 대소문자를 구분하는데, DB의 테이블이 디스크의 디렉토리나 파일로 매핑이 되기 때..

프로세스 상태

사용자가 프로그램을 실행시키면 메모리에 올라가며 프로세스가 실행된다. 지금의 컴퓨터는 수많은 프로세스들이 실행된다. 시분할 시스템이 사용되는 운영체제에서는 여러개의 프로세스를 돌아가면서 실행한다. cpu가 병렬적으로 여러 프로세스를 막 실행시키는것이 아니라, 한 순간에 하나의 프로세스만 처리가 가능하다. 그렇지만, 그 속도가 우리가 눈치챌 수도 없을 만큼의 속도로 분할되어 실행되기 때문에 여러 프로세스가 동시에 실행되는것 처럼 느끼게 한다. 프로세스는 시분할 시스템 처리를 위한 5가지의 상태가 존재한다. 생성 이 상태는 PCB를 생성하고, 메모리에 프로그램 적재를 요청한 상태 메모리에 프로그램 적재를 승인받으면 준비상태로 넘어간다. 준비 CPU를 사용하기 위해 기다리고 있는 상태 준비 상태의 프로세스는 ..

CS/운영체제 2022.08.10

이진트리

이진 트리 순회 불과 반년전만 해도 이름만 들었지 마냥 먼곳에 있다고 생각했던 자료구조들이다. 근데 공부하면서 깨닫는 것은 뭐를 알아야 준비를 하고 공부도 하고 재밌게 문제도 풀 수 있다는 것이다. 그것이 바로 코딩테스트 😱 DFS니 BFS니 하려면 일단 스택, 큐, 배열, 재귀에 대해서 알아야된다고 생각했다. 물론 그리고 지금 포스팅하는 이 이진 트리에 대해서도 좀 짚고 넘어가야 한다고 봤다. 이진트리란? 이진트리는 각각의 노드가 아래 자식 노드를 최대 두개를 가진 트리 자료 구조이다. 위 이미지는 위키백과 에서 가져와봤다. 깊이(depth)는 3이고 크기는 9인 이진트리이다. 1 2 3 4 5 6 7 이런식으로 구성된 트리가 있을 때 전위 표기식으로 순서를 나타내는 알고리즘을 구성해보자 코드 publ..

CS/자료구조 2022.08.10

Select Sort 선택정렬

선택 정렬 (Select Sort) 선택 정렬은 현재 위치에 들어갈 데이터를 찾아 선택하는 알고리즘이다. 오름차순을 기준으로 정렬한다. 개념 제자리 정렬의 알고리즘 중 하나이다. 정렬 되지 않은 입력된 배열 외에 다른 메모리를 사용하지 않는다. 해당하는 n번째에 넣을 정렬된 원소 자리는 이미 정해져있고, 어떤 값을 넣을지를 선택하는 알고리즘이다. 동작 과정 주어진 배열에서 최솟값을 찾는다. 그 최솟값을 배열의 맨 앞의 수와 자리를 교체해준다. 맨 처음 값을 뺀 나머지 배열로부터 최솟값을 찾는다. 교체한 다음 맨 앞의 배열과 값을 바꿔준다. 이 과정을 정렬이 완료될 때까지 계속 반복한다. 보기 좋은 예시 이미지를 가져와봤다. 이제 그러면 구현을 해보도록 하자. Select Sort 구현 n 길이를 가진 배..

CS/알고리즘 2022.08.10
728x90
반응형