githubEdit

๐Ÿ˜‚Expand3: Index_Iterator

่ฟ™้‡Œๅฐฑๆ˜ฏ้œ€่ฆๅฎž็Žฐ่ฟญไปฃๅ™จ็š„ไธ€ไบ›ๆ“ไฝœ,ๆฏ”ๅฆ‚beginใ€endใ€isend็ญ‰็ญ‰

ไธ‹้ขๆ˜ฏๅฏนไบŽIndexIterator็š„ๆž„้€ ๅ‡ฝๆ•ฐ

ๅ…ถไธญidx่กจ็คบๅฝ“ๅ‰pageไธญ็š„็ฌฌๅ‡ ไธชtuple

INDEXITERATOR_TYPE::IndexIterator(LeafPage *leftmost_leaf, int idx, BufferPoolManager *buffer_pool_manager)
    : curr_page(leftmost_leaf), curr_index(idx), bpm(buffer_pool_manager) {}

1. ้ฆ–ๅ…ˆๆˆ‘ไปฌๆฅ็œ‹beginๅ‡ฝๆ•ฐ็š„ๅฎž็Žฐ#arrow-up-right#arrow-up-right

  1. ๅˆฉ็”จkeyๅ€ผๆ‰พๅˆฐๅถๅญ็ป“็‚น

  2. ็„ถๅŽ่Žทๅ–ๅฝ“ๅ‰keyๅ€ผ็š„indexๅฐฑๆ˜ฏbegin็š„ไฝ็ฝฎ

Page *page = FindLeafPage(KeyType{}, true);  // leftmost_leaf pinned
  LeafPage *leftmost_leaf = reinterpret_cast<LeafPage *>(page->GetData());
  buffer_pool_manager_->UnpinPage(leftmost_leaf->GetPageId(), false);
  return INDEXITERATOR_TYPE(leftmost_leaf, 0, buffer_pool_manager_);

2. endๅ‡ฝๆ•ฐ็š„ๅฎž็Žฐ#arrow-up-right#arrow-up-right

  1. ๆ‰พๅˆฐๆœ€ๅผ€ๅง‹็š„็ป“็‚น

  2. ็„ถๅŽไธ€็›ดๅ‘ๅŽ้ๅކ็›ดๅˆฐnextPageId=-1็ป“ๆŸ

  3. ่ฟ™้‡Œๆณจๆ„้œ€่ฆ้‡่ฝฝ!=ๅ’Œ==

endๅ‡ฝๆ•ฐ

==ๅ’Œ !=ๅ‡ฝๆ•ฐ

่ฟ™้‡Œๆณจๆ„ๅœจ๏ผ= ้‚ฃ้‡Œไธ่ƒฝๅ†™ๆˆitr != *this

3. ้‡่ฝฝ++ๅ’Œ*(่งฃๅผ•็”จ็ฌฆๅท)

  1. ้‡่ฝฝ++

็ฎ€ๅ•็š„index++็„ถๅŽ่ฎพ็ฝฎnextPageIdๅณๅฏ

  1. ้‡่ฝฝ*

return array[index]ๅณๅฏ

5. ๅนถๅ‘ๆœบๅˆถ็š„ๅฎž็Žฐ

0. ้ฆ–ๅ…ˆๅคไน ไธ€ไธ‹่ฏปๅ†™๐Ÿ”’ๆœบๅˆถ

  1. ่ฏปๆ“ไฝœๆ˜ฏๅฏไปฅๅคšไธช่ฟ›็จ‹ไน‹้—ดๅ…ฑไบซlatch็š„่€Œๅ†™ๆ“ไฝœๅˆ™ๅฟ…้กปไบ’ๆ–ฅ

  2. ๅŠ ๅ…ฅMaxReaderๆ•ฐๅฐฑๆ˜ฏไธบไบ†้˜ฒๆญข็ญ‰ๅพ…็š„โŒ›๏ธๅ†™่ฟ›็จ‹้ฅฅ้ฅฟ

