밋업·BIT리뷰의 두 번째 정류장은 바로 여기! 새로운 지식을 얻다√

7월 28일 오후, 베이징 공과대학에서 열린 두 번째 openGemini 오프라인 밋업이 성공적으로 마무리되었습니다.

이번 기술 살롱에서 openGemini 커뮤니티가 가져온 주제는 "데이터베이스의 데이터 구조 및 알고리즘 적용"입니다. 커뮤니티 개시자는 openGemini 시계열 데이터베이스에 사용되는 데이터 구조 및 알고리즘을 Yuwei 과학기술대학교 학생들과 공유했습니다. LSM-Tree는 주로 의미, 구조, B+tree와의 차이점, 최적화 측면에서 설명됩니다.

아래는 이번 세션에서 공유한 전체 콘텐츠입니다. 유용한 정보가 가득하니 놓치지 마세요~

 

시계열 데이터베이스에 사용되는 데이터 구조 및 알고리즘 개요

데이터 구조

  • 배열(동적 배열 포함)
  • 맵(HashMap, BitMap 포함)

  • 사전 트리

  • 반전된 인덱스

  • 크고 작은 힙

  • 연결리스트

  • LSM 트리

연산

  • 단어 분할 알고리즘

  • 데이터 압축 알고리즘

  • 정렬 알고리즘(힙 정렬, 삽입, 병합, 고속)

  • 검색 알고리즘(이등분, 트리 순회)

  • 이상 징후 탐지/예측 알고리즘(AI)

  • 데이터 인코딩 및 디코딩 알고리즘

  • 메모리 재사용

  • 뗏목

  • 링크 재사용

 

LSM 트리는 최신 NoSQL 데이터베이스 스토리지 엔진의 핵심입니다.

LSM-tree:  Log-StructuredMerge-tree는 트리가 아니라 데이터를 정리하기 위한 계층적 구조일 뿐이며 빅데이터 시나리오에서 데이터를 효율적으로 쓰는 방법에 대한 문제를 주로 해결합니다.

주요 아이디어:

  • 무작위 쓰기가 순차 쓰기로 변환되어 모든 I/O를 최대한 활용하여 데이터의 효율적인 순차 쓰기를 달성합니다.

  • 데이터 계층적 병합은 시간이 지남에 따라 데이터 파일이 분산되는 문제를 방지합니다.

이미지 출처: https://anyview.fun/2022/09/23/%E4%B8%80%E6%96%87%E4%BA%86%E8%A7%A3lsm-tree/

 

NoSQL 데이터베이스가 B+트리를 집합적으로 포기하는 이유는 무엇입니까?

B+ 트리의 장점: 지역성의 원리를 사용하여 정확히 한 페이지에 해당하는 하나의 노드를 로드하면 한 번의 I/O 읽기만 필요합니다. B+ 트리는 더 짧고 두꺼워서 I/O 수를 줄이므로 매우 효율적인.

B+ 트리의 단점: 기본 키가 순차적으로 증가하지 않으면 데이터가 삽입될 때마다 많은 양의 데이터 마이그레이션 및 공간 조각화가 발생합니다. 기본 키가 순서대로 증가하더라도 많은 쓰기 요청의 분포는 여전히 무작위이므로 많은 수의 무작위 디스크 읽기 및 쓰기가 발생하여 디스크 IO 시간이 증가할 수 있습니다.

디스크 IO의 시간 소모는 주로 탐색 시간 + 회전 지연 + 데이터 전송 시간의 세 부분으로 구성됩니다.

최적화 방향 : 탐색시간 및 회전지연 최소화, 즉 Random I/O 감소

 

요약: 빅데이터 시나리오에서는 데이터의 양이 많고 쓰기 동시성이 크다. B+ 트리를 사용하면 성능이 너무 떨어진다. LSM-tree는 주로 이 문제를 해결하고 많은 수의 무작위 쓰기를 순차 쓰기로 변경한다. .

참고서문:《The Design and Implementation ofa Log-Structured File System》

 

LSM 트리는 데이터가 순서대로 기록되도록 어떻게 보장합니까?

 

