[[TableOfContents]] [[pagelist(^Bigtable)]] == 구조 == í…Œì´ë¸” -> 태블릿 -> SSTABLE -> block 1. í…Œì´ë¸”ì€ íƒœë¸”ë¦¿ë“¤ì˜ ë…¼ë¦¬ì ì¸ ì§‘í•©. 1. íƒœë¸”ë¦¿ì€ SSTABLEë“¤ì˜ ì§‘í•©ìœ¼ë¡œ 구성ë˜ì–´ìžˆìœ¼ë©° SSTABLEë“¤ì˜ ë¦¬ìŠ¤íŠ¸ë¥¼ ì €ìž¥í•˜ê³ ìžˆë‹¤. 1. SSTABLEì€ blockì˜ ì§‘í•©ì´ë©° blockë“¤ì˜ ì£¼ì†Œì™€ 오프셋으로 구성ë˜ì–´ìžˆë‹¤. == í…Œì´ë¸” == 1. Key - value 1. row key : url(ë˜ëŠ” ë°ì´í„°ê°’ì˜ ëŒ€í‘œ, ì œëª©ë“±) 1. column family : column 종류 1. 앵커 1. 콘í…ì¸ (ì œëª©?) <- ì»¬ëŸ¼ì˜ ê°’ì´ value 1. Title 1. timestamp는 ë³„ë„ 1. value : 해당 사ì´íЏ/키와 매핑ë˜ëŠ” êµ¬ì¡°í™”ëœ ë°ì´í„°ê°’ == 태블릿 == íƒœë¸”ë¦¿ì„ ëª¨ë‘ í•©ë³‘í•˜ë©´ í…Œì´ë¸”ì´ ëœë‹¤. íƒœë¸”ë¦¿ì€ SSTABLEë“¤ì˜ ì§‘í•©ìœ¼ë¡œ 구성ë˜ì–´ìžˆìœ¼ë©° SSTABLEë“¤ì˜ ë¦¬ìŠ¤íŠ¸ë¥¼ ì €ìž¥í•˜ê³ ìžˆë‹¤. 1. íƒœë¸”ë¦¿ì˜ ì´ë¦„ì€ : 마지막 키 -> ì¹´íƒˆë¡œê·¸ì— ë§¤í•‘í•„ìš” 1. 마지막 키는 카탈로그ì—서 shorten id와 매핑ë˜ì–´ìžˆë‹¤. 1. íƒœë¸”ë¦¿ì€ í•˜ë‚˜ ì´ìƒì˜ row로 구성ë¨. 1. íƒœë¸”ë¦¿ì€ SSTABLEì˜ ì´ë¦„+ì˜¤í”„ì…‹ì„ ë¦¬ìŠ¤íŠ¸ë¥¼ ì €ìž¥í•˜ê³ ìžˆë‹¤. === SPLIT === 1. split 허용 1. 트리거 : 태블릿 í¬ê¸°ê°€ 200MB ì´ìƒì¼ë•Œ 1. row는 하나 ì´ìƒì˜ íƒœë¸”ë¦¿ì— ì¡´ìž¬í• ìˆ˜ 있다. == SSTABLE == SSTABLEì€ í•˜ë‚˜ì˜ memtableê³¼ blockì˜ ì‹œìž‘ì£¼ì†Œì™€ 오프셋들로 ì´ë£¨ì–´ì ¸ìžˆë‹¤. DFS 최소 íŒŒì¼ ë‹¨ìœ„ List 사용 1. SSTABLE 명? 1. 태블릿Id 1. + ??? 1. '''ISSUE''' : 여러 íƒœë¸”ë¦¿ì´ ì°¸ì¡°í•˜ëŠ” 경우는 어떻게 하지? 1. ì¸ë±ìФ * ISSUE 1. ë‹¤ìˆ˜ì˜ íƒœë¸”ë¦¿ì´ í•˜ë‚˜ì˜ SSTABLEì„ ì°¸ì¡°í• ë•Œì˜ ë¬¸ì œì == ë¸”ë¡ == 1. 블ë¡ì€ 64KBì´í•˜ì˜ 암시ì ì¸ ìžë£Œêµ¬ì¡°ì´ë‹¤. 1. SSTABLEì˜ ì£¼ì†Œì™€ 오프셋으로 블ë¡ë“¤ì´ 구분ëœë‹¤. 1. ì‹¤ì œ 키/ë°¸ë¥˜ë“¤ì€ ë¸”ë¡ì— ì €ìž¥ë˜ì–´ìžˆë‹¤. == memtable == ë°°ì—´ 1. ë©”ëª¨ë¦¬ì— í• ë‹¹ë˜ì–´ìžˆë‹¤. 1. 태블릿당 한개 1. ì“°ê¸°ë°–ì— ì•ˆë¨. 1. í• ë‹¹ëœ ë©”ëª¨ë¦¬ í¬ê¸°ê°€ 다 차서 ë”ì´ìƒ 쓸 수 ì—†ì„ ë•Œ SSTABLE로 ì €ìž¥í•œë‹¤. * issue 1. 메모리 í¬ê¸°ëŠ” : 64MBì˜ ë°°ìˆ˜ë¡œ 1. SSTABLEë“¤ì˜ ì¸ë±ìŠ¤ë¥¼ 가진다 1. ì¸ë±ìŠ¤ëŠ” 어떻게? == 로컬리티 그룹 == íŠ¹ì • 컬럼 패밀리를 그룹화한것. == 커밋로그 == 1. íƒœë¸”ë¦¿ì˜ ID + ì“°ë ¤ëŠ” 키:밸류 1. íƒœë¸”ë¦¿ì˜ IDì€ íƒœë¸”ë¦¿ì˜ ê°€ìž¥ 마지막 키를 ì´ìš©í•´ ë§Œë“ ë‹¤. 1. íƒœë¸”ë¦¿ì˜ IDì€ ë§¤í•‘í…Œì´ë¸”(카탈로그)ì—서 ì§§ì€ ID으로 대체ë¨. 1. ì €ìž¥ê³µê°„ì˜ ìž¬ì‚¬ìš© : 커밋로그는 ì›í˜• ìžë£Œêµ¬ì¡°ë¥¼ 사용하여 ìžë™ìœ¼ë¡œ ê³µê°„ì„ ìž¬ì‚¬ìš©í•˜ë„ë¡ í•œë‹¤. 1. ì»¤ë°‹ë¡œê·¸ì˜ ê°€ìž¥ 마지막 타임스탬프와 memtableì˜ ê°€ìž¥ ì˜¤ëž˜ëœ íƒ€ìž„ìŠ¤íƒ¬í”„ì™€ 비êµí•˜ì—¬ memtableì˜ íƒ€ìž„ìŠ¤íƒ¬í”„ê°€ ë” ìµœì‹ ì´ë¼ë©´ 로그ì‚ì œê°€ëŠ¥ 1. memtableì˜ T/Sê°€ ë” ìµœì‹ ì´ ì•„ë‹ˆë¼ë©´ minor compactionì„ í•˜ì—¬ 로그를 비운다. == 카탈로그 == 1. ì¹´íƒˆë¡œê·¸ì˜ ì£¼ì†ŒëŠ” Lockerì— ë“±ë¡ë˜ì–´ìžˆë‹¤. (clientì˜ ì ‘ê·¼ì„ ìœ„í•´ chubbyì— ë“±ë¡) 1. 카탈로그 ë˜í•œ 태블릿. TSê°€ 관리한다. 1. ì¹´íƒˆë¡œê·¸ì— í•„ìš”í•œ 것 1. 태블릿 ID 매핑 í…Œì´ë¸” 1. 컬럼 패밀리 개수 1. ë˜? * ISSUE 1. ì¹´íƒˆë¡œê·¸ì— ì–¸ì œ ì ‘ê·¼í• ê²ƒì¸ê°€? == 태블릿 컴색 트리/ 태블릿 트래커 == '''루트태블릿, 메타ë°ì´í„° 태블릿, ìœ ì €íƒœë¸”ë¦¿ìœ¼ë¡œ 구성ë¨. ì¼ë°˜ 태블릿과 마찬가지로 SSTABLE로 ì´ë£¨ì–´ì ¸ìžˆìœ¼ë©° write onlyìž„'''. '''ìžë£Œêµ¬ì¡° : B+-트리''' 1. '''루트 태블릿''' 1. Lockerì— ìœ„ì¹˜ê°€ 기ë¡ëœë‹¤ 1. ë©”íƒ€íƒœë¸”ë¦¿ì´ ë¶„í• ë 때(ë˜ëŠ” 삽입ë 때) ê°±ì‹ ë¨. 1. ë£¨íŠ¸íƒœë¸”ë¦¿ì˜ ì›ì†Œ 하나는 메타ë°ì´í„° '''태블릿'''ê³¼ 매ì¹ëœë‹¤. 1. '''메타ë°ì´í„° 태블릿''' 1. ìœ ì €íƒœë¸”ë¦¿ì´ ë¶„í• ë 때(ë˜ëŠ” 삽입ë 때) ê°±ì‹ ë¨ 1. '''ìœ ì € 태블릿''' 1. 태블릿 ID(row key)와 태블릿 서버 매핑해줌. 1. íƒœë¸”ë¦¿ì´ ì–´ë””ì— ì €ìž¥ë˜ì–´ìžˆëŠ”ì§€ 알 수 있ìŒ. 1. ì €ìž¥ ë°ì´í„° 1. key : 태블릿 ID(row key) value : IP+port#