해결된 질문
작성
·
325
1
안녕하세요. 면접 CS 공부 중에 몇 가지 궁금증이 생겨서 질문드립니다.
- 서비스가 커져서 DB에 데이터가 많이 쌓이고 DB 용량이 커지게 된다면, 어떻게 해야할까 생각해 보았는데요.
조회가 많은 테이블이라면 인덱스나 NoSQL로의 마이그레이션을 통해 속도를 개선할 수 있다고 생각했지만,
수정, 삭제가 많은 테이블이라면 명확한 방법이 떠오르지 않아서 질문드립니다.
(만약, 면접에서 DB에 데이터가 많아지고, 용량이 커졌을 때에 대해서 질문한다면 어떤식으로 대답해야 할까요?)
- 구글링에서 본 B+Tree 특징에 데이터 검색을 위해서는 반드시 leaf node까지 내려가야 한다고 나와있는데요.
B+Tree Node가 인덱스와 데이터 형태로 구성되어 있는걸로 알고있습니다.
B+Tree를 탐색하는 중간에 데이터를 찾게된다면 곧바로 반환하면 될 것 같은데, 왜 leaf node까지 내려갈 필요가 있는지 궁금합니다.
- 교착상태는 멀티프로세스, 멀티쓰레드, 트랜잭션 3개의 상황에서 발생할 수 있다고 생각하는데요.
3가지 상황에서 발생하는 교착상태에 차이점이 있는지 궁금합니다.
추가로 강의 목차에 면접 공부 중 생기는 질문에 대해 작성하는 강의가 있으면 좋을 것 같습니다 ㅎㅎ. 강의를 포괄하는 내용을 질문할 때는 어느 강의에 질문을 등록해야할지 혼란이 된다는 생각에 하나로 통합하여 관리하면 좋을 것 같다는 생각입니다.
답변 2
1
0
1. 데이터가 많아지고 용량이 커졌을 때 대처법은 다양합니다. 큰 범주에서 보면 Parallel / Distributed Storage를 사용하는 것입니다. Data Partitionaing, Replication, Parallel Indexing, sharding, NoSQL 등등이 있습니다. 하나하나의 내용은 너무 방대해서 간단하게 서칭해가시면 도움이 될 수 있을 것 같아요!
2. will님께서 말씀해주신 방법이 B-Tree입니다. 언뜻 보면 중간에 찾은 search-key는 굳이 leaf node까지 내려가지 않고 바로 데이터 저장위치를 가리키면 효율적일 것 같지만, 그렇지 않습니다. 일단 leaf node와 중간 node들의 구조가 달라집니다. 이렇게 되면 데이터를 추가 삭제할 때, 많은 비효율이 생깁니다. PS. 거의 대부분의 DB에서는 B-Tree보단 B+Tree를 사용하고 있습니다. (B-Tree라고 표현을 하더라도, B+Tree구조인 경우가 많습니다.)
3. 단지 상호배제를 위해 Lock을 걸기 때문에 생긴다는 원인이 같을 뿐입니다. 비슷한점도 많지만, 트랜잭션과 멀티프로세스/멀티쓰레드 의 데드락 연관성을 생각할 필요까지는 없을 것 같습니다. 물론 멀티프로세스와 멀티쓰레드에서의 교착상태는 구분이 무의미합니다. 강의 제목을 동기화문제에 대해서는 멀티프로세스/멀티쓰레드 로 묶은것도 그 이유입니다.
질문을 강의 단위로 할 수 있는걸 몰랐네요. 한번 고려해볼게요!!
오늘 면접 잘 보시길 바랍니다 :) 화이팅