้ฆ–ๅ…ˆๆฅ็œ‹ๅฆ‚ๆžœๆฒกๆœ‰๐Ÿ”’ๆœบๅˆถๅคš็บฟ็จ‹ไผšๅ‘็”Ÿไป€ไนˆ้—ฎ้ข˜

  1. ็บฟ็จ‹T1ๆƒณ่ฆๅˆ ้™ค44ใ€‚

  2. ็บฟ็จ‹T2 ๆƒณ่ฆๆŸฅๆ‰พ41

image-20210126184533688
  1. ๅ‡่ฎพT2ๅœจๆ‰ง่กŒๅˆฐDไฝ็ฝฎ็š„ๆ—ถๅ€™ๅˆๅˆ‡ๆขๅˆฐ็บฟ็จ‹T1

  2. ่ฟ™ไธชๆ—ถๅ€™T1่ฟ›่กŒ้‡ๆ–ฐๅˆ†้…๏ผŒไผšๆŠŠ41ๅ€ŸๅˆฐI็ป“็‚นไธŠ

  3. T1ๆ‰ง่กŒๅฎŒๆˆๅˆ‡ๆขๅ›žT2่ฟ™ๆ—ถๅ€™T2ๅ†ๅŽปๅŽŸๆฅ็š„ๆ‰ง่กŒๅฏปๆ‰พ41ๅฐฑไผšๆ‰พไธๅˆฐ

image-20210126184727498

ๅฐฑไผšๅ‡บ็Žฐไธ‹้ข็š„ๆƒ…ๅ†ตใ€‚โ“

image-20210126184901306

็”ฑๆญคๆˆ‘ไปฌ้œ€่ฆ่ฏปๅ†™๐Ÿ”’็š„ๅญ˜ๅœจ

  1. ๅฏนไบŽfindๆ“ไฝœ

็”ฑไบŽๆˆ‘ไปฌๆ˜ฏๅช่ฏปๆ“ไฝœ๏ผŒๆ‰€ไปฅๆˆ‘ไปฌๅˆฐไธ‹ไธ€ไธช็ป“็‚น็š„ๆ—ถๅ€™ๅฐฑๅฏไปฅ้‡Šๆ”พไธŠไธ€ไธช็ป“็‚น็š„Latch

image-20210126185917549

ๅ‰ฉไธ‹็š„ๆ“ไฝœ้ƒฝๆ˜ฏไธ€ๆ ท็š„

ๅฏนไบŽdeleteๅˆ™ไธไธ€ๆ ท

ๅ› ไธบๆˆ‘ไปฌ้œ€่ฆๅ†™ๆ“ไฝœ

่ฟ™้‡Œๆˆ‘ไปฌไธ่ƒฝ้‡Šๆ”พ็ป“็‚นA็š„Latchใ€‚ๅ› ไธบๆˆ‘ไปฌ็š„ๅˆ ้™คๆ“ไฝœๅฏ่ƒฝไผšๅˆๅนถๆ น่Š‚็‚นใ€‚

image-20210126190112632

ๅˆฐD็š„ๆ—ถๅ€™ใ€‚ๆˆ‘ไปฌไผšๅ‘็ŽฐDไธญ็š„38ๅˆ ้™คไน‹ๅŽไธ้œ€่ฆ่ฟ›่กŒๅˆๅนถ๏ผŒๆ‰€ไปฅๅฏนไบŽAๅ’ŒB็š„ๅ†™Writeๆ˜ฏๅฏไปฅๅฎ‰ๅ…จ้‡Šๆ”พไบ†

image-20210126190229333

ๅฏนไบŽInsertๆ“ไฝœ

่ฟ™้‡Œๆˆ‘ไปฌๅฐฑๅฏไปฅๅฎ‰ๅ…จ็š„้‡Šๆ”พๆމA็š„้”ใ€‚ๅ› ไธบBไธญ่ฟ˜ๆœ‰็ฉบไฝ๏ผŒๆˆ‘ไปฌๆ’ๅ…ฅๆ˜ฏไธไผšๅฏนA้€ ๆˆๅฝฑๅ“็š„

image-20210126190452937

