당신은 주제를 찾고 있습니까 “데이터 중심 애플리케이션 설계 – 알아두면 인생 도움되는 개발자 책 추천“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 노마드 코더 Nomad Coders 이(가) 작성한 기사에는 조회수 102,703회 및 좋아요 3,988개 개의 좋아요가 있습니다.
데이터 중심 애플리케이션 설계 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 알아두면 인생 도움되는 개발자 책 추천 – 데이터 중심 애플리케이션 설계 주제에 대한 세부정보를 참조하세요
*광고 및 협찬이 아닌. 100% 순수 추천입니다*
2021 추천 도서 나갑니다!
#개발자 #책추천 #프로그래밍 #코딩
데이터 중심 애플리케이션 설계 주제에 대한 자세한 내용은 여기를 참조하세요.
데이터 중심 애플리케이션 설계 – YES24
데이터는 오늘날 시스템을 설계할 때 마주치는 많은 도전 과제 중에서도 가장 중심에 있다. 확장성, 일관성, 신뢰성, 효율성, 유지보수성과 같은 해결 …
Source: www.yes24.com
Date Published: 1/25/2021
View: 8042
데이터 중심 애플리케이션 설계(데이터베이스 & 빅 … – 교보문고
데이터 중심 애플리케이션 설계 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 시스템을 지탱하는 핵심 | 데이터베이스 & 빅데이터 시리즈 19. klover9.7 (14건).
Source: www.kyobobook.co.kr
Date Published: 9/29/2021
View: 597
데이터 중심 애플리케이션 설계 – 알라딘
데이터 중심 애플리케이션 설계 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 시스템을 지탱하는 핵심 아이디어.
Source: www.aladin.co.kr
Date Published: 3/26/2021
View: 3618
<데이터 중심 애플리케이션 설계> 개발서적 후기
<데이터 중심 애플리케이션 설계> 개발서적 후기 … 회사에서 맡고 있는 직무가 데이터 기반 백엔드 엔지니어링과 약간의 데이터 사이언스를 하고 …
Source: dwarfintheflask.xyz
Date Published: 8/23/2022
View: 6988
데이터 중심 애플리케이션 설계 1장 정리 | Myanglog
데이터중심 애플리케이션(data-intensive application). 데이터 양, 복잡성, 데이터가 변하는 속도 등 데이터가 주요 도전 과제인 어플리케이션. ↔ 계산 …
Source: www.myanglog.com
Date Published: 1/30/2022
View: 4359
[데이터 중심 애플리케이션 설계] 2장. 데이터 모델과 질의 언어
참고문서 https://github.com/ept/ddia-references 데이터 중심 애플리케이션 설계(마틴 클레프만, 위키북스) 초심자의 눈으로 이해한 내용을 정리해 …
Source: sjh836.tistory.com
Date Published: 6/22/2021
View: 1040
데이터 중심 애플리케이션 설계 | 위키북스
데이터는 오늘날 시스템을 설계할 때 마주치는 많은 도전 과제 중에서도 가장 중심에 있다. 확장성, 일관성, 신뢰성, 효율성, 유지보수성과 같은 해결 …
Source: wikibook.co.kr
Date Published: 12/11/2021
View: 4275
주제와 관련된 이미지 데이터 중심 애플리케이션 설계
주제와 관련된 더 많은 사진을 참조하십시오 알아두면 인생 도움되는 개발자 책 추천. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 데이터 중심 애플리케이션 설계
- Author: 노마드 코더 Nomad Coders
- Views: 조회수 102,703회
- Likes: 좋아요 3,988개
- Date Published: 2021. 12. 12.
- Video Url link: https://www.youtube.com/watch?v=IhrKUObq9Ug
데이터 중심 애플리케이션 설계
목차
[Part 1] 데이터 시스템의 기초01장: 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션
데이터 시스템에 대한 생각
신뢰성
___하드웨어 결함
___소프트웨어 오류
___인적 오류
___신뢰성은 얼마나 중요할까?
확장성
___부하 기술하기
___성능 기술하기
___부하 대응 접근 방식
유지보수성
___운용성: 운영의 편리함 만들기
___단순성: 복잡도 관리
___발전성: 변화를 쉽게 만들기
정리
참고 문헌02장: 데이터 모델과 질의 언어
관계형 모델과 문서 모델
___NoSQL의 탄생
___객체 관계형 불일치
___다대일과 다대다 관계
___문서 데이터베이스는 역사를 반복하고 있나?
___관계형 데이터베이스와 오늘날의 문서 데이터베이스
데이터를 위한 질의 언어
___웹에서의 선언형 질의
___맵리듀스 질의
그래프형 데이터 모델
___속성 그래프
___사이퍼 질의 언어
___SQL의 그래프 질의
___트리플 저장소와 스파클
___초석: 데이터로그
정리
참고 문헌03장: 저장소와 검색
데이터베이스를 강력하게 만드는 데이터 구조
___해시 색인
___SS테이블과 LSM 트리
___B 트리
___B 트리와 LSM 트리 비교
___기타 색인 구조
트랜잭션 처리나 분석?
___데이터 웨어하우징
___분석용 스키마: 별 모양 스키마와 눈꽃송이 모양 스키마
칼럼 지향 저장소
___칼럼 압축
___칼럼 저장소의 순서 정렬
___칼럼 지향 저장소에 쓰기
___집계: 데이터 큐브와 구체화 뷰
정리
참고 문헌04장: 부호화와 발전
[Part 2] 분산 데이터
데이터 부호화 형식
___언어별 형식
___JSON과 XML, 이진 변형
___스리프트와 프로토콜 버퍼
___아브로
___스키마의 장점
데이터플로 모드
___데이터베이스를 통한 데이터플로
___서비스를 통한 데이터플로: REST와 RPC
___메시지 전달 데이터플로
정리
참고 문헌고부하로 확장
___비공유 아키텍처
___복제 대 파티셔닝
참고 문헌05장: 복제
리더와 팔로워
___동기식 대 비동기식 복제
___새로운 팔로워 설정
___노드 중단 처리
___복제 로그 구현
복제 지연 문제
___자신이 쓴 내용 읽기
___단조 읽기
___일관된 순서로 읽기
___복제 지연을 위한 해결책
다중 리더 복제
___다중 리더 복제의 사용 사례
___쓰기 충돌 다루기
___다중 리더 복제 토폴로지
리더 없는 복제
___노드가 다운됐을 때 데이터베이스에 쓰기
___정족수 일관성의 한계
___느슨한 정족수와 암시된 핸드오프
___동시 쓰기 감지
정리
참고 문헌06장: 파티셔닝
파티셔닝과 복제
키-값 데이터 파티셔닝
___키 범위 기준 파티셔닝
___키의 해시값 기준 파티셔닝
___쏠린 작업부하와 핫스팟 완화
파티셔닝과 보조 색인
___문서 기준 보조 색인 파티셔닝
___용어 기준 보조 색인 파티셔닝
파티션 재균형화
___재균형화 전략
___운영: 자동 재균형화와 수동 재균형화
요청 라우팅
___병렬 질의 실행
정리
참고 문헌07장: 트랜잭션
애매모호한 트랜잭션의 개념
___ACID의 의미
___단일 객체 연산과 다중 객체 연산
완화된 격리 수준
___커밋 후 읽기
___스냅숏 격리와 반복 읽기
___갱신 손실 방지
___쓰기 스큐와 팬텀
직렬성
___실제적인 직렬 실행
___2단계 잠금(2PL)
___직렬성 스냅숏 격리(SSI)
정리
참고 문헌08장: 분산 시스템의 골칫거리
결함과 부분 장애
___클라우드 컴퓨팅과 슈퍼컴퓨팅
신뢰성 없는 네트워크
___현실의 네트워크 결함
___결함 감지
___타임아웃과 기약 없는 지연
___동기 네트워크 대 비동기 네트워크
신뢰성 없는 시계
___단조 시계 대 일 기준 시계
___시계 동기화와 정확도
___동기화된 시계에 의존하기
___프로세스 중단
지식, 진실, 그리고 거짓말
___진실은 다수결로 결정된다
___비잔틴 결함
___시스템 모델과 현실
정리
참고 문헌09장: 일관성과 합의
[Part 3] 파생
일관성 보장
선형성
___시스템에 선형성을 부여하는 것은 무엇인가?
___선형성에 기대기
___선형성 시스템 구현하기
___선형성의 비용
순서화 보장
___순서화와 인과성
___일련번호 순서화
___전체 순서 브로드캐스트
분산 트랜잭션과 합의
___원자적 커밋과 2단계 커밋(2PC)
___현실의 분산 트랜잭션
___내결함성을 지닌 합의
___멤버십과 코디네이션 서비스
정리
참고 문헌10장: 일괄 처리
유닉스 도구로 일괄 처리하기
___단순 로그 분석
___유닉스 철학
맵리듀스와 분산 파일 시스템
___맵리듀스 작업 실행하기
___리듀스 사이드 조인과 그룹화
___맵 사이드 조인
___일괄 처리 워크플로의 출력
___하둡과 분산 데이터베이스의 비교
맵리듀스를 넘어
___중간 상태 구체화
___그래프와 반복 처리
___고수준 API와 언어
정리
참고 문헌11장: 스트림 처리
이벤트 스트림 전송
___메시징 시스템
___파티셔닝된 로그
데이터베이스와 스트림
___시스템 동기화 유지하기
___변경 데이터 캡처
___이벤트 소싱
___상태와 스트림과 불변성
스트림 처리
___스트림 처리의 사용
___시간에 관한 추론
___스트림 조인
___내결함성
정리
참고 문헌12장: 데이터 시스템의 미래
데이터 통합
___파생 데이터에 특화된 도구의 결합
___일괄 처리와 스트림 처리
데이터베이스 언번들링
___데이터 저장소 기술 구성하기
___데이터플로 주변 애플리케이션 설계
___파생 상태 관찰하기
정확성을 목표로
___데이터베이스에 관한 종단 간 논증
___제약 조건 강제하기
___적시성과 무결성
___믿어라. 하지만 확인하라.
옳은 일 하기
___예측 분석
___사생활과 추적
정리
참고 문헌용어집
데이터 중심 애플리케이션 설계 – 교보문고
상품상세정보 ISBN 9791158390983 ( 115839098X ) 쪽수 608쪽 크기 190 * 242 * 31 mm /1285g 판형알림 이 책의 원서/번역서 Designing Data-Intensive Applications / Kleppmann, Martin
책소개
이 책이 속한 분야
데이터는 오늘날 시스템을 설계할 때 마주치는 많은 도전 과제 중에서도 가장 중심에 있다. 확장성, 일관성, 신뢰성, 효율성, 유지보수성과 같은 해결하기 어려운 문제를 파악해야 할 뿐 아니라 관계형 데이터베이스, NoSQL 데이터스토어, 스트림 처리자 또는 일괄 처리 처리자, 메시지 브로커 등을 포함한 도구의 다양성에 압도된다. 어떤 선택이 애플리케이션에 적합한가? 이 유행어들을 얼마나 이해하고 있는가?
마틴 클레프만은 이 실용적이고 포괄적인 안내서에서 데이터를 처리하고 저장하는 다양한 기술의 장단점을 검토한다. 이 책은 여러분이 거대한 문제 공간 속을 항해하는 데 좋은 길잡이가 될 것이다. 소프트웨어는 계속 변하지만 근본 원리는 동일하다. 이 책에서 소프트웨어 엔지니어와 아키텍트는 실전에 이 개념을 어떻게 적용하는지, 그리고 현대 애플리케이션에서 어떻게 데이터를 최대한 활용하는지 배운다.
목차
[Part 1] 데이터 시스템의 기초▣ 01장: 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션
데이터 시스템에 대한 생각
신뢰성
하드웨어 결함
소프트웨어 오류
인적 오류
신뢰성은 얼마나 중요할까?
확장성
부하 기술하기
성능 기술하기
부하 대응 접근 방식
유지보수성
운용성: 운영의 편리함 만들기
단순성: 복잡도 관리
발전성: 변화를 쉽게 만들기
정리
참고 문헌
▣ 02장: 데이터 모델과 질의 언어
관계형 모델과 문서 모델
NoSQL의 탄생
객체 관계형 불일치
다대일과 다대다 관계
문서 데이터베이스는 역사를 반복하고 있나?
관계형 데이터베이스와 오늘날의 문서 데이터베이스
데이터를 위한 질의 언어
웹에서의 선언형 질의
맵리듀스 질의
그래프형 데이터 모델
속성 그래프
사이퍼 질의 언어
SQL의 그래프 질의
트리플 저장소와 스파클
초석: 데이터로그
정리
참고 문헌
▣ 03장: 저장소와 검색
데이터베이스를 강력하게 만드는 데이터 구조
해시 색인
SS테이블과 LSM 트리
B 트리
B 트리와 LSM 트리 비교
기타 색인 구조
트랜잭션 처리나 분석?
데이터 웨어하우징
분석용 스키마: 별 모양 스키마와 눈꽃송이 모양 스키마
칼럼 지향 저장소
칼럼 압축
칼럼 저장소의 순서 정렬
칼럼 지향 저장소에 쓰기
집계: 데이터 큐브와 구체화 뷰
정리
참고 문헌
▣ 04장: 부호화와 발전
데이터 부호화 형식
언어별 형식
JSON과 XML, 이진 변형
스리프트와 프로토콜 버퍼
아브로
스키마의 장점
데이터플로 모드
데이터베이스를 통한 데이터플로
서비스를 통한 데이터플로: REST와 RPC
메시지 전달 데이터플로
정리
참고 문헌
[Part 2] 분산 데이터고부하로 확장
비공유 아키텍처
복제 대 파티셔닝
참고 문헌
▣ 05장: 복제
리더와 팔로워
동기식 대 비동기식 복제
새로운 팔로워 설정
노드 중단 처리
복제 로그 구현
복제 지연 문제
자신이 쓴 내용 읽기
단조 읽기
일관된 순서로 읽기
복제 지연을 위한 해결책
다중 리더 복제
다중 리더 복제의 사용 사례
쓰기 충돌 다루기
다중 리더 복제 토폴로지
리더 없는 복제
노드가 다운됐을 때 데이터베이스에 쓰기
정족수 일관성의 한계
느슨한 정족수와 암시된 핸드오프
동시 쓰기 감지
정리
참고 문헌
▣ 06장: 파티셔닝
파티셔닝과 복제
키-값 데이터 파티셔닝
키 범위 기준 파티셔닝
키의 해시값 기준 파티셔닝
쏠린 작업부하와 핫스팟 완화
파티셔닝과 보조 색인
문서 기준 보조 색인 파티셔닝
용어 기준 보조 색인 파티셔닝
파티션 재균형화
재균형화 전략
운영: 자동 재균형화와 수동 재균형화
요청 라우팅
병렬 질의 실행
정리
참고 문헌
▣ 07장: 트랜잭션
애매모호한 트랜잭션의 개념
ACID의 의미
단일 객체 연산과 다중 객체 연산
완화된 격리 수준
커밋 후 읽기
스냅숏 격리와 반복 읽기
갱신 손실 방지
쓰기 스큐와 팬텀
직렬성
실제적인 직렬 실행
2단계 잠금(2PL)
직렬성 스냅숏 격리(SSI)
정리
참고 문헌
▣ 08장: 분산 시스템의 골칫거리
결함과 부분 장애
클라우드 컴퓨팅과 슈퍼컴퓨팅
신뢰성 없는 네트워크
현실의 네트워크 결함
결함 감지
타임아웃과 기약 없는 지연
동기 네트워크 대 비동기 네트워크
신뢰성 없는 시계
단조 시계 대 일 기준 시계
시계 동기화와 정확도
동기화된 시계에 의존하기
프로세스 중단
지식, 진실, 그리고 거짓말
진실은 다수결로 결정된다
비잔틴 결함
시스템 모델과 현실
정리
참고 문헌
▣ 09장: 일관성과 합의
일관성 보장
선형성
시스템에 선형성을 부여하는 것은 무엇인가?
선형성에 기대기
선형성 시스템 구현하기
선형성의 비용
순서화 보장
순서화와 인과성
일련번호 순서화
전체 순서 브로드캐스트
분산 트랜잭션과 합의
원자적 커밋과 2단계 커밋(2PC)
현실의 분산 트랜잭션
내결함성을 지닌 합의
멤버십과 코디네이션 서비스
정리
참고 문헌
[Part 3] 파생▣ 10장: 일괄 처리
유닉스 도구로 일괄 처리하기
단순 로그 분석
유닉스 철학
맵리듀스와 분산 파일 시스템
맵리듀스 작업 실행하기
리듀스 사이드 조인과 그룹화
맵 사이드 조인 일괄 처리
워크플로의 출력
하둡과 분산 데이터베이스의 비교
맵리듀스를 넘어
_중간 상태 구체화
그래프와 반복 처리
고수준 API와 언어
정리
참고 문헌
▣ 11장: 스트림 처리
이벤트 스트림 전송
메시징 시스템
파티셔닝된 로그
데이터베이스와 스트림
시스템 동기화 유지하기
변경 데이터 캡처
이벤트 소싱
상태와 스트림과 불변성
스트림 처리
스트림 처리의 사용
시간에 관한 추론
스트림 조인
내결함성
정리
참고 문헌
▣ 12장: 데이터 시스템의 미래
데이터 통합
파생 데이터에 특화된 도구의 결합
일괄 처리와 스트림 처리
데이터베이스 언번들링
데이터 저장소 기술 구성하기
데이터플로 주변 애플리케이션 설계
파생 상태 관찰하기
정확성을 목표로
데이터베이스에 관한 종단 간 논증
제약 조건 강제하기
적시성과 무결성
믿어라. 하지만 확인하라.
옳은 일 하기
예측 분석
사생활과 추적
정리
참고 문헌
용어집
추천사
제이 크렙스(Jay Kreps)(컨플루언트 CEO) “이 책은 물건이다. 분산 시스템 이론과 실제 엔지니어링 사이의 거대한 간격을 메우는 책이다. 이 책은 10년 전에 나왔어야 했다. 그때 내가 이 책을 읽었다면 그동안 저질렀던 실수를 하지 않았을 것이다.” 케빈 스콧(Kevin Scott)(마이크로소프트 최고기술 책임자) 소프트웨어 엔지니어라면 모두 이 책을 읽어야 한다. 《데이터 중심 애플리케이션 설계》는 이론과 실전을 넘나드는 책으로 데이터 인프라와 시스템을 설계하고 구현하는 개발자가 현명한 결정을 내려야 할 때 이 정도 도움을 줄 수 있… 더보기 소프트웨어 엔지니어라면 모두 이 책을 읽어야 한다. 《데이터 중심 애플리케이션 설계》는 이론과 실전을 넘나드는 책으로 데이터 인프라와 시스템을 설계하고 구현하는 개발자가 현명한 결정을 내려야 할 때 이 정도 도움을 줄 수 있는 책은 거의 없다.” 닫기
출판사 서평
[데이터 중심 애플리케이션 설계] 2장. 데이터 모델과 질의 언어
참고문서 https://github.com/ept/ddia-references 데이터 중심 애플리케이션 설계(마틴 클레프만, 위키북스)
초심자의 눈으로 이해한 내용을 정리해보았다. 책에 있는 내용을 기반으로 썼지만, 책에 없는 내용도 조금씩 적어보았다. 책은 꼭 사서 보시길 바랍니다..
데이터 모델은 우리가 어떤 문제를 어떻게 해결해야하는지, 생각에도 영향을 미친다. 데이터 모델은 그 위에서 소프트웨어가 할 수 있는 일과 할 수 없는 일에 영향을 준다. ex) 어떤 연산은 빠르고, 어떤 연산은 느리다.
데이터 모델의 큰 범주 관계형 모델 문서 모델 그래프 모델
1. 관계형 모델과 문서 모델
관계형 모델 데이터는 관계(relation)으로 구성 각 관계는 순서없는 튜플(tuple)의 모음 SQL 은 정규화된 구조로 데이터를 저장하고 질의할 필요가 있을 때, 대부분 사용
NoSQL 의 탄생 : Not Only SQL 대규모 데이터셋이나 높은 쓰기처리량을 달성 무료, 오픈소스 스프트웨어 선호 관계형 모델에서 지원하지 않는 특수 질의 관계형의 스키마 제한에 대한 불만, 동적이고 표현력 풍부한 데이터 모델을 선호
1-1. 데이터 모델들이 관계를 표현하는 방법
객체 관계형 불일치 OOP의 객체를 SQL 데이터 모델로 바꾸려면 거추장스러운 전환 계층이 필요 : 임피던스(impedance) 불일치 ActiveRecord 나 Hibernate 같은 ORM 으로 boilerplate code 를 줄이지만, 여전히 두 모델의 차이가 완벽히 숨겨지진 않는다. ex) 1:N 관계를 관계형 모델로 표현하려면, 1안) multi table 스키마로 정규화하고 join 2안) 구조화된 데이터 타입 사용(xml, json)하여 저장. 최신 표준 RDBMS 는 이런 타입도 질의, 색인 가능 3안) 자체적으로 부호화해서 저장하여 응용단에서 활용. 질의, 색인 불가능 문서 지향(document oriented) DB를 사용하면 JSON 데이터 모델을 지원하는데, 위와 같은 문제를 쉽게 해결 1:N 관계는 의미상 트리 구조와 같다. JSON 데이터모델 표현은 multi table 스키마보다 더 나은 지역성(locality)을 갖는다. NoSQL 들이 분산환경을 지원하는 관점에서, 물리적인 지역성(seek)보다는 스키마의 집약성을 이야기하는 듯
N대1 관계 ex) N명이 하나의 학교를 가르킴 지역명이나 학교명을 평문으로 저장하게되면, 나중에 이름이 바뀌었을 때 갱신하기 어려워진다. unique id 로 저장하게 된다면, id 자체는 아무런 의미가 없기때문에 변경할 필요가 없어진다. id가 의미를 갖게되면, 미래에 언젠가 id를 변경해야할 수도 있다. 이러한 중복된 데이터(N대 1)를 정규화하는 것은 관계형 모델에선 쉽지만, 문서 지향에선 어렵다. DBMS가 join을 지원해주지 않으면, 어플리케이션에서 다중 질의를 해서 join을 흉내내야 한다. 지금은 join이 필요없게 만들더라도, 비즈니스가 확장되가며, 데이터는 점차 상호 연결되는 경향이 있다.
N대M 관계 ex) 프로필에 추천해준 사람들의 프로필이 뜬다. 이때, 추천인이 사진을 바꾸면, 이 사람이 추천해준 모든 사람 내 프로필의 추천인 사진이 바뀌어야한다. 즉, 엔티티를 참조해야한다.
N대1과 N대M처럼 다대다 관계에서 데이터를 중복할지, 아니면 분리하고 수동으로 참조해야할 지에 대한 논쟁은, NoSQL 이전부터 있었다. 1970년대 계층모델(JSON 데이터 모델과 유사)에서 이 문제를 해결하기 위한 관계형 모델의 join vs 네트워크 모델 계층 모델 : 트리 구조에서 모든 레코드는 하나의 부모만 있다. 1대N 에선 쉽게 동작 오늘 날의 json 모델과 비슷하다. N대M 관계를 표현하려면, 데이터를 중복하거나 다른 레코드 참조를 수동으로 해결해야만 했다. (어려움) 네트워크 모델 : 레코드는 다중 부모가 있을 수 있다. 따라서, N대1, N대M 문제를 해결 레코드 간 연결은 외래 키보다는 포인터와 유사 레코드에 접근하는 방법은 root 에서 연속된 연결 경로를 따라가는 것 N대M 에서는 다양한 경로가 있을 수 있어서, 개발자가 경로 선택, 탐색을 해줘야했다. (복잡함) 외래 데이터를 삽입하는 것 자체가 join이 이미 수행된 것 관계형 모델 : 관계는 단순히 튜플의 컬렉션일 뿐 외래 관계에서도 새로운 레코드를 쉽게 생성 가능 (외래 키 제약을 줄수는 있긴 함) 개발자는 접근 경로를 신경쓸 필요가 없다. 질의 최적화(query optimizer)로 자동으로 만든다. 문서 지향 DB N대1, N대M 관계를 표현할 때는 RDB와 다르지 않다. 외래키와 같이 문서를 참조한다. 네트워크 모델은 이것을 복잡하게 지원해서 망했지만, 오늘 날의 문서지향 DB들은 이 부분을 수용했다.
1-2. 문서 모델
문서 모델에 적합한 어플리케이션은? 문서와 비슷한 구조(1대N, 트리 구조로 한번에 전체 트리를 적재)라면 문서 모델 문서 모델의 제약 embed 된 field 를 직접 참조할 수 없음 : root.education.list[1] 와 같이 접근 경로로 해야함 N대M 관계를 사용해야하면 매력이 떨어짐 비정규화로 join 을 줄일 수 있으나, 일관성을 맞추기 위한 추가작업이 소요 cf) mongodb 4.0부터 updateMany 로 multi document transaction 을 지원하면서 좀 더 쉬워지긴 함 어플리케이션단 join으로 풀 수도 있으나, DBMS에서 지원해주는 것보다 느림 cf) mongodb 3.2부터 aggregate 에서 $lookup 으로 join을 지원하나, 샤딩된 컬렉션에선 사용할 수 없다. 상호 연결이 많은 데이터일 수록 문서 모델은 곤란, 관계형 모델은 무난, 그래프 모델은 매우 자연스럽다.
문서 모델의 스키마 유연성(schemaless) 사실 스키마가 완전히 없다고 볼 수는 없다. 쓰기 스키마는 없지만, 읽기 스키마가 암묵적으로 존재하기 때문이다. 쓰기 스키마 : 정적 타입 확인, RDB의 방식. 이게 없다면 임의의 키와 값을 자유롭게 추가 읽기 스키마 : 동적 타입 확인, 문서DB의 방식. 이게 없다면 필드의 존재여부가 보장되지 않음 즉, 어플리케이션은 데이터를 읽는 코드가 있으므로 읽기 스키마를 어느정도 가정하고 사용한다. 예를들어, fullname 을 저장하고 있다가, 성과 이름을 분리하는 작업이 있다고 가정하면, 문서 모델 : firstName, lastName 을 그냥 추가해서 저장하면 된다. 대신, 작업날짜를 기점으로 과거 데이터는 fullname을 split 쳐서 읽어야한다. 관계 모델 : ALTER TABLE users ADD COLUMN firstName VARCHAR(20) 으로 쓰기스키마를 변경하고 마이그레이션을 해줘야한다. 중단시간이 발생할 수도 있다 읽기 스키마 방식은 컬렉션 내 문서들이 모종의 이유로 동일한 구조가 아닐 때 유리하다. 하위에 여러 유형의 Object들이 있을 때, 각 유형마다 table을 만드는 것은 실용적이지 않으므로.. 개발자가 정적으로 제어하는게 아니라, 언제나 변경 가능한 외부 시스템에 의해 데이터 구조가 결정될 수 있다.
저장소 지역성(storage locality) 관련 데이터를 함께 그룹화하는 개념 문서는 json, xml 로 부호화된 문자열이나 BSON 같은 바이너리로 저장된다. 문서 중 일부만을 접근경로로 꺼내서 사용하지 않고, 전체를 잘 사용한다면 지역성의 이점을 누렸다고 볼 수 있다. (낭비가 없었으므로) 전체를 찾아야한다면 RDB는 multi table 을 join 해야하므로 이런 지역성 관점에선 좋지않다. 부호화된 문서의 크기를 바꾸지 않는 수정이라면 문서DB는 수정을 쉽게 수행한다. https://www.mongodb.com/blog/post/schema-design-for-time-series-data-in-mongodb 문서의 구조, 크기가 증가하는 쓰기를 피하라고 하는 이유 : 색인같은걸 다시 쓴다는 듯? 필드 수준의 업데이트를 권고 이 성능 제한때문에 유용한 상황이 줄어들긴 함 $inc 같은걸 지원하는 이유다. 원자성은 덤 문서 모델에만 있는 것은 아니다. 오라클의 multi-table index cluster table column-family 개념(카산드라, HBase)의 지역성
2. 데이터를 위한 질의 언어
명령형 언어는 특정 순서로 특정 연산을 수행하라고 일일이 모두 정의하고 지시한다. 결과를 결정하기 위한 알고리즘을 모두 지정 멀티 코어 병렬 처리가 어려움 cf) 네트워크 모델류의 DB와 IMS 가 이런 형태를 사용함 ex) 특정 html태그를 javascript로 DOM API 를 사용해서 스타일링하는 것. 더 좋은 api를 사용하려면 코드바꿔야함
SQL, 관계대수(relational algebra) 같은 선언형 언어는 결과를 충족해야하는 조건과 변환을 지정해주기만 하면 된다. 내부적으로 어떤 순서로 어떤 연산을 수행할지는 쿼리 최적화기가 알아서 한다. 멀티 코어 병렬 처리도 알아서 활용 ex) 특정 html태그를 css(선언형)로 꾸미는것. 브라우저 벤더가 알아서 최적화함.
2-1. 맵리듀스(MapReduce) 질의
클러스터 환경에서 분산 실행을 위한 프로그래밍 모델 많은 컴퓨터에서 대량의 데이터를 처리 일부 NoSQL DBMS가 지원
선언형 언어도 아니고 명령형 언어도 아닌 중간 지점에 있다. pure한 javasciprt 함수 2개를 정의 db.collection.mapReduce({ function map() { var year = this.timestamp.getFullYear(); var month = this.timestamp.getMonth() + 1; emit(year + “-” + month, this.number); }, function reduce(key, values) { reutrn Array.sum(values); }, { query: { type: “A” }, out: “monthlyCount” } })
이것은 저수준의 모델이다. js 함수를 어떻게 작성하냐에 따라 성능이 달라질 수도 있고 어렵다.
mongodb 2.2부터 aggregation pipeline 을 통해 선언형 질의를 지원한다. db.collection.aggregate([ { $match: { type: “A” } }, { $group: { _id: { year: { $year: “$timestamp” }, month: { $month: “$timestamp” }, }, monthlyCount: { $sum: “$number” } }} ])
성능 비교 : https://sysdig.com/blog/mongodb-showdown-aggregate-vs-map-reduce/
마이그레이션 가이드 : https://www.mongodb.com/docs/manual/reference/map-reduce-to-aggregation-pipeline/
3. 그래프형 데이터 모델
N대M 관계가 일반적일 때 사용
그래프 = 정점(=노드, 엔티티, vertex) + 간선(관계, 호, edge)
단일 노드에서 사용 예제 소셜 그래프 : vertex = 사람 , edge = 사람들이 서로 알고 있음 웹 그래프 : vertex = 웹페이지 , edge = 다른 페이지로의 링크 ex) pagerank : 웹페이지의 인기와 검색 결과에서 순위 결정 교통 네트워크 : vertex = 교차로 , edge = 교차로 간 도로, 철도 ex) 네비게이션 : 최단 경로 탐색
복합 노드에서 사용 예제 페이스북 : vertex = 사람, 장소, 이벤트, 댓글 등 , edge = 친구여부, 체크인 위치, 이벤트 참석, 포스트 댓글 등
그래프 모델 속성 그래프 모델 : Neo4j, Titan, InfiniteGraph 트리플 저장소 모델 : Datomic, AllegroGraph
그래프 질의 언어 선언형 질의 언어 : 사이퍼(Cypher), 스파클(SPARQL), Datalog 명령형 질의 언어 : 그렘린(Gremlin)
그래프 처리 프레임워크 : 프리글(Pregel)
3-1. 속성 그래프 모델
vertex의 요소 고유한 식별자 outgoing edge 집합 : 이 vertex 에서 나가는 간선들 incoming edge 집합 : 이 vertex 로 들어오는 간선들 속성(attribute) 컬렉션(key-value 쌍)
edge의 요소 고유한 식별자 edge 가 시작하는 vertex : tail vertex = 꼬리 노드 edge 가 끝나는 vertex : head vertex = 머리 노드 두 vertex 간 관계 유형을 설명하는 레이블 속성(attribute) 컬렉션(key-value 쌍)
3-1-1. 사이퍼(Cypher) 질의 언어
속성 그래프를 위한 선언현 질의 언어
neo4j 용으로 만들어졌다.
CREATE (USA:Location {name:’USA’, type:’country}), (Idaho:Location {name:’Idaho’, type:’state’}))
(Idaho) – [:WITHIN] -> (USA) : 꼬리노드 Idaho 에서 머리노드 USA인 WITHIN 레이블로 구성된 edge
: 꼬리노드 Idaho 에서 머리노드 USA인 WITHIN 레이블로 구성된 edge () -> [:WITHIN*0..] -> () : 0회 이상 WITHIN edge을 따라 가라
: 0회 이상 WITHIN edge을 따라 가라 순방향으로 질의할 수도 있지만, 역방향으로 질의할 수도 있다.
3-1-2. SQL 에서 Graph 질의
관계형 스키마로 표현 CREATE TABLE vertices ( vertex_id INTEGER PRIMARY KEY, properties JSON ); CREATE TABLE edges ( edge_id INTEGER PRIMARY KEY, tail_vertex INTEGER REFERENCES vertices (vertex_id), head_vertex INTEGER REFERENCES vertices (vertex_id), label TEXT, properties JSON ) CREATE INDEX edges_tails ON edges (tail_vertex); # vertex 가 주어지면 outgoing edge 집합을 쉽게 찾음 CREATE INDEX edges_heads ON edges (head_vertex); # vertex 가 주어지면 incoming edge 집합을 쉽게 찾음
SQL 에서는 질의에 필요한 join 을 미리 알고 있어야하지만, 그래프 질의에서는 찾고자 하는 vertex 를 찾기 전에 가변적인 여러 edge 를 순회해야 한다. 따라서, 미리 join 수를 알 수가 없다. SQL 에서 굳이 어렵게라도 하려면, 재귀 공통 테이블식(recursive common table expression)을 통해 구현할 수 있다. WITH RECURSIVE 가상테이블1명 AS ( SELECT – # 초기질의 UNION [ALL] SELECT – # 재귀질의 [WHERE -] # 종료 조건 ), ( 가상테이블2명 AS … ), ( … )
책에서는 RDBMS 에서 그래프 데이터 모델을 권장하고 있진 않지만, 스토리지엔진으로 InnoDB 대신 그래프 엔진을 선택하면 위에보단 나은 성능을 가져간다. MariaDB : OQGRAPH(Open Query Graph) https://mariadb.com/kb/en/oqgraph-storage-engine/ https://mariadb.com/kb/en/oqgraph-examples/ https://www.slideshare.net/AntonyTCurtis/oqgraph-at-mysql-users-conference-2011 PostgreSQL : Apache AGE PostgreSQL의 OpenCypher의 그래프 데이터베이스 기능을 지원해주는 확장 라이브러리 https://age.apache.org/
3-1-3. 문서DB 에서 Graph 질의
mongodb 3.4 부터 $graphLookup 을 지원한다. https://www.mongodb.com/docs/manual/reference/operator/aggregation/graphLookup/
을 지원한다. $lookup 과 마찬가지로 sharding 컬렉션에선 사용 불가능
일반적인 graph 유즈케이스의 70% 정도를 커버
3-2. 트리플 저장소 모델
트리플 저장소 모델은 같은 생각을 다른 용어로 사용해서 설명할 뿐, 속성 그래프 모델과 거의 동등하다.
three-part(트리플) statements : 주어(subject) + 서술어(predicate) + 목적어(object) ex) 빨간색소년(=주어)은 사과(=목적어)를 좋아(=서술어)한다. 주어 = vertex 목적어 원시 데이터값(정수, 문자열)이라면, 서술어와 목적어는 각각 vertex 속성의 key와 value 이다. 그래프의 다른 vertex 이라면, 서술어는 edge 이고, 주어는 꼬리 노드, 목적어는 머리 노드이다.
turtle 형식으로 트리플 작성 예제 turtle 문법 : https://www.w3.org/TR/turtle/ _:lucy a :Person. _:lucy :name “Lucy”. : vertex lucy의 name은 Lucy다. _:lucy :bornIn _:idaho. : vertex lucy 는 vertex idaho 에서 태어났다.
3-2-1. 스파클(SPARQL) 질의 언어
https://www.w3.org/TR/sparql11-query/
SPARQL Protocol and RDF Query Language
RDF 데이터 모델을 사용한 트리플 저장소 질의 언어 RDF = Resource Description Framework 시맨틱 웹에서 유래 : 서로 다른 웹사이트가 일관된 형식으로 데이터를 개시한다면, 만물을 데이터베이스처럼 쓸 수 있을 것이다. 사람이 읽을 수 있는 형식 인터넷 전체의 데이터 교환을 위해 설계
사이퍼 보다 먼저 만들어지고, 사이퍼가 스파클의 일부를 차용함
스파클은 변수를 ?으로 시작
ex1) 미국에서 유럽으로 이주한 사람 찾기 사이퍼 : (person) -[:BORN_IN] -> () -[:WITHIN*0..] -> (location) 스파클 : ?person :bornIn / :within* ?location
ex2) usa 변수 선언 사이퍼 : (usa {name:’United States})’ 스파클 : ?usa :name ‘United States’.
3-3. Datalog
1980년대 탄생, 가장 오래되었음
서술어(주어, 목적어) 로 작성한다. name(usa, ‘United States’) within(idaho, usa)
로 작성한다. 변수는 대문자로 시작
사이퍼나 스파클은 바로 SELECT로 질의하지만, Datalog 는 단계를 나눠 조금씩 질의하며 나아간다.
3-4. 그래프 데이터 모델과 네트워크 데이터 모델의 차이점
네트워크 모델 그래프 모델 스키마 중첩 가능한 레코드 타입을 지정 vertex는 edge 로 다른 vertex와 자유롭게 연결 특정 레코드 도달 접근 경로 중 하나씩 탐색 고유id로 직접 참조 or 색인을 통해 빠르게 탐색 정렬 tree구조라 삽입 시점에 정렬해둠 읽기 질의를 할때 유연하게 정렬 질의어 명령형, 스키마 변경에 따라 질의어 변경필요 선언형
키워드에 대한 정보 데이터 중심 애플리케이션 설계
다음은 Bing에서 데이터 중심 애플리케이션 설계 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 알아두면 인생 도움되는 개발자 책 추천
- 코딩
- 프로그래밍
알아두면 #인생 #도움되는 #개발자 #책 #추천
YouTube에서 데이터 중심 애플리케이션 설계 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 알아두면 인생 도움되는 개발자 책 추천 | 데이터 중심 애플리케이션 설계, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.