Index Trank·dedorock을 대충 설명해 보도록 하겠습니다.

개시하다


저는 Rails에서 프로그래밍을 시작했지만 Rails의 액티브 레코드(Active Record)의 부드러움에 응석받이로 자라서 DB만 이해했어요...(Rails를 게시하려는 것이 아니라 단순하게)
색인, 거래 같은 건 말로 분위기를 알 것 같지만 솔직한 건지
저는 그렇게 생각하지만 요즘에 직장을 잘 구하다 보면 그 기초에 대한 질문을 많이 받아요. 이 질문을 받을 때마다 의기소침해요. 그래서 단숨에 공부하고 메모로 남겨두세요!그러니까 이 기사가 나온 이유 w.

인덱스


대충 지수는?


광사원의 목록처럼 느껴졌으면 좋겠어요!
예를 들어, 내가 사전에서 '프로그래밍' 을 찾으려고 할 때, 사전은 1페이지부터 찾지 않는다
아마 "모"한 줄을 건너뛰고 거기서 넘어갈 것 같아요. 아마 이런 느낌일 거예요.
그럼 색인을 열 전체에 붙이는 게 낫지 않을까요?이렇게 말하는 것은 좀 당연한 의문이지만 그것은 안 된다.
그것에 관해서는 ↓로 설명한다.

색인을 잘 생각하세요.


ID
name
age
1
kimura
20
2
anndo
35
3
sato
24
4
nakamuura
18
예를 들어, 위의 User 테이블이 있다고 가정합니다.
따라서 User의 name 열에 색인을 붙여 넣은 후 일반 테이블과 분리하여 다음 테이블을 만듭니다.
ID
name
2
anndo
1
kimura
4
nakamura
3
sato
기존 User 테이블과 달리 열은 ID 및 Name에만 있고 name 열의 값도 오름차순(a→z순) 순서로 저장됩니다.
색인은 이것을 사용하여 검색을 가속화합니다.
여기 있다
모든 열에 색인을 붙이는 게 좋지 않나요?
이런 의문에 대해서.
"그럼 안되지!"
그렇게 말해도 돼.
즉, 색인을 붙이면 일반적인 표와 달리 색인을 사용하는 표의 두 곳에 데이터가 저장된다는 것이다.따라서 인덱스는 검색할 때 빨라지지만 데이터를 두 곳에 저장하는 부분은 처리가 많아지는 단점이 있다.
따라서 모든 색인은 좋지 않다.(물론 상황 발생을 전제로 한다)
일반적으로 색인을 붙이는 것이 가장 좋은 조건에 관하여
  • 검색 대상의 줄 수가 많음
  • 검색 대상 표에서 검색 항목의 중복이나 중첩이 비교적 적다(예: 외부 버튼 등)
  • 검색 객체에 대한 업데이트가 적음
  • 검색 객체의 추가/삭제 감소
  • 이 네 항목은 색인의 추가 조건이다. (여러 번 말했지만, 이것은 예이다😓)

    실무, 일, 총무


    대략적인 거래는 무엇입니까?



    부모 A는 아이에게 B에 1000엔의 잔돈을 주려고 한다

    데이터베이스에서
  • A자의 지갑에서 1000엔을 뺀 처리
  • B군의 지갑 1000엔 추가 처리
  • 이 두 동작을 진행하다.

    그런데 왜 A군의 지갑에서 1천엔이 줄었는지 모르겠지만 B군의 지갑에서 1천엔을 늘릴 수 없게 됐다.
    이때 1000엔이 데이터베이스에서 사라졌다.(이건 맛없는데...)
    1000엔 어디 갔어!!!!
    여기 나타난 건 거래야.
    거래가 이번 상황입니다.
  • A자의 지갑에서 1000엔을 뺀 처리
  • B군의 지갑 1000엔 추가 처리
  • 이 두 관련 처리가 제대로 실행되지 않은 경우
    원래 거래 자체가 없어요.

    A자의 지갑은 1천엔이 줄지 않고, B군의 지갑도 1천엔이 늘어나지 않는다는 것이다.
    거래야.

    작은 장사를 고려하다


    거래를 대충 알아봤자 어떻게 거래가 이뤄졌을까?
    사무에 대하여
  • 일련의 프로세스가 정상적으로 완료되고 처리가 확정됨COMMIT
  • 어떤 이상이 발생했을 때 처리하지 않음ROLLBACK
  • 라는 두 가지 존재를 드러냈다.
    아까 예시대로 가면...

    이런 느낌으로 거래 시작→제출
    하면, 만약, 만약...

    ROLLBACK 실행, 처리할 것이 없습니다.
    이러한 기능은 다음과 같습니다.

    ACID 특성


    표준 규격으로 불리다

    1. 원자성(Atomicity)


    거래가 끝났을 때 그 안에 포함된 업데이트 처리가 모두 실행되거나 모두 실행되지 않은 상태에서 종료되는 성질을 보증합니다.
    COMMIT를 통해 업데이트를 결정하거나 ROLLBACK를 통해 복원을 결정하는 두 가지 선택입니다.

    2. 일관성(Consitency)


    거래에 포함된 처리는 각자의 제약을 만족시키는 성격이다.
    거래 과정에서 제약을 위반한 처리가 있으면 처리를 중단하고 업무 집행 전으로 돌아가 데이터의 일치성을 유지한다.따라서 어떤 데이터는 업데이트되었지만 다른 데이터는 업데이트되지 않은 상태가 아니다.

    3. 독립성(Isolation)


    만약 어떤 거래가 진행 중이라면 다른 거래의 영향을 받지 않는다.
    업무를 수행하는 과정에서 다른 업무가 데이터를 업데이트하더라도 실행 중인 업무는 업데이트 결과의 영향을 받지 않는다.

    4. 영구성(Durability)


    거래가 끝난 후 데이터 상태는 저장되고 분실되지 않습니다.
    이러한 성질을 확보하기 위해 일반적으로 거래의 기록을 기록하고 고장이 발생한 경우 로그를 사용하여 고장 발생 전의 상태로 회복한다.

    고정 자물쇠


    대략적인 자물쇠는 무엇입니까?



    자꾸 용돈을 주시는 B군도 가끔 A자에게 답례하고 싶어한다.

    그러나 타이밍이 좋지 않아 A자와 B군은 똑같은 타이밍에 서로 돈을 냈다.
    현실 세계라면 보통 1000엔을 교환하면 된다
    이거 데이터베이스에서 일어나면 곤란한데 왜 힘들까

    위의 그림에서 보듯이 A씨의 처리와 B씨의 처리가 서로의 처리가 끝날 때까지 기다리면서 처리가 진전되지 않는 상태를 말한다.

    총결산


    색인, 거래, 조문을 대략적으로 요약하였는데, 모두 DB를 접했을 때의 기초 지식이기 때문에, 우선 대략적으로 기억하는 것이 가장 좋다

    좋은 웹페이지 즐겨찾기