ๅฝ“ๆˆ‘ไปฌๆ‰ง่กŒๅˆฐD่ฟ™้‡Œๅ‘็ŽฐDไธญๅทฒ็ปๆปกไบ†ใ€‚ๆ‰€ไปฅๆญคๆ—ถๆˆ‘ไปฌไธไผš้‡Šๆ”พB็š„้”๏ผŒๅ› ไธบๆˆ‘ไปฌไผšๅฏนB่ฟ›่กŒๅ†™ๆ“ไฝœ

image-20210126190613339

ไธŠ้ข็š„็ฎ—ๆณ•่™ฝ็„ถๆ˜ฏๆญฃ็กฎ็š„ไฝ†ๆ˜ฏๆœ‰็“ถ้ขˆ้—ฎ้ข˜ใ€‚็”ฑไบŽๅชๆœ‰ไธ€ไธช็บฟ็จ‹ๅฏไปฅ่Žทๅพ—ๅ†™Latchใ€‚่€Œๆ’ๅ…ฅๅ’Œๅˆ ้™ค็š„ๆ—ถๅ€™้ƒฝ้œ€่ฆๅฏนๅคด็ป“็‚นๅŠ ๅ†™Latchใ€‚ๆ‰€ไปฅๅคš็บฟ็จ‹ๅœจๆœ‰่ฎธๅคšไธชๆ’ๅ…ฅๆˆ–่€…ๅˆ ้™คๆ“ไฝœ็š„ๆ—ถๅ€™๏ผŒๆ€ง่ƒฝๅฐฑไผšๅคงๆ‰“ๆŠ˜ๆ‰ฃ

img

่ฟ™้‡Œ่ฆๅผ•ๅ…ฅไน่ง‚๐Ÿ”’

ไน่ง‚็š„ๅ‡่ฎพๅคง้ƒจๅˆ†ๆ“ไฝœๆ˜ฏไธ้œ€่ฆ่ฟ›่กŒๅˆๅนถๅ’Œๅˆ†่ฃ‚็š„ใ€‚ๅ› ๆญคๅœจๆˆ‘ไปฌๅ‘ไธ‹็š„ๆ—ถๅ€™้ƒฝๆ˜ฏ่ฏปLatch่€Œไธๆ˜ฏๅ†™Latchใ€‚ๅชๆœ‰ๅœจๅถๅญ็ป“็‚นๆ‰ๆ˜ฏwrite Latch

  1. ไปŽไธŠๅˆฐไธ‹้ƒฝๆ˜ฏ่ฏปLatchใ€‚่€Œไธ”้€ๆญฅ้‡Šๆ”พ

  2. ๅˆฐๅถๅญ็ป“็‚น้œ€่ฆไฟฎๆ”น็š„ๆ—ถๅ€™ๆ‰ไธบๅ†™Latchใ€‚่ฟ™ไธชๅˆ ้™คๆ˜ฏๅฎ‰ๅ…จ็š„ๆ‰€ไปฅ็›ดๆŽฅ็ป“ๆŸ

image-20210126192408392

ๅฝ“ๆˆ‘ไปฌๅˆฐๆœ€ๅŽไธ€ๆญฅๅ‘็Žฐไธๅฎ‰ๅ…จ็š„ๆ—ถๅ€™ใ€‚ๅˆ™้œ€่ฆๅƒไธŠ้ขๆˆ‘ไปฌๆฒกๆœ‰ๅผ•ๅ…ฅไน่ง‚๐Ÿ”’็š„ๆ—ถๅ€™ไธ€ๆ ทใ€‚้‡ๆ–ฐๆ‰ง่กŒไธ€้

image-20210126192548748

ๅปถ่ฟŸๆ›ดๆ–ฐ็ˆถ็ป“็‚น

่ฟ™้‡Œ็”จไธ€ไธช๐ŸŒŸๆฅๆ ‡่ฎฐ่ฟ™้‡Œ้œ€่ฆ่ขซๆ›ดๆ–ฐไฝ†ๆ˜ฏ่ฟ˜ๆฒกๆœ‰ๆ‰ง่กŒ