IO 성능을 향상시키기 위해서는 무작위 작업을 순차적 작업으로 바꿀 수 있는 메커니즘이 필요하므로 LSM 트리가 있습니다. LSM은 많은 양의 쓰기를 메모리에 캐시하고, 어느 정도 누적되면 일괄적으로 파일에 쓰기 때문에 한 번의 I/O에 여러 개의 데이터를 쓸 수 있어 쓰기 작업이 대폭 늘어납니다. 희생을 치르고 일부 읽기 성능이 향상되었습니다.

 

openGemini에서 LSM 트리 구현

openGemini는 동시에 작성된 대량의 시계열 데이터를 메모리의 타임라인 키에 따라 버킷에 캐시하며, 각 버킷을 레코드(Record)라고 하며, 하나의 레코드(One Record)는 하나의 타임라인의 데이터를 저장하며 컬럼으로 구성됩니다. 캐시는 주기적으로 디스크 파일에 유지됩니다.

LSM 트리 최적화

LSM-트리는 임의 I/O를 줄여 더 나은 쓰기 처리량을 달성하지만 백그라운드 압축(파일 병합)으로 인해 여전히 대규모 쓰기 I/O 증폭이 발생하여 쓰기 성능에 영향을 미치고 빈번한 쓰기는 디스크 수명에 해를 끼치는 역할도 합니다. 따라서 LSM 쓰기 증폭을 줄이는 방법과 LSM 쿼리 성능을 향상시키는 방법에 대한 관련 연구가 부족하지 않습니다.

LSM 트리 최적화 방법:

참고 문서: "LSM 기반 스토리지 기술: 설문조사"

 

LSM-트리 최적화 방법 중 하나: Bloom 필터

 

블룸 필터(Bloom filter): 긴 바이너리 벡터와 일련의 랜덤 매핑 함수로, 해시 함수가 가리키는 모든 비트가 1이면 대상 데이터가 존재한다는 뜻이고, 그렇지 않으면 존재하지 않는다는 뜻이다.

적용 시나리오: 대규모 데이터를 처리할 때 Bloom 필터를 사용하여 중복 제거를 수행합니다. Set 컬렉션의 중복 제거 기능과 비교하여 Bloom 필터는 90% 이상의 공간을 절약할 수 있습니다.

Bloom 필터가 값이 존재하지 않는다고 판단하면 이 값은 확실히 존재하지 않는 것입니다.

어떤 값이 존재한다고 판단하면 실제로는 이 값만 존재할 수도 있고, 오판할 확률은 약 1% 정도이다.

 

읽어 주셔서 감사합니다

openGemini는 2019년부터 발전해 왔으며 데이터 구조 및 알고리즘 최적화에 대한 많은 실무 경험을 축적했습니다. 커뮤니티는 대학 개발자를 위한 기술 지침 및 관련 커뮤니티 개발 교육을 제공합니다. 학생과 개발자는 커뮤니티에 참여하여 개발에 참여하고 학습할 수 있습니다. , 개인의 기술 능력을 향상시킵니다.

 

3차 밋업 준비중입니다~

우리의 이야기는 어디에서 계속될까요? 함께 기대해주세요 ✨...

오픈 소스 프레임워크 NanUI의 작성자가 철강 판매로 전환하여 프로젝트가 중단되었습니다. Apple App Store의 무료 목록 1위는 포르노 소프트웨어인 TypeScript입니다. 이제 막 인기를 얻었는데 왜 대기업들은 이를 포기하기 시작합니까? ? TIOBE 10월 목록: Java가 가장 큰 감소세를 보이고 C#은 Java Rust 1.73.0 출시 에 가까워지고 있습니다. 한 남자가 AI 여자친구의 부추김을 받아 영국 여왕을 암살했으며 9년 징역형을 선고받았습니다. Qt 6.6 공식 출시 Reuters: RISC-V 기술이 중미 기술 전쟁의 핵심이 된다 새로운 전장 RISC-V: 단일 기업이나 국가에 의해 통제되지 않는 Lenovo, Android PC 출시 계획
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/3234792/blog/10111630