[[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 최소 íŒŒì¼ ë‹¨ìœ„ 1. SSTABLE 명? 1. 태블릿Id 1. + 마지막 row key 1. ë°ì´í„° 블ë¡ê³¼ ì¸ë±ìŠ¤ ë¸”ë¡ 1. ë°ì´í„° ë¸”ë¡ 1. ì¸ë±ìŠ¤ ë¸”ë¡ 1. 약 64KB마다 존재하는 row key를 블ë¡ì˜ ì¸ë±ìŠ¤ë¡œ 한다. 1. 블ë¡ì˜ ì¸ë±ìŠ¤ì™€ ì‹¤ì œ 파ì¼ì˜ 주소를 1. ë‹¤ìˆ˜ì˜ íƒœë¸”ë¦¿ì´ í•˜ë‚˜ì˜ SSTableì„ ì°¸ì¡°í• ë•Œì˜ ë¬¸ì œì ? 1. 여러 íƒœë¸”ë¦¿ì´ í•˜ë‚˜ì˜ SSTableì„ ì°¸ì¡°í•´ë„ ë¸”ëŸë“¤ì„ 오프셋으로 참조하므로 ê°™ì€ ë¶€ë¶„ì„ ì°¸ì¡°í•˜ëŠ” ì¼ì´ 없다. 1. ê° íƒœë¸”ë¦¿ì˜ majorCompactionì‹œ 태블릿별로 SSTableë“¤ì´ ë‚˜ëˆ„ì–´ì§€ë¯€ë¡œ ê²°êµ SSTableì€ í•˜ë‚˜ì˜ íƒœë¸”ë¦¿ì— í”¼ì°¸ì¡°ëœë‹¤. == ë¸”ë¡ == 1. 블ë¡ì€ 64KBë‚´ì™¸ì˜ ì•”ì‹œì ì¸ ìžë£Œêµ¬ì¡°ì´ë‹¤. 1. SSTABLEì˜ ì£¼ì†Œì™€ 오프셋으로 블ë¡ë“¤ì´ 구분ëœë‹¤. 1. 명시ì ì¸ ìžë£Œêµ¬ì¡°ê°€ ì•„ë‹ˆë¼ SSTableì—ì„œ row key들로 구분ë˜ì–´ì§„ 범위ì´ë‹¤. 1. ë¸”ë¡ ì¸ë±ìŠ¤ë¡œ ì„ íƒëœ row key부터 ë‹¤ìŒ ë¸”ë¡ ì¸ë±ìŠ¤ë¡œ ì„ íƒëœ row keyê°€ 나올 ë•Œ 까지를 í•˜ë‚˜ì˜ ë¸”ë¡ ë‹¨ìœ„ë¡œ 한다. 1. 반드시 64KBê°€ ë˜ì§€ëŠ” ì•ŠìŒ == memtable == 1. ë©”ëª¨ë¦¬ì— í• ë‹¹ë˜ì–´ìžˆë‹¤. 1. 태블릿당 한개 1. ì“°ê¸°ë°–ì— ì•ˆë¨. 1. '''ë°ì´í„° 블ëŸê³¼''' '''ì¸ë±ìŠ¤ 블ëŸìœ¼ë¡œ''' ë‚˜ëˆ„ì–´ì§ 1. í¬ê¸° 1. '''ë°ì´í„° ë¸”ëŸ í¬ê¸° : 32MB''' 1. '''ì¸ë±ìŠ¤ 블ëŸì€ í¬ê¸°ì œí•œ 없다'''. 1. ë°ì´í„° 1. '''ë°ì´í„° ë¸”ëŸ : 키:ê°’ì„ ì“´ë‹¤'''. 1. '''ì¸ë±ìŠ¤ ë¸”ëŸ : íƒœë¸”ë¦¿ì´ ì°¸ì¡°í•˜ê³ ìžˆëŠ” SSTableì˜ ë¸”ëŸ ì¸ë±ìŠ¤ë“¤''' 1. í• ë‹¹ëœ ë©”ëª¨ë¦¬ í¬ê¸°ê°€ 다 차서 ë”ì´ìƒ 쓸 수 ì—†ì„ ë•Œ SSTABLEë¡œ ì €ìž¥í•œë‹¤. 1. SSTABLEë“¤ì˜ ì¸ë±ìŠ¤ë¥¼ 가진다 1. ì¸ë±ìŠ¤ëŠ” 어떻게? == 로컬리티 그룹 == íŠ¹ì • ì»¬ëŸ¼ì„ ê°€ì§€ëŠ” rowë“¤ì„ ë³„ë„ì˜ íƒœë¸”ë¦¿ì— ì €ìž¥í•œ 것. ex) 타ì´í‹€ 1. TSì˜ ë©”ëª¨ë¦¬ì— ì¡´ìž¬í•œë‹¤. 1. íŠ¹ì • 컬럼 ì¢…ë¥˜ë§Œì„ ê°€ì§„ë‹¤. ex) title == 커밋로그 == 1. íƒœë¸”ë¦¿ì˜ ID + ì“°ë ¤ëŠ” 키:밸류 1. íƒœë¸”ë¦¿ì˜ IDì€ íƒœë¸”ë¦¿ì˜ ê°€ìž¥ 마지막 키를 ì´ìš©í•´ ë§Œë“ ë‹¤. 1. íƒœë¸”ë¦¿ì˜ IDì€ ë§¤í•‘í…Œì´ë¸”(카탈로그)ì—ì„œ ì§§ì€ ID으로 대체ë¨. 1. ì €ìž¥ê³µê°„ì˜ ìž¬ì‚¬ìš© : 커밋로그는 ì›í˜• ìžë£Œêµ¬ì¡°ë¥¼ 사용하여 ìžë™ìœ¼ë¡œ ê³µê°„ì„ ìž¬ì‚¬ìš©í•˜ë„ë¡ í•œë‹¤. 1. ì»¤ë°‹ë¡œê·¸ì˜ ê°€ìž¥ 마지막 타임스탬프와 memtableì˜ ê°€ìž¥ ì˜¤ëž˜ëœ íƒ€ìž„ìŠ¤íƒ¬í”„ì™€ 비êµí•˜ì—¬ memtableì˜ íƒ€ìž„ìŠ¤íƒ¬í”„ê°€ ë” ìµœì‹ ì´ë¼ë©´ 로그ì‚ì œê°€ëŠ¥ 1. memtableì˜ T/Sê°€ ë” ìµœì‹ ì´ ì•„ë‹ˆë¼ë©´ minor compactionì„ í•˜ì—¬ 로그를 비운다. == 카탈로그 == 1. ì¹´íƒˆë¡œê·¸ì˜ ì£¼ì†ŒëŠ” Lockerì— ë“±ë¡ë˜ì–´ìžˆë‹¤. (clientì˜ ì ‘ê·¼ì„ ìœ„í•´ Lockerì— ë“±ë¡) 1. 카탈로그 ë˜í•œ 태블릿. TSê°€ 관리한다. 1. ì¹´íƒˆë¡œê·¸ì— í•„ìš”í•œ 것 1. 태블릿 ID 매핑 í…Œì´ë¸” 1. 컬럼 패밀리 개수 1. 카탈로그 ì „ìš© íŒŒì¼ í•„ìš”?? SSTable 하나를 í• ë‹¹ë°›ì•„ 다 쓸때까지 í•´ì œí•˜ì§€ 않는건 어떨까? * 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#