image-20210126195848104

่ฟ™ไธชๆ—ถๅ€™ๆˆ‘ไปฌๆ‰ง่กŒๅ…ถไป–ๆ“ไฝœไนŸๆ˜ฏๆญฃ็กฎ็š„ๆฏ”ๅฆ‚ๆŸฅๆ‰พ31

image-20210126200003320

่ฟ™้‡Œๆˆ‘ไปฌๆ‰ง่กŒinsert 33

ๅฝ“ๆ‰ง่กŒๅˆฐ็ป“็‚นC็š„ๆ—ถๅ€™ใ€‚ๅ› ไธบ่ฟ™ไธชๆ—ถๅ€™ๆœ‰ๅฆไธ€ไธช็บฟ็จ‹ๆŒๆœ‰ไบ†write Latchใ€‚ๆ‰€ไปฅ่ฟ™ไธชๆ—ถๅ€™๐ŸŒŸๆ“ไฝœ่ฆๆ‰ง่กŒใ€‚้šๅŽๅœจๆ’ๅ…ฅ33

img

ๆœ€ๅŽไธ€็‚น่กฅๅ……ๅ…ณไบŽๆ‰ซๆๆ“ไฝœ็š„

  1. ็บฟ็จ‹1ๅœจC็ป“็‚นไธŠๆŒๆœ‰write Latch

  2. ็บฟ็จ‹2ๅทฒ็ปๆ‰ซๆๅฎŒไบ†็ป“็‚นBๆƒณ่ฆ่Žทๅพ—็ป“็‚นC็š„read Latch

่ฟ™ๆ—ถๅ€™ไผšๅ‘็”Ÿ้—ฎ้ข˜๏ผŒๅ› ไธบ็บฟ็จ‹2ๆ— ๆณ•ๆ‹ฟๅˆฐread Latch

่ฟ™้‡Œๆœ‰ๅ‡ ็ง่งฃๅ†ณๆ–นๆณ•

  1. ๅฏไปฅ็ญ‰ๅˆฐT1็š„ๅ†™ๆ“ไฝœๅฎŒๆˆ

  2. ๅฏไปฅ้‡ๆ–ฐๆ‰ง่กŒT2

  3. ๅฏไปฅ็›ดๆŽฅ่ฎฉ็บฟ็จ‹T2ๅœๆญขๆŠขๅพ—่ฟ™ไธชLatchใ€‚

img

ๆณจๆ„่ฟ™้‡Œ็š„Latchๅ’ŒLockๅนถไธไธ€ๆ ท

img

6. ่พ…ๅŠฉๅ‡ฝๆ•ฐๅˆ†ๆž

1. ่พ…ๅŠฉๅ‡ฝๆ•ฐUnlockUnpinPages็š„ๅฎž็Žฐ

  1. ๅฆ‚ๆžœๆ˜ฏ่ฏปๆ“ไฝœๅˆ™้‡Šๆ”พread้”

  2. ๅฆๅˆ™้‡Šๆ”พwrite้”

ๅ››ไธช่‡ชๅธฆ็š„่งฃ้”ๅ’ŒไธŠ้”ๆ“ไฝœ

่ฟ™้‡Œ็š„rwlatchๆ˜ฏ่‡ชๅทฑๅฎž็Žฐ็š„่ฏปๅ†™้”็ฑปไธ‹้ขๆฅๆŽข็ฉถไธ€ไธ‹่ฟ™ไธช็ฑป

