보통 DB를 구성할때 특정 인덱스 or ID를 지정하여 DB를 구성하고 각각의 PK를 사용하여 연관지어서 DB를 구성한다
예를 들어 "People"테이블에는 아래와 같이 구성하고
ID | Name | Client_ID |
20220606_00001 | 이인호 | sdjklajsdklajs |
20220606_00002 | 강영철 | qwlkjkalsn2 |
20220606_00003 | 심영래 | glkjvjz2 |
20220606_00004 | 김송해 | llgjejfnkl |
20220606_00005 | 민호진 | ovmpmq2 |
20220606_00006 | 최중열 | ymtmot2 |
20220606_00007 | 서지수 | mqkwln |
각 ID에 해당하는 "People Detail 상세 정보" 테이블을 별도로 구성 관리한다.
ID | 구매 내역 | 가입일 |
20220606_00001 | B_20220702133302 | 2022-06-06-12:31 |
20220606_00002 | S_20220403123201 | 2022-06-06-12:43 |
20220606_00003 | B_20220615061202 | 2022-06-06-14:39 |
20220606_00004 | S_20220403123232 | 2022-06-06-14:42 |
20220606_00005 | B_20220802133302 | 2022-06-06-15:22 |
20220606_00006 | S_20220403123201 | 2022-06-06-18:44 |
20220606_00007 | B_20220702133302 | 2022-06-06-20:13 |
이러한 데이터 베이스를 관계형 데이터 베이스라고 하는데(SQL / RDB) 거의 모든 DB의 표준이라고 보면된다.
그런데 최근에는 이러한 관계형 데이터베이스가 아닌 JSON형태의 DB의 사용이 증가하는 추세인데 이를 비관계형 데이터 베이스
NoSQL이라고 한다.
관계형과 비관계형의 가장 큰 차이점이라면
관계형 데이터베이스는 각각의 정보를 분리 관리하며, 해당 정보를 조회/수정할때 JOIN을 사용하여 "분리되어 있는 각각의 테이블"에서 데이터를 조합하여 사용한다는 것이고,
비관계형 데이터베이스는 1개의 JSON에 모든 정보를 일괄 기입하여 관리한다는 점이 다르다.
NoSQL 예시
{
"ID" : "20220606_00001",
"Name": "이인호",
"Client_ID":"sdjklajsdklajs",
"구매 내역" : "B_20220702133302",
"가입일":"2022-06-06-12:31"
}
왜 제목은 엘라스틱서치인데 갑자기 SQL vs NoSQL이냐면,
기존의 검색엔진은 SQL문을 사용하여 Where 혹은 Join을 적절히 활요하여 정보를 조회하는 방법이였는데
이 방법의 최대 단점은 검색하고자하는 값의 테이블의 정보를 모두 검색하고 그중 원하는 정보를 찾는것이라
리소스 낭비가 많다는 점이다.
ex) where People.Name=="이인호"(이름이 이인호인 사람의 정보를 찾고자 한다면)
id | Name | Client_ID | Where Name=="이인호" |
20220606_00001 | 이인호 | sdjklajsdklajs | TRUE |
20220606_00002 | 강영철 | qwlkjkalsn2 | FALSE |
20220606_00003 | 심영래 | glkjvjz2 | FALSE |
20220606_00004 | 김송해 | llgjejfnkl | FALSE |
20220606_00005 | 민호진 | ovmpmq2 | FALSE |
20220606_00006 | 최중열 | ymtmot2 | FALSE |
20220606_00007 | 서지수 | mqkwln | FALSE |
이렇게 모든 Name을 검색해야한다 == 모든 테이블의 데이터를 조회해야한다. == 리소스 낭비 심함
만약 위의 데이터베이스가 엄청난 크기의 빅데이터라면 속도가 매우 느려질 것이다.
이러한 불필요한 정보 조회를 최소화하기 위해서 인덱싱을 사용하는데 이러한 작업을 엘라스틱서치에서는 기본적으로 지원해준다
위와 동일한 검색을 실행할때 엘라스틱서치에서는 "역색인"을 사용한다.
ex)
doc_name:People_1
{
"ID" : "20220606_00001",
"Name": "이인호",
"Client_ID":"sdjklajsdklajs",
"구매 내역" : "B_20220702133302",
"가입일":"2022-06-06-12:31"
}
1) "Name"=="이인호"
2) 엘라스틱 서치 : "이인호는 doc_name이 People_1에만 있음"
3) People_1의 정보만 보면 되겠구나?!
4) People_1의 데이터만 조회
이런식이다. 즉, 기존의 인덱싱 DB의 장점만을 가지고 온 검색 엔진인것이다.
근데 왜 관계형 데이터베이스를 사용하느냐?
엘라스틱서치에도 단점이 있는데, 각 doc간의 Join이 불가능하다.
SQL는 JOIN을 통해 1개의 SQL문으로 각 테이블의 정보를 빠르게 검색이 가능하지만,
엘라스틱서치는 JOIN이 불가능하여 여러개의 검색문이 필요하다.
즉, DB의 구성은 RDB로 구성하고 엘라스틱서치는 검색 엔진으로 사용하는게 가장 적절하다고 생각된다.
라고 나는 이해했다.
'프로그래밍 > 홈페이지 제작기' 카테고리의 다른 글
[Server]Disk 사용률 100% 급증 원인파악하기 + 해결하기 (0) | 2023.04.13 |
---|---|
[Task Manager]Disk 사용률 활성화 하기(display disk usage) (0) | 2023.04.13 |
[데이터베이스(mysql)] 기본설정하기 (0) | 2022.07.20 |
[Node.js(노드 js)]Node.js란? (0) | 2022.06.13 |
[홈페이지 제작기] 1. 웹 호스팅 서비스 결정 (0) | 2021.06.23 |