7장 데이터 구조와 처리 (2)

young·2022년 8월 22일
0

📖 7장 keywords

  • 데이터를 조직화 하는 방법
  • 아이노드
  • 벡터 (수집/분산)
  • 객체 지향
  • 데이터 정렬
  • 효율과 성능

대용량 저장장치

블록: 디스크 드라이브의 기본 단위
클러스터: 연속적인 블록

데이터를 디스크에 저장하는 방법은
파일 이름을 디스크에 저장하고,
파일 이름과 데이터가 저장된 디스크 블록을 연결한다.

연결하는 방법은, 블록 중 일부를 아이노드로 지정한다.
아이노드란 디스크 블록에 대한 index + node를 합친 단어다

아이노드는 파일 이름, 데이터가 들어 있는 블록에 대한 인덱스 등 파일의 여러 정보를 포함한다.

벡터를 사용한 I/O

벡터: 같은 데이터가 연속적으로 모여 있는 고정된 크기의 데이터 구조

mp3 형식의 오디오 데이터를 오디오 장치에 전달한다면?

mp3 파일은 여러 프레임으로 이루어졌다.
운영체제에 프레임 각 부분을 가리키는 포인터의 집합(벡터)를 전달하는 것이 효율적이다.

운영체제가 오디오 장치에 데이터를 쓸 때 각 부분을 하나로 합쳐주면 더 좋다.

운영체제는 벡터에 저장된 데이터를 사용해 순서대로 오디오 데이터를 조합한다.
벡터를 활용해 데이터를 쓰는 것은 수집, 데이터를 읽는 것은 분산이라고 한다.

객체 지향의 함정

객체 지향 프로그래밍은 C++을 통해 널리 사용하게 되었다.

객체에는 메소드와 프로퍼티가 들어있다.
객체는 자신이 사용할 메소드에 대한 포인터를 가지고 다녀야 한다.
따라서 객체의 데이터가 데이터만 저장하는 데이터 구조처럼 짜여져 있지 않다.

성능이 결정적으로 중요할 때에는 전통적인 배열을 사용하는 것이 낫다고 볼 수 있다.

정렬

데이터를 조회하기 위해서 정렬이 필요할 때도 있고,
후에 빠르게 데이터에 접근하기 위하여 데이터를 정렬하여 저장하기도 한다.

데이터 구조를 순회하면서 비교를 여러 번 수행한다.

효율성과 성능

오늘날 전자 제품의 발전으로 덜 효율적인 알고리즘을 돌리기 위해 더 많은 프로세서를 사용하면,
더 효율적인 알고리즘을 더 적은 프로세서에서 돌리는 것보다 좋은 성능을 얻을 수도 있다.

성능과 효율이 분리된 것이다.

이를 응용하는 방법으로
데이터베이스 샤딩(sharding)이 있다. (= 수평 파티셔닝, horizontal partitioning)
샤딩은 데이터베이스를 각각 다른 기계에서 실행되는 여러 샤드로 나누는 방식을 말한다.

요청이 들어온 연산을 모든 샤드에 전달한다.
-> 컨트롤러가 결과를 하나로 모은다.

=> 작업을 병렬적으로 수행하기 때문에 성능이 향상된다. (다중 프로세서 사용)

profile
즐겁게 공부하고 꾸준히 기록하는 나의 프론트엔드 공부일지

0개의 댓글