็”ฑไบŽc++ ๅนถๅ‘็ผ–็จ‹ๆˆ‘็Žฐๅœจ่ฟ˜ไธๅคชไผšใ€‚ใ€‚ใ€‚ๆ‰€ไปฅๅฐฑ็ฎ€ๅ•็œ‹ไธ€ไธ‹ๅ•ฆๅŽ้ขๅญฆๅฎŒๅนถๅ‘็ผ–็จ‹ๅ†่กฅๅ……

  1. WLockๅ‡ฝๆ•ฐ

    1. ้ฆ–ๅ…ˆ่Žทๅ–ไธ€ไธช้”

    2. ็”จไธ€ไธช่ฎฐๅทwriter_entered่กจ็คบๆ˜ฏๅฆๆœ‰ๅ†™ๆ“ไฝœ

    3. ๅฆ‚ๆžœไน‹ๅ‰ๅทฒ็ปๆœ‰ไบ†็Žฐๅœจ็š„ๆ“ไฝœๅฐฑ้œ€่ฆ็ญ‰(่ฟ™ไธช็บฟ็จ‹ๅค„ไบŽ้˜ปๅกž็Šถๆ€)

    4. ๅฝ“ๅ‰ๅฆ‚ๆžœๆœ‰ๅ…ถไป–็บฟ็จ‹ๆ‰ง่กŒ่ฏปๆ“ไฝœใ€‚ๅˆ™ไป้œ€่ฆ้˜ปๅกž(ๅˆซไบบ่ฏป็š„ๆ—ถๅ€™ไฝ ไธ่ƒฝๅ†™)

  2. WunLockๅ‡ฝๆ•ฐ

    1. ๅ†™ๆ ‡่ฎฐ็ฝฎไธบfalse

    2. ็„ถๅŽ้€š็Ÿฅๆ‰€ๆœ‰็š„็บฟ็จ‹

  3. RLockๅ‡ฝๆ•ฐ

    1. ๅฆ‚ๆžœๅฝ“ๅ‰ๆœ‰ไบบๅœจๅ†™ๆˆ–่€…ๅทฒ็ปๆœ‰ๆœ€ๅคš็š„ไบบ่ฏปไบ†ๅˆ™้˜ปๅกž

    2. ๅฆๅˆ™ๅช้œ€่ฆ่ฎฉ่ฏป็š„่ฎกๆ•ฐ++

    ๅ› ไธบๆ˜ฏๅ…่ฎธๅคšไธช็บฟ็จ‹ไธ€่ตท่ฏป่ฟ™ๆ ทๅนถไธไผšๅ‡บ้”™

  4. RUnLatchๅ‡ฝๆ•ฐ

    1. ่ฎกๆ•ฐ--

    2. ๅฆ‚ๆžœๅฝ“ๅ‰ๆœ‰ไบบๅœจๅ†™ๅนถไธ”ๆ— ไบบ่ฏป็š„่ฏ้œ€่ฆ้€š็Ÿฅๆ‰€ๆœ‰ๅ…ถไป–็บฟ็จ‹

    3. ๅฆ‚ๆžœๅœจ่ฎกๆ•ฐ--ไน‹ๅ‰่พพๅˆฐไบ†ๆœ€ๅคง่ฏปๆ•ฐ๏ผŒ้‡Šๆ”พ่ฟ™ไธช้”ไน‹ๅŽ้œ€่ฆ้€š็Ÿฅๅ…ถไป–็บฟ็จ‹๏ผŒ็Žฐๅœจๅˆๅฏไปฅ่ฏปไบ†ใ€‚

7. ๅนถๅ‘็ดขๅผ•ๅฎž็Žฐ

1. FindLeafPageRW็š„ๅฎž็Žฐ

1. 1 ๆ•ดไฝ“ๆ€่ทฏ

