묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨분산 데이터 모델링
6강 - 해시태그 모델의 샤딩 전략에 대하여, 분산 정도(데이터 편중)와 트랜잭션 성능의 trade off 상황 발생 시에 대한 고민
안녕하세요, 선생님!6강 해시태그 모델을 배운 후 데이터 분산 정도와 트랜잭션 일관성의 trade off에 대한 선택이 생각났고, 이에 대한 선생님의 고견은 어떠하실지 궁금하여 질문 올리게 되었습니다. 질문 내용은 아래와 같습니다.데이터 편중도 크고 vs 트래픽이 많이 발생하여 트랜잭션까지 고려해야할때 샤딩키를 어떤 것으로, 어떤 부분을 tradeoff의 우선순위로 지정하는 것이 좋을지저의 경우 트래픽을 선택할 것 같은데, 데이터 편중에 대해 추가적인 보완사항이 있다면 어떤 것이 있을지 일단 강의의 경우, 제가 이해한 내용으로는, 해시태그 모델과 같이, PK/FK의 분산 정도가 비슷하고, 부모 속성(FK)에 의한 쏠림 현상이 발생하여도 그 규모가 충분히 크지 않으므로 쓰기 경로를 중점적으로 고려하여(동일 게시글에 대한 해시태그를 동일 샤드에 저장) 설계한다. 이와 같습니다. 저는 해시태그 모델과 함께, 다른 예를 들어, 하루에 50,000건의 거래가 이루어지는 대규모 거래가 발생하는데, 이를 거래 게시판을 각 도메인 별(화장품/전자기기 등)로 별도로 만들어서 한 거래게시판 당 하루에 10,000건의 게시글, 1개의 1000~2000개의 찜이 발생한다고 하였을때의 상황에 대해 생각해보았습니다. 제가 만약 실무에서 찜 DB를 설계한다고 가정하고, 이에 대해 대응한다고 하였을때, 1) 게시글 ID와 찜(누가 찜했는지 구분해야 함, 찜ID로 구분한다고 가정하면)의 트래픽이 한 한 게시글 기준 찜 몇천여개, 게시글 총 만여개의 수준으로 발생하여 규모가 충분히 작다고 볼 수 없습니다. 2) 따라서 데이터 쏠림 현상에 대해 고민을 안할래야 안할 수가 없고, 그러면서도 데이터의 균등한 샤딩에 대해서도 고민이 들게 되었습니다. 3) 결국 데이터 분산을 균등하게 하느냐, 쏠림이 발생하더라도 쓰기 트래픽의 성능과 일관성, 조회 성능의 이점이 큰 것인가를 선택해야 하는데 4) 분산을 선택하지 않고, 트래픽 성능/일관성/조회 성능을 생각하였을때, 확실히 단일 데이터베이스에 있을때 성능적인 측면에서도 좋고, 일관성, 특히 조회 시 별도의 CQRS 전용 쿼리모델이나 DB를 따로 두지 않고 인덱스도 따로 설계하지 않는 등 훨씬 엄청난 이점이 될 것으로 판단이 됩니다. 따라서, 분산 정도 대신 성능 쪽으로 결론짓고 샤딩 키를 찜 ID 대신 게시글 ID로 지을 것 같습니다. 대신, 엄청난 트래픽으로 인해 데이터 편중이 너무 커진다면 게시글 생성일자를 샤드키로 추가하여 데이터를 좀 더 세부적으로 분리할 것 같습니다(아니면 더 좋은 방안이 있을지). 이에 대해 선생님의 생각이 궁금하여 질문드리게 되었습니다! 감사합니다.
-
미해결실전! 데이터베이스 완전정복 [설계편]
커버링 인덱스에 대해서 질문드립니다.
안녕하세요. 강의 정말 잘 듣고 있습니다. 강의를 듣다가 커버링 인덱스(Covering Index) 관련해서 궁금한 점이 생겨 질문드립니다.커버링 인덱스는 SELECT 문에서 조회하는 컬럼들이 모두 인덱스에 포함되어 있을 때, 원본 테이블을 조회하지 않고 인덱스만으로 쿼리를 처리할 수 있는 방식이라고 이해했습니다.그렇다면,SELECT에 포함된 컬럼들이 각각 단일 인덱스로 존재하는 경우에도 커버링 인덱스로 처리될 수 있는지 궁금합니다.아니면 반드시 하나의 복합 인덱스(composite index) 로 묶여 있어야 커버링 인덱스로 동작하는 것인지 알고 싶습니다.예를 들어,id는 Primary Key라서 자동으로 인덱스가 생성되어 있고name 컬럼에 대해서도 검색을 위해 인덱스를 추가하려고 할 때다음 두 방식 중 어떤 것이 더 적절한지 궁금합니다.name 컬럼에 단일 인덱스를 생성(id, name) 형태의 복합 인덱스를 생성이 경우 커버링 인덱스 관점에서 어떤 방식이 더 올바른 설계인지 설명해주시면 감사하겠습니다 :>
-
해결됨실전! 데이터베이스 완전정복 [설계편]
인덱스 설계 시 컬럼 선택 기준
안녕하세요. 강사님의 좋은 자료 덕분에 장고 강의에 이어 데이터베이스 설계 강의까지 함께하고 있는 수강생 입니다. 강의를 듣던 중, "22.선택도 / 3:51" 내용을 보고 의문점이 생겨 질문 남깁니다. 배경선택도 값이 낮으면, 조건에 맞는 행이 적다 → 인덱스 효율이 증가한다.선택도 값이 높으면, 조건에 맞는 행이 많다 → 인덱스 효율이 떨어진다.라는 설명을 듣고, "중복이 적을수록 인덱스를 생성하면 더 효율적이겠구나" 라는 정보를 얻었습니다. 그 후, "어떤 컬럼을 선택해야 할까?" 장표에는 그중에서 선택성이 높은 컬럼 위주로 인덱스 생성이 효율적이라고 설명과 더불어 자료를 보여주셔서 의문이 생겼습니다. 질문Q. 선택성이 높으면 조건에 맞는 행이 많아 중복되는 행을 다시 스캔하여 필터링 하기 때문에 인덱스 사용에 비효율적이지 않을까요? 그럼 나머지 강의를 일단 수강하며 배움에 즐거움을 만끽하러 가보겠습니다. 감사합니다.
-
해결됨분산 데이터 모델링
분산 환경을 고민해야 하는 시점
안녕하세요!시스템 개발 및 설계 과정에서 '대규모 시스템', '분산 환경', '분산 데이터 모델링'과 같은 개념들을 본격적으로 고려하고 도입해야 하는 시점은 언제일까요?실무에서 경험해보지 못해서 '대규모' 라는 말이 막연해서 실무에서 어떤 것을 기준으로 고려하는지 혹은 지표 같은 것을 측정하는 방법이 있는지 궁금해서 질문 드립니다!
-
해결됨분산 데이터 모델링
샤딩한 테이블에서 B Tree 인덱스를 사용하는 것
예시로 들었던 '게시판 별 게시글' 같은 인덱스 테이블에서 B Tree 인덱스를 사용하면 된다는 식으로 말씀하셨습니다.근데 전통적인 RDBMS에는 샤딩 기능조차 존재하지 않는데, 분산된 데이터베이스에서도 테이블 수준의 B Tree 인덱스처럼 동작하는 것처럼 말씀하신 것 같아, 이것이 맞는지 문의 드립니다.
-
해결됨실전! 데이터베이스 완전정복 [설계편]
인덱스 사용 패턴 질문
안녕하세요, 강의 중 궁금한 점이 생겨 질문드립니다.GROUP BY 사용 패턴3: 필터링 후 그룹화에서 WHERE status = 'paid' GROUP BY status ORDER BY status처럼 동일한 컬럼을 사용하는 경우, 하나의 인덱스로 효율적으로 처리할 수 있다고 말씀하셨는데요.이 경우 WHERE 절에서 status = 'paid'로 필터링하면, 결과가 모두 동일한 status 값을 가지게 되어 GROUP BY나 ORDER BY를 추가해도 WHERE 절만 사용한 것과 결과가 동일하지 않을까요?궁금한 점:WHERE, GROUP BY, ORDER BY에서 동일한 필드를 사용하는 실제 사용 사례가 있을까요?
-
해결됨실전! 데이터베이스 완전정복 [설계편]
논리적 삭제 적용시 INDEX 생성 전략
안녕하세요 논리적 삭제를 위한 컬럼 적용시 해당 테이블에서 조회할때 조회 조건에 항상 deleted_at 컬럼이 포함될거 같은데요 그러면 INDEX생성에 반영해주는게 좋을까요?
-
미해결Solidworks 2023 3D모델링 동영상강좌 2부
0mm 곡면오프셋으로 생성된 곡면바디 나누기 및 면적 계산
안녕하세요!!솔리드바디를 와이어 프레임으로 변경해서 곡면 0mm 두께로 오프셋 하면 곡면바디가 하나로 생성됩니다.1) 하나의 곡면바디를 면간 경계선을 기준으로 다 쪼갤 수 있나요2) 단일 곡면 바디에서 일부분만 면 제거 후 나머지 곡면의 면적만 계산하고 싶은데 가능할까요?잘부탁드립니다.