ๅฏนไบŽๅนถๅ‘ๆŽงๅˆถ็š„ๅฎž็Žฐ๏ผŒ้‡‡็”จๆœ€็ฎ€ๅ•็š„latch crabingๆ–นๆณ•ๅฎž็Žฐ๏ผŒไนŸๅฐฑๆ˜ฏไธŠ้ข่ฎฒ็š„้‚ฃ็งๆ–นๆณ•๏ผŒ ่ฟ™็งๆ–นๆณ•้œ€่ฆๅœจๆ‰พๅถๅญ็ป“็‚น็š„ๆ—ถๅ€™๏ผŒไปŽๆ น่Š‚็‚นๅˆฐๅถๅญ็ป“็‚น็š„่ฟ‡็จ‹้œ€่ฆ้€ๆญฅๅŠ ้”๏ผŒ็„ถๅŽๆฃ€ๆต‹ๆ˜ฏๅฆ่ƒฝๅคŸ้‡Šๆ”พใ€‚็”ฑไบŽๆˆ‘ไปฌ็š„ๆ’ๅ…ฅๅ’Œๅˆ ้™คๆ“ไฝœ้ƒฝ้œ€่ฆๅ…ˆๆ‰พๅˆฐๅถๅญ็ป“็‚น๏ผŒๆ‰€ไปฅไน‹ๅ‰ไฝฟ็”จ็š„ๆ— ้”็‰ˆๆœฌ็š„FindLeafPageๅ‡ฝๆ•ฐๅœจๅนถๅ‘ๆกไปถไธ‹ๅฐฑๅนถไธ้€‚็”จไบ†ใ€‚ๅ› ๆญค่ฟ™้‡Œ้œ€่ฆๅฎž็Žฐไธ€ไธช้€ๆญฅๅŠ ้” + ้€ๆญฅ้‡Šๆ”พ็š„ๆ–ฐๅ‡ฝๆ•ฐ

  1. ๆ•ดไฝ“ๆ€่ทฏๅ’Œไน‹ๅ‰็š„findLeafPageๅ‡ ไนŽไธ€ๆ ท๏ผŒๅชๆ˜ฏๅคšไบ†ๅ‡ ๆฌกๅˆคๆ–ญ

  2. ๅฆ‚ๆžœๆ˜ฏ่ฏปๆ“ไฝœ๏ผŒ้‚ฃๅˆ™็›ดๆŽฅๅŠ ้”๏ผŒ็„ถๅŽๅฏนไธŠไธ€ๅฑ‚้‡Šๆ”พ้”

  3. ๅฆ‚ๆžœๆ˜ฏๅ†™ๆ“ไฝœ๏ผŒ้‡Šๆ”พ้”ไน‹ๅ‰ๅˆ™่ฆๅˆคๆ–ญไธ€ไธ‹ๆ˜ฏๅฆๅฎ‰ๅ…จใ€‚

1.2 ๅˆคๆ–ญๆ˜ฏๅฆๅฎ‰ๅ…จ็š„ๅ‡ฝๆ•ฐ#arrow-up-right

  1. ๅฆ‚ๆžœๆ˜ฏๆ’ๅ…ฅๆ“ไฝœ๏ผŒๅˆ™ๅช่ฆๅฝ“ๅ‰node็š„sizeๅค„ไบŽๅฎ‰ๅ…จ็Šถๆ€ๅณ + 1 ไน‹ๅŽไธไผšไบง็”Ÿๅˆ†่ฃ‚๏ผŒๅˆ™ไธบๅฎ‰ๅ…จ

  2. ๅฆ‚ๆžœๆ˜ฏๅˆ ้™ค็Šถๆ€ใ€‚ๅˆ™ๅช่ฆๅฝ“ๅ‰node็š„size - 1 ไน‹ๅŽไธไผš้‡ๅˆ†้…ๆˆ–่€…ๅˆๅนถ๏ผŒๅˆ™ไธบๅฎ‰ๅ…จ

  3. ๅฏนไบŽๆ น่Š‚็‚น้œ€่ฆ่ฟ›่กŒ็‰นๆฎŠๅˆคๆ–ญ๏ผŒๅฆ‚ๆžœ่ฟ™ไธชๆ น่Š‚็‚นๆ˜ฏๅถๅญ็ป“็‚นๅˆ™ไธบๅฎ‰ๅ…จ๏ผˆ่ฟ™็งๆƒ…ๅ†ต้šไพฟๅˆ ๏ผ‰ใ€‚ๅฆๅˆ™ๆ น่Š‚็‚น็š„ๅคงๅฐๅฟ…้กปๅคงไบŽ2(ๅ› ไธบๅฆ‚ๆžœ็ญ‰ไบŽ2 ๏ผŒๅ‡ๅŽป1ไน‹ๅŽ่ฟ˜ๆ˜ฏ1ใ€‚ๅˆ™ๆ˜ฏไธ€ไธชๆฒกๆœ‰ๆœ‰ๆ•ˆkeyๅ€ผ็š„็ป“็‚น๏ผŒไธๅฎ‰ๅ…จ)

1.3 ๆŠŠ้‡Šๆ”พ้”ๅ’Œunpinๆ“ไฝœๅˆๅนถ#arrow-up-right

่ฟ™ไธคไธชๆ“้ƒฝ่ฆๅฏนpageๅš๏ผŒไธŽๅ…ถๅคšๅ†™ๅ‡ ่กŒไธๅฆ‚ๅ†™ไธชๅ‡ฝๆ•ฐ็ป™ไป–ๅˆๅนถๅœจไธ€่ตทๅšใ€‚

transaction->GetPageSet(); ๅฐฑๆ˜ฏไน‹ๅ‰่ฎฟ้—ฎ่ฟ‡็š„page้›†ๅˆ

2. ๆ”ฏๆŒๅนถๅ‘็š„่ฏปๅ†™ๆ“ไฝœ

ๅ…ถๅฎžๅช้œ€่ฆไน‹ๅ‰ๅšๅฎข1ใ€2็š„้žๅนถๅ‘็‰ˆๆœฌไธŠๅšไธ€ไบ›ๅฐๅฐ็š„ๆ”นๅŠจ

2.1 ๆ”ฏๆŒๅนถๅ‘่ฏป

2.2 ๆ”ฏๆŒๅนถๅ‘ๅ†™

่ฟ™้‡Œ่ฆๆ”ฏๆŒๆ’ๅ…ฅๅ’Œๅˆ ้™คไธค็งๅ†™ๆ“ไฝœ

1. ๆ’ๅ…ฅ

  1. ๆ นๆฎๅฎž้ชŒๆ็คบ๏ผŒ้ฆ–ๅ…ˆ้œ€่ฆ่Žทๅ–ๅฏนไบŽๆ น่Š‚็‚น็š„้”ใ€‚ๆˆ‘ไธชไบบ่ฎคไธบๆ˜ฏไธบไบ†้˜ฒๆญขไธ‹้ข่ฟ™็งๆƒ…ๅ†ตๅ‘็”Ÿ

    ๅฆ‚ๆžœ็†่งฃ็š„ๆœ‰้—ฎ้ข˜๏ผŒๆฌข่ฟŽๅคงๅฎถๆŒ‡ๅ‡บ๏ผŒไบ’็›ธ่ฎจ่ฎบ

    consider the following case

    txn A read "A" from tree but not hold mutex (if "A" not in the tree)

    before A crab page0 latch , txnB crab page0 and insert "A" into the tree then unlatch page0

    txnA crab page0 get false result

  2. ็”จFindLeafRWๆ›ฟๆขไน‹ๅ‰็š„FindLeafๅ‡ฝๆ•ฐๅณๅฏ

  3. ็”จUnLatchAndPinๆ›ฟๆขไน‹ๅ‰็ฎ€ๅ•็š„unpinๆ“ไฝœใ€‚

ๅฎŒๆ•ดไปฃ็ ๅฐฑไธ่ดดไบ†๏ผŒๅœจไน‹ๅ‰็š„insertไธŠๆ”นไธ€ไธ‹ๅฐฑ่กŒไบ†

2. ๅˆ ้™ค

  1. ๅฏนไบŽๅˆ ้™ค้ฆ–ๅ…ˆ่ฆๅœจremoveไธŠๅšๅ’Œinsertไธ€ๆ ท็š„ๅค„็†

  2. ๅœจๆ ธๅฟƒๅ‡ฝๆ•ฐCoalesceOrRedistributeไธญๅฏนๅ…„ๅผŸ็ป“็‚นๅšไฟฎๆ”นไน‹ๅ‰๏ผŒๅ…ˆๅŠ ๅ†™้”็ป“ๆŸไน‹ๅŽ้‡Šๆ”พๅ†™้”ๅฐฑok

Last updated