เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปƒเบ™เบฅเบฐเบ”เบนเปƒเบšเป„เบกเป‰เบ›เบปเปˆเบ‡เบ‚เบญเบ‡เบ›เบต 2019, เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบฅเปเบ„เบญเบเบกเบฒเบ”เบปเบ™เบ™เบฒเบ™เป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบ—เบตเบก Mail.ru Cloud iOS. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบ‚เบญเบ‡เบฅเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™ exotic เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเป‚เบฅเบเบกเบทเบ–เบท เบ–เบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบฎเบฑเบ”โ€‹เปเบœเบ™โ€‹เบ—เบตเปˆโ€‹เบซเบ™เปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒ Lightningโ€‹ (LMDB). เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเบฒเบ™เบ•เบฑเบ”เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบชเบตเปˆเบชเปˆเบงเบ™. เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบšเปเปˆเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเป‰เบฒเบงเป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒเป€เบžเบทเปˆเบญเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบฒเบกเป€เบชเบปเบฒเบ„เปเป‰เบฒเบขเบนเปˆเปƒเบ™เบˆเบธเบ”เปƒเบˆเบเบฒเบ‡เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ LMDB: เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, B+-tree, เบงเบดเบ—เบตเบเบฒเบ™ copy-on-write เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐ multiversion. เบชเบธเบ”เบ—เป‰เบฒเบ, เบชเปเบฒเบฅเบฑเบš dessert - เบžเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เปƒเบ™เบกเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบญเบญเบเปเบšเบšเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบผเบฒเบ, เบฅเบงเบกเบ—เบฑเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบตเบซเบ™เบถเปˆเบ‡, เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ API เบกเบนเบ™เบ„เปˆเบฒเบ•เปˆเปเบฒเบฅเบฐเบ”เบฑเบš.

เป€เบ™เบทเป‰เบญเปƒเบ™

  1. เปเบฎเบ‡เบˆเบนเบ‡เปƒเบˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”
  2. เบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡ LMDB
  3. เบชเบฒเบกเป€เบชเบปเบฒเบ„เป‰เบณเบ‚เบญเบ‡ LMDB
    3.1โ€‹. เบ›เบฒเบงเบฒเบ™ #1. เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบ”เป‰เบงเบเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ
    3.2โ€‹. เบ›เบฒเบงเบฒเบ™ #2. B+-เบ•เบปเป‰เบ™เป„เบกเป‰
    3.3โ€‹. เบ›เบฒเบงเบฒเบ™ #3. เบชเบณเป€เบ™เบปเบฒ-เบ‚เบฝเบ™
  4. เบเบฒเบ™เบญเบญเบเปเบšเบšเป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ key-value API
    4.1โ€‹. เบšเบปเบ”เบ„เบฑเบ”เบซเบเปเป‰เบžเบทเป‰เบ™เบ–เบฒเบ™
    4.2โ€‹. เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡
    4.3โ€‹. เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

1. เปเบฎเบ‡เบˆเบนเบ‡เปƒเบˆเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”

เบซเบ™เบถเปˆเบ‡เบ›เบตเปƒเบ™เบ›เบต 2015, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบญเบปเบฒเบšเบฑเบ™เบซเบฒเปƒเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบฅเบทเป‰เบญเบเป†เบงเปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบŠเบฑเบเบŠเป‰เบฒ. เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบญเบฑเบ™เบ™เบตเป‰เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ—เบธเบเป€เบฅเบทเป‰เบญเบเป†เป€เบฅเบทเป‰เบญเบเป†เบงเปˆเบฒเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบขเบธเบ”เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบเบฒเบ™เบเบฐเบ—เปเบฒเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰: เบ›เบธเปˆเบกเบšเปเปˆเบชเบฒเบกเบฒเบ”เบเบปเบ”เป„เบ”เป‰, เบฅเบฒเบเบŠเบทเปˆเบšเปเปˆเป€เบฅเบทเปˆเบญเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบเปˆเบฝเบงเบเบฑเบšเบเบปเบ™เป„เบเบเบฒเบ™เบงเบฑเบ”เปเบ—เบ เบšเบญเบ เปƒเบ™ AvitoTech, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ•เบปเบงเป€เบฅเบ.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบญเบฒเบšเบ™เป‰เปเบฒเป€เบขเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ. เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบซเบฑเบ™โ€‹เบญเบญเบโ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เบซเบผเบฒเบโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ—เบตเปˆโ€‹เป€เบเบตเบ”โ€‹เบˆเบฒเบ freezes เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบญเบทเปˆเบ™เป†โ€‹. เบ–เป‰เบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบฎเบฑเบšเบฎเบนเป‰เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ™เบตเป‰เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเปเบกเปˆเบ™เบšเปเปˆเบกเบตเบญเบธเบ›เบฐเบ•เบดเป€เบซเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบชเบธเบกเปƒเบชเปˆ เบ›เปˆเบฝเบ™ เปƒเบ™ freeze free.

เบกเบตเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ dashboard เบกเบต freezes เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เปƒเบŠเป‰เบˆเปˆเบฒเบ เบ›เบฐเบฅเบดเบกเบฒเบ™ ะธ เบ„เบธเบ™เบ™เบฐเบžเบฒเบš เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบชเบฑเบ”เบ•เบนเบ•เบปเป‰เบ™เบ•เปเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™ - เป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบซเบ™เบฑเบเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เบเบฐเบ—เบนเป‰เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบ•เปเปˆเบ„เบงเบฒเบกเป€เบชเบทเปˆเบญเบกเป€เบชเบตเบเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบ—เบตเปˆเบฎเป‰เบญเบ™เปเบฎเบ‡เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฒเบเบงเบฝเบ. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบฅเบฐเบšเบปเบš, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณเบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ™เบฑเบเบชเบฐเปเบ”เบ‡เบ—เบตเปˆเบกเบตเบ™เป‰เบณเปœเบฑเบเป€เบšเบปเบฒ. เบ‚เป‰เบญเบเบญเบธเบ—เบดเบ”เบ•เบปเบ™เป€เบžเบทเปˆเบญเบเบฒเบ™เบ›เบฑเบšเบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเป‚เบฅเบ iOS เบชเบญเบ‡เบเบฐเบ—เบนเป‰ เปƒเบ™ Twitter เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบฅเบฐ เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบš Habre. เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ—เบทเปˆเบญเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ›เบฐเบˆเบธเบšเบฑเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ™เบฑเป‰เบ™เบซเบ™เบฑเบเปƒเบชเปˆเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบกเบตเบญเบดเบ”เบ—เบดเบžเบปเบ™เบ•เปเปˆเบเบฒเบ™เป€เบฅเบทเบญเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบฎเบนเบšเปเบšเบšเบ•เบปเบงเบฅเบฐเบ„เบญเบ™เบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเบ–เบทเบงเปˆเบฒ multithreading เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™. เบงเบฑเบ”เบ–เบธเปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปƒเบ™เบกเบฑเบ™เบขเบฒเบเบˆเบฐเบ‚เป‰เบฒเบกเบ‚เบญเบšเป€เบ‚เบ”เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”. เปเบฅเบฐโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป€เบฎเบฑเบ”โ€‹เปเบ™เบงโ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบšเบฒเบ‡โ€‹เบ„เบฑเป‰เบ‡โ€‹เปเบฅเบฐโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เปเบฅเบฐโ€‹เบ—เบตเปˆโ€‹เบ™เบฑเป‰เบ™โ€‹, เปเบ•เปˆโ€‹เป€เบเบทเบญเบšโ€‹เบชเบฐโ€‹เป€เบซเบกเบตโ€‹เปเบฅเบฐโ€‹เบขเบนเปˆโ€‹เบ—เบปเปˆเบงโ€‹เบ—เบธเบโ€‹เปเบซเปˆเบ‡ ..

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเบ™เปเบœเบ™เบงเบฒเบ”เบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบต. เบงเบฝเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” macropattern เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™. เบ–เป‰เบฒเบขเบนเปˆเปƒเบ™เป‚เบฅเบเบงเบดเบชเบฒเบซเบฐเบเบดเบ”เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡ synchronization เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบ‚เบญเบ‡เบ™เบฑเบเบชเบฐเปเบ”เบ‡ - เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฐเบ—เบนเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบซเบผเบฒเบเบเบฐเบ—เบนเป‰. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบกเบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบขเปˆเบฒเบ‡เบ™เป‰เบญเบเบ›เบญเบ”เป„เบž, เปเบฅเบฐเป‚เบ”เบเบซเบฅเบฑเบเบเบฒเบ™เปเบฅเป‰เบงเปเบกเปˆเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰. เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เบ•เปเปˆเบกเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบžเป‰เบญเบกเบเบฑเบ™เบˆเบฒเบเบซเบผเบฒเบเบเบฐเบ—เบนเป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ resorting เบเบฑเบš locking เปƒเบ”เป†, เป€เบŠเบดเปˆเบ‡เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOSเบ›เบฑเบ”เป„เบˆเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบกเบตเบญเบดเบ”เบ—เบดเบžเบปเบ™เบ•เปเปˆเบเบฒเบ™เป€เบฅเบทเบญเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™ API เบŸเบฑเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบกเบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบปเบ™เปƒเบˆเป‚เบ”เบเบงเบดเบ—เบตเบเบฒเบ™ synchronization เป„เบ”เป‰เบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเป‚เบ”เบ git. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฅเบฒเบง, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡ offline-first API, เป€เบŠเบดเปˆเบ‡เป€เบšเบดเปˆเบ‡เบซเบผเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบŸเบฑเบ‡. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบชเบนเบšเบญเบญเบเบชเบฐเบ–เบฒเบ™เบฐเป€เบ•เบฑเบกเบ‚เบญเบ‡เบŸเบฑเบ‡เป„เบ”เป‰เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ synchronization เปƒเบ™เบเปเบฅเบฐเบ™เบตเบชเปˆเบงเบ™เปƒเบซเบเปˆเบ—เบตเปˆเบฅเบปเป‰เบ™เป€เบซเบผเบทเบญเบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™ rolling เบญเบญเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบญเบฐเบ™เบดเบˆเบฒ, เป‚เบญเบเบฒเบ”เบ™เบตเป‰เบเบฑเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เป€เบ‚เบ”เบ—เบดเบ”เบชเบฐเบ”เบต, เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเบšเปเปˆเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปเบœเปˆเบ™เปเบžเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบกเบตเบซเบผเบฒเบเป€เบซเบ”เบœเบปเบ™เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เบ—เบตเปˆ, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบŠเบฑเบเบŠเป‰เบฒเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเป„เบงเป‰เบ—เบฒเบ‡เบซเบฅเบฑเบ‡เบ‚เบญเบ‡เบงเบปเบ‡เป€เบฅเบฑเบš. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเปเบกเปˆเบ™เบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบ‚เบญเบ‡เบšเบปเบ”เบฎเบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบกเบทเปˆเบญ API เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "A" เปเบฅเบฐเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "B".

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™ git, เป€เบŠเบดเปˆเบ‡, เป€เบกเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบถเบ‡, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ patches เบเบฑเบš snapshot เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบ›เบฝเบšเบ—เบฝเบšเบชเบฐเบ–เบฒเบ™เบฐเป€เบ•เบฑเบกเบ‚เบญเบ‡เบกเบฑเบ™เบเบฑเบšเบฅเบฑเบ”เป€เบŠเบตเบŸเป€เบงเบตเป€เบ•เบฑเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบˆเบปเป‰เบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบต synchronization เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™ cloud. เบฅเบนเบเบ„เป‰เบฒ. เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ”เบปเบฒเบงเปˆเบฒเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบชเบฑเบ™เบชเบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰ DOM เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™ meta เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเป„เบŸเบฅเปŒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบ–เป‰เบฒเบœเบนเป‰เปƒเบŠเป‰เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ 500 เบžเบฑเบ™เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป€เบกเบ„, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญ synchronize เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเปเบฅเบฐเบ—เปเบฒเบฅเบฒเบเบ•เบปเป‰เบ™เป„เบกเป‰เบชเบญเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบต 1 เบฅเป‰เบฒเบ™ nodes. เปเบ•เปˆเปเบ•เปˆเบฅเบฐ node เปเบกเปˆเบ™เบเบฒเบ™เบฅเบงเบกเบเบฑเบ™เบ—เบตเปˆเบกเบตเป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰เบเปˆเบญเบ. เปƒเบ™เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เบ™เบตเป‰, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡ profile เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™. เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบชเบนเบ”เบเบฒเบ™เบฅเบงเบก, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบ•เปเปˆเบกเบฒเบ—เปเบฒเบฅเบฒเบเบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเป€เบ›เบฑเบ™ penny pretty. เบ‚เบญเบ‡เบชเบฐเบ„เบฃเบดเบšเบœเบนเป‰เปƒเบŠเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเปเบเป‰เป„เบ‚เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเบชเบญเบ‡เปƒเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ - เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” CRUD เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ.

เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป†เปเบกเปˆเบ™เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบกเบซเบผเบฒเบเปเบฅเบฐเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

  1. เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบเบฐเบ—เบนเป‰.
  2. Multiprocessing. dictated เป‚เบ”เบเบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เป€เบžเบทเปˆเบญ synchronize เบชเบฐเบ–เบฒเบ™เบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฐเบ—เบนเป‰, เปเบ•เปˆเบเบฑเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เบปเป‰เบ™เบ•เปเปเบฅเบฐ iOS extensions.
  3. เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เปเบ—เบ™โ€‹เบซเบ™เปˆเบงเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เป„เบงเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบงเบฑเบ”โ€‹เบ–เบธโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡ ..
  4. เบšเปเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบžเบฒเบเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ CRUD.
  5. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™ เป€เบญเบŠเบตเบ”เบต: เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน, เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡, เบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเปเบฅเบฐเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท.
  6. เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ™เบดเบเบปเบกเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”.

เบ”เป‰เบงเบเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบ™เบตเป‰, SQLite เปเบกเปˆเบ™เปเบฅเบฐเบเบฑเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ”เบต. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบชเบถเบเบชเบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบปเบšเบซเบ™เบฑเบ‡เบชเบท "เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ LevelDB". เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ™เปเบฒเบžเบฒเบ‚เบญเบ‡เบ™เบฒเบ‡, เบ”เบฑเบ”เบŠเบฐเบ™เบตเป„เบ”เป‰เบ–เบทเบเบฅเบฒเบเบฅเบฑเบเบญเบฑเบเบชเบญเบ™เบ›เบฝเบšเบ—เบฝเบšเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบŸเบฑเบ‡เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบเบตเบ™เบ„เบงเบฒเบกเบ„เบฒเบ”เบซเบงเบฑเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ™เบดเบเบปเบกเบซเบฅเบฒเบเบ—เบตเปˆเบชเบธเบ” - เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ•เบปเบงเบเบฐเบžเบดเบšเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบˆเบฑเบ”เบฎเบฝเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ–เบทเบเบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปƒเบซเป‰ - LMDB เบเบฒเบเป€เบ›เบฑเบ™ 10 เป€เบ—เบปเปˆเบฒเป„เบงเบเบงเปˆเบฒ SQLite. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

2. เบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเปœเปˆเบ‡ LMDB

LMDB เป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบซเบผเบฒเบ (เบžเบฝเบ‡เปเบ•เปˆ 10K เปเบ–เบง) เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเบฑเป‰เบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ•เปˆเปเบฒเบชเบธเบ”เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ - เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปเบœเบ™เบงเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš LMDB เบเบฑเบš SQLite, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒ, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบซเบผเบฒเบเบเปˆเบงเบฒ SQLite เบเบฑเบš Core Data. เบกเบฑเบ™เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบเบธเบ•เบดเบ—เปเบฒเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เบนเปˆเปเบ‚เปˆเบ‡เบ—เบตเปˆเป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™ - BerkeleyDB, LevelDB, Sophia, RocksDB, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบเบฑเบ‡เบกเบตเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆ LMDB เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเปเบฒเบฅเบฑเบš SQLite. เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เปเบกเปˆเบ™เปƒเบ™เบ›เบต 2012 เปƒเบŠเป‰เบˆเปˆเบฒเบ เป‚เบ”เบ LMDB Howard Chu. ะ ะตะทัƒะปัŒั‚ะฐั‚ั‹ เบเบฒเบเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ เปœเป‰เบฒ เบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ—เบตเปˆเบเบฒเบ™เบฅเบดเป€เบฅเบตเปˆเบกเบ‚เบญเบ‡เบฅเบฒเบงเป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบ‚เบทเป‰เบ™เป‚เบ”เบเบœเบนเป‰เบ—เบตเปˆเบกเบฑเบ OSS, เปเบฅเบฐเบžเบปเบšเบงเปˆเบฒเบกเบฑเบ™เบชเบทเบšเบ•เปเปˆเบขเบนเปˆเปƒเบ™เบšเบธเบเบ„เบปเบ™. LumoSQL. เปƒเบ™เป€เบ”เบทเบญเบ™เบกเบฑเบ‡เบเบญเบ™ 2020, เบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™ Den Shearer เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹ เบกเบฑเบ™เบขเบนเปˆ LinuxConfAu.

LMDB เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบ›เบฑเบ™เบซเบ™เบตเป‰เบฎเบนเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบกเบฑเบ™เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ OpenLDAP, เบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเบžเปเปƒเบˆเบเบฑเบš BerkeleyDB เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบ เบ•เบปเป‰เบ™เป„เบกเป‰, Howard Chu เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบฅเบฒเบงเป„เบ”เป‰เบญเบธเบ—เบดเบ”เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”เบ‚เบญเบ‡เบฅเบฒเบงเบ•เปเปˆเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบฒเบเปƒเบ™เบ‚เบญเบ‡ LMDB. "เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ Lightning". เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เบเบฒเบ™เป€เบญเบปเบฒเบŠเบฐเบ™เบฐเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบ”เป‰เบ–เบทเบเปเบšเปˆเบ‡เบ›เบฑเบ™เป‚เบ”เบ Leonid Yuryev (aka เป€เบญเบต) เบˆเบฒเบ Positive Technologies เปƒเบ™เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบฅเบฒเบงเบขเบนเปˆเบ—เบตเปˆ Highload 2015 "เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ LMDB เป€เบ›เบฑเบ™เปเบŠเป‰เบกเบžเบดเป€เบชเบ”". เปƒเบ™เบ™เบฑเป‰เบ™, เบฅเบฒเบงเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš LMDB เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” ReOpenLDAP, เปเบฅเบฐ LevelDB เป„เบ”เป‰เบ–เบทเบเบงเบดเบžเบฒเบเบงเบดเบˆเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเปเบฅเป‰เบง. เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบ—เบฑเบเป‚เบ™เป‚เบฅเบเบตเปƒเบ™เบ—เบฒเบ‡เบšเบงเบเบเปเปˆเบกเบตเบ—เบฒเบ‡เบญเบญเบเบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เบซเป‰เบฒเบงเบซเบฑเบ™ MDBX เบ—เบตเปˆโ€‹เบกเบตโ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐโ€‹เบฅเบปเบ”โ€‹เบŠเบฒเบ”โ€‹เบซเบผเบฒเบโ€‹, เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เปเบฅเบฐโ€‹ เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”.

LMDB เบกเบฑเบเบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš Mozilla Firefox เป€เบฅเบทเบญเบ เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐ, เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบฎเบธเปˆเบ™ 9, Xcode เบกเบฑเบ SQLite เบ‚เบญเบ‡เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ”เบฑเบ”เบชเบฐเบ™เบต.

เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบเบฑเบ‡เป„เบ”เป‰เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เปƒเบ™เป‚เบฅเบเบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบกเบทเบ–เบท. เบฎเปˆเบญเบ‡เบฎเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™ เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒ เปƒเบ™เบฅเบนเบเบ„เป‰เบฒ iOS เบชเปเบฒเบฅเบฑเบš Telegram. LinkedIn เป„เบ”เป‰เป„เบ›เบ•เบทเปˆเบกเบญเบตเบเปเบฅเบฐเป€เบฅเบทเบญเบ LMDB เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบญเบšเบเบฒเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ Rocket Data, เป€เบŠเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบšเป‰เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™. เบšเบญเบ เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ‚เบญเบ‡เบฅเบฒเบงเปƒเบ™เบ›เบต 2016.

LMDB เบเปเบฒเบฅเบฑเบ‡เบ›เบฐเบชเบปเบšเบ„เบงเบฒเบกเบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบเบฒเบ™เบ•เปเปˆเบชเบนเป‰เป€เบžเบทเปˆเบญเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เปเบ”เบ”เปƒเบ™เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เป‚เบ”เบ BerkeleyDB เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™เบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ‚เบญเบ‡ Oracle. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป„เบ”เป‰เบ–เบทเบเบฎเบฑเบเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเป„เบงเปเบฅเบฐเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบ‚เบญเบ‡เบกเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเป€เบžเบทเปˆเบญเบ™เบกเบดเบ”เบ‚เบญเบ‡เบ•เบปเบ™. เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เบšเปเปˆเบกเบตเบญเบฒเบซเบฒเบ™เบ—เปˆเบฝเบ‡เบŸเบฃเบต, เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเป€เบ™เบฑเป‰เบ™เบซเบ™เบฑเบเป€เบ–เบดเบ‡เบเบฒเบ™เบ„เป‰เบฒเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบ›เบฐเป€เบŠเบตเบ™เปƒเบ™เป€เบงเบฅเบฒเป€เบฅเบทเบญเบเบฅเบฐเบซเบงเปˆเบฒเบ‡ LMDB เปเบฅเบฐ SQLite. เปเบœเบ™เบงเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบงเปˆเบฒเบ„เบงเบฒเบกเป„เบงเบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบขเปˆเบฒเบ‡เปƒเบ”. เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เบชเปเบฒเบฅเบฑเบšเบŠเบฑเป‰เบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡ abstraction เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบœเปˆเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบตเปˆเบ”เบตเบเบฑเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบžเบงเบเบกเบฑเบ™, เปเบฅเบฐเบžเบงเบเบกเบฑเบ™เบˆเบฐเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบขเปˆเบฒเบ‡เบซเบผเบตเบเบฅเปˆเบฝเบ‡, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบˆเบฐเบญเปˆเบญเบ™เบเบงเปˆเบฒเบซเบผเบฒเบ. เบžเบงเบเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบฐเป€เบžเบฒเบฐ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบ™เบžเบฒเบชเบฒ SQL. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบœเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ•เบฒเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบœเปˆเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”. เบ–เป‰เบฒ SQLite เปƒเบ™เบงเบฝเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเบ–เบดเบ•เบดเบชเบฐเป€เบฅเปˆเบเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเป€เบฅเปˆเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™, เป€เบ›เบฑเบ™เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เบฎเบนเป‰เบ”เบตเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบงเบฝเบเบ•เบปเป‰เบ™เบ•เป. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ•เบดเบœเบปเบ™เบซเบผเบฒเบ, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบˆเปˆเบฒเบเบ„เปˆเบฒเบฅเบฒเบ„เบฒเบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ—เบฑเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ•เปเปˆเบกเบฒ.

3. เบชเบฒเบกเป€เบชเบปเบฒเบ„เป‰เบณเบ‚เบญเบ‡ LMDB

เป‚เบ”เบเป„เบ”เป‰เป€เบšเบดเปˆเบ‡ LMDB เบˆเบฒเบเบชเบฒเบเบ•เบฒเบ‚เบญเบ‡เบ™เบปเบ, เบกเบฑเบ™เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบฅเบปเบ‡เป€เบฅเบดเบ. เบชเบฒเบกเบžเบฒเบเบ•เปเปˆเป„เบ›เบˆเบฐเบ–เบทเบเบญเบธเบ—เบดเบ”เปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เป€เบชเบปเบฒเบซเบผเบฑเบเบ•เบปเป‰เบ™เบ•เปเบ—เบตเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰:

  1. เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบเบปเบ™เป„เบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปเบœเปˆเบ™เปเบฅเบฐ synchronizing เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™.
  2. B+-tree เป€เบ›เบฑเบ™เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰.
  3. Copy-on-write เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ ACID เปเบฅเบฐ multiversion.

3.1. เบ›เบฒเบงเบฒเบ™ #1. เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบ”เป‰เบงเบเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ

เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเปเบกเปˆเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบˆเบฐเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบŠเบทเปˆเบ‚เบญเบ‡ repository. เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡ caching เปเบฅเบฐ synchronization เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปเบกเปˆเบ™เบ›เบฐเป„เบงเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™. LMDB เบšเปเปˆเบกเบตเปเบ„เบ”เบžเบฒเบเปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบกเบตเบชเบฐเบ•เบดเป‚เบ”เบเบœเบนเป‰เบ‚เบฝเบ™, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเป„เบŸเบฅเปŒเปเบœเบ™เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเบ”เบกเบธเบกเบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเป„เบเบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ„เบปเบšเบ–เป‰เบงเบ™เบ‚เบญเบ‡เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

  1. เบเบฒเบ™เบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™เบˆเบฒเบเบซเบผเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™. เปƒเบ™เบžเบฒเบเบ•เปเปˆเป„เบ›, เบเบปเบ™เป„เบเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš.
  2. เบเบฒเบ™เบ‚เบฒเบ”เปเบ„เบชเบˆเบฐเบฅเบปเบšเบฅเป‰เบฒเบ‡ LMDB เบญเบญเบเบˆเบฒเบเบชเปˆเบงเบ™เป€เบเบตเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ—เบฒเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual เปเบฅเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบญเบตเบ. เบกเบฑเบ™เบŸเบฑเบ‡เบ„เบทเบ™เบดเบเบฒเบเบงเบดเบ—เบฐเบเบฒเบชเบฒเบ”, เปเบ•เปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบธเบเบเบฒเบ™เป‚เบ—เป„เบ›เบซเบฒ calloc เปเบกเปˆเบ™เบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ.
  3. เบเบฒเบ™เบšเปเปˆเบกเบต cache เบเบฑเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเปเปˆเบกเบต locks เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš synchronization เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบœเบนเป‰เบญเปˆเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบกเบตเบˆเปเบฒเบ™เบงเบ™เบœเบนเป‰เบญเปˆเบฒเบ™เบ—เบตเปˆเบ•เบปเบ™เป€เบญเบ‡เบกเบฑเบเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบšเปเปˆเบžเบปเบš mutex เบ”เบฝเบงเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™. เบ”เป‰เบงเบเป€เบซเบ”เบ™เบตเป‰, เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเป€เบชเบฑเป‰เบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบˆเปเบฒเบ™เบงเบ™ CPU. เปƒเบ™ LMDB, เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบกเปˆเบ™ synchronized. เบชเบฒเบกเบฒเบ”เบกเบตเบ™เบฑเบเบ‚เบฝเบ™เป„เบ”เป‰เป€เบ—เบทเปˆเบญเบฅเบฐเบ„เบปเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.
  4. เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆเบ‚เบญเบ‡ caching เปเบฅเบฐ synchronization logic เบฅเบปเบšเบฅเป‰เบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบซเบผเบฒเบ threaded. เบกเบตเบชเบญเบ‡เบเบฒเบ™เบชเบถเบเบชเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบก Usenix OSDI 2014: "เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™: เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™" ะธ "เบเบฒเบ™เบ—เปเบฅเบฐเบกเบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบกเปˆเบงเบ™เปเบฅเบฐเบœเบปเบ™เบเปเบฒเป„เบฅ". เบˆเบฒเบเบžเบงเบเบกเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ—เบฑเบ‡เบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบ—เบตเปˆเบšเปเปˆเป€เบ„เบตเบเบกเบตเบกเบฒเบเปˆเบญเบ™เบ‚เบญเบ‡ LMDB เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบเบทเบญเบšเบšเปเปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ‚เบญเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ ACID, เป€เบŠเบดเปˆเบ‡เบ”เบตเบเบงเปˆเบฒเบ‚เบญเบ‡ SQLite.
  5. เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡ LMDB เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบ„เบทเปˆเบญเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™ cache L1 เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ„เบงเบฒเบกเป„เบงเบ•เปเปˆเป„เบ›.

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เปƒเบ™ iOS, เบ”เป‰เบงเบเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™ cloudless เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบžเบทเปˆเบญเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบขเปˆเบฒเบ‡เบกเบตเบชเบฐเบ•เบดเบซเบผเบฒเบเบ‚เบถเป‰เบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบทเปˆเบˆเปเบฒเบซเบผเบฑเบเบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ™เป„เบเบ™เบตเป‰เปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™.

เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOSเบ”เป‰เบงเบเบ—เบธเบเป†เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ, เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป„เบ”เป‰เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เปเบ•เปˆเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบขเบนเปˆเบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบงเบฒเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. เบขเบนเปˆเบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบ•เปˆเปเบฒเบชเบธเบ”เบกเบตเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบเบฒเบ. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบ‚เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง, เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบ™เบ”เบตเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบžเบฒเบเปƒเบ•เป‰เบŠเบทเปˆ heap. เบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเบ›เบฒเบเบปเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™. เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เปเบกเปˆเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบ stack เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบกเบฑเบ™เป€เบ•เบตเบšเป‚เบ•เบซเบผเบทเป€เบฎเบฑเบ”เบชเบฑเบ™เบเบฒ; เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰ stack เปเบฅเบฐ heap เบเบนเป‰เปเบฅเบฐเปเบŠเบเปเบŠเบ‡เป€เบŠเบดเปˆเบ‡เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™, เบžเบงเบเบกเบฑเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ›เบฒเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ. เบกเบฑเบ™เบกเบตเบ‚เบธเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบชเปˆเบงเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบขเบนเปˆเบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เปเบฅเบฐเบฅเบธเปˆเบก. เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปƒเบŠเป‰เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบžเบฒเบเบเบฒเบ‡เบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบซเบผเบฒเบเป†เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบŠเบธเบ”เบ—เบตเปˆเบขเบนเปˆเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบเบฑเบšเป„เบŸเบฅเปŒเปƒเบ™เปเบœเปˆเบ™. เป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบญเบตเป‰เบ™เบงเปˆเบฒ memory-mapped.

เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบˆเบฑเบ”เบชเบฑเบ™เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบกเปˆเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡. เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเบขเบนเปˆเบ–เบทเบเบˆเปเบฒเบเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบ•เบปเบงเบŠเบตเป‰, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบ„เบงเบฒเบกเบญเบฒเบ”เบชเบฒเบกเบฒเบ”เบšเบดเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš. เบ–เป‰เบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบฒเบ‡เบเบฒเบเบฐเบžเบฒเบšเบ–เบทเบเปเบœเบ™เบ—เบตเปˆเบเบฑเบšเบกเบฑเบ™ 1-to-1, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เบˆเบฐเบเบญเบ” RAM เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš multitasking เปƒเบ”เป†.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบˆเบฒเบเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบเป‰เบญเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฑเบ”เบชเบฑเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปƒเบ™เป€เบˆเป‰เบ, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เปเบฅเป‰เบงเบžเบงเบเป€เบ‚เบปเบฒเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ•เบปเป‰เบ™เบ•เปเบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ virtual.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบŠเบปเบ‡โ€‹เบˆเปเบฒ virtual เปเบฅเบฐโ€‹เบ—เบฒเบ‡โ€‹เบ”เป‰เบฒเบ™โ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹. เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™, เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฐเป‚เบซเบฅเบ”เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเปเบฅเบฐเบเบปเบ‡เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบดเป€เบชเบ”. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบชเบฐเบฅเบฑเบญเบ”เบ•เบดเบ‡เบŸเบฃเบต, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเป‚เบซเบฅเบ”เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ„เบฑเบ”เบฅเบญเบเปƒเบชเปˆเปเบœเปˆเบ™เบ”เบดเบ”, เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฐเป€เบญเบปเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เปƒเบ™เป„เบงเป†เบ™เบตเป‰, เป€เบญเบตเป‰เบ™เบงเปˆเบฒ swapping. เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบ. เปƒเบ™เบกเบฑเบ™, เบซเบ™เป‰เบฒ A เบ—เบตเปˆเบกเบตเบ—เบตเปˆเบขเบนเปˆ 0 เป„เบ”เป‰เบ–เบทเบเป‚เบซเบฅเบ”เปเบฅเบฐเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เบปเป‰เบ™เบ•เปเบ—เบตเปˆเบกเบตเบ—เบตเปˆเบขเบนเปˆ 4. เบ„เบงเบฒเบกเบˆเบดเบ‡เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เป€เบฅเบ 0.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เป€เบฅเบทเปˆเบญเบ‡เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เปเบ—เป‰เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™, เบžเบงเบเบกเบฑเบ™เบ–เบทเบ supposedly เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐเบ•เบฑเป‰เบ‡เบขเบนเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ virtual. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เป‰เบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเป‚เบ”เบเบซเบ™เป‰เบฒเปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบ•เบฒเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป. เบเบฒเบ™โ€‹เบ”เบฑเบ”โ€‹เปเบเป‰โ€‹เบ‚เบญเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบงโ€‹เปเบกเปˆเบ™ synchronized เบเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เปƒเบ™โ€‹เปเบœเปˆเบ™โ€‹. เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ” I / O เป„เบŸเบฅเปŒเป‚เบ”เบเบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš bytes เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ - เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเป‚เบญเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบ kernel เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡.
'' '"
เบฎเบนเบšเบžเบฒเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™ LMDB synchronizes เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ•เบปเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป‚เบ”เบเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ virtual เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบเบฑเบšเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒ de facto oblige เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบžเบทเปˆเบญ synchronize transitively เบ•เบฑเบ™เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆ LMDB เป€เบšเบดเปˆเบ‡.
'' '"

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

nuance เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒ LMDB, เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ”เบฑเบ”เปเบเป‰เป„เบŸเบฅเปŒเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบเบปเบ™เป„เบเบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ‚เบฝเบ™, เปเบฅเบฐเบชเบฐเปเบ”เบ‡เป„เบŸเบฅเปŒเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบตเบชเบญเบ‡เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™.

เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ—เบปเปˆเบงเป„เบ›เบเบฑเบšเบ—เบธเบเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™. เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบ„เบงเบฒเบกเป€เบชเบเบซเบฒเบเป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เบ•เบฑเป‰เบ‡เปƒเบˆเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบกเปˆเบ™เบšเปเปˆเป€เบชเบเบ„เปˆเบฒเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ—เบธเบเบšเปˆเบญเบ™เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบทเปˆ, เบเบฒเบ™เบชเบฐเปเบ”เบ‡เป„เบŸเบฅเปŒเปƒเบ™เบฎเบนเบšเปเบšเบšเบญเปˆเบฒเบ™ - เบ‚เบฝเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ”เป†เบเปเปˆเบชเบฒเบกเบฒเบ”เบ”เบฑเบ”เปเบ›เบ‡เบกเบฑเบ™เป„เบ”เป‰. เบ–เป‰เบฒเบ™เบฒเบ‡เป€เบฎเบฑเบ”เบกเบฑเบ™เป‚เบ”เบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบžเบฐเบเบฒเบเบฒเบก, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เบ—เบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบš array เบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เบตเปˆเบšเปเปˆเบกเบตเบขเบนเปˆ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ™เบฒเบ‡เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆเบ™เบตเป‰เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบชเปเป‰เบฅเบฒเบ”เบšเบฑเบ‡เบซเบผเบงเบ‡เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ–เป‰เบฒเป„เบŸเบฅเปŒเบ–เบทเบเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ”เบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบดเบ”เป‚เบ„เบ‡เบเบฒเบ™เบชเบธเบเป€เบชเบตเบ™เบ”เป‰เบงเบเบชเบฑเบ™เบเบฒเบ™. SIGSEGV, เปเบฅเบฐเป„เบŸเบฅเปŒเบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡ intact.

เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฑเบš iOS เปเบฅเป‰เบง. เบ—เบฑเบ‡เบœเบนเป‰เบ‚เบฝเบ™เบซเบผเบทเปเบซเบผเปˆเบ‡เบญเบทเปˆเบ™เป†เบšเปเปˆเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡, เปเบ•เปˆเบ–เป‰เบฒเบšเปเปˆเบกเบตเบกเบฑเบ™ LMDB เบˆเบฐเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบกเบทเบ–เบทเบ™เบตเป‰. เบžเบฒเบเบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบญเบธเบ—เบดเบ”เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ‚เบญเบ‡เบ•เบปเบ™.

เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบˆเบณเปƒเบ™ iOS

เบกเบตเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™เบขเบนเปˆ WWDC เปƒเบ™เบ›เบต 2018 "iOS Memory Deep Dive". เบกเบฑเบ™เบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเปƒเบ™ iOS, เบซเบ™เป‰เบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™ 3 เบ›เบฐเป€เบžเบ”: เป€เบ›เบทเป‰เบญเบ™, เบšเบตเบšเบญเบฑเบ”เปเบฅเบฐเบชเบฐเบญเบฒเบ”.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ—เบตเปˆเบชเบฐเบญเบฒเบ”เปเบกเปˆเบ™เบŠเบธเบ”เปœเป‰เบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ–เบญเบ”เบญเบญเบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบšเปเปˆเป€เบˆเบฑเบšเบ›เบงเบ”เบˆเบฒเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเบณเบ—เบฒเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ. เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบกเบตโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป‚เบซเบผเบ”โ€‹เปƒเบซเบกเปˆโ€‹เป„เบ”เป‰โ€‹เบ•เบฒเบกโ€‹เบ„เบงเบฒเบกโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบˆเบฒเบโ€‹เปเบซเบผเปˆเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹. เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบšเบšเบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ•เบปเบเบขเบนเปˆเปƒเบ™เบซเบกเบงเบ”เบ™เบตเป‰. iOS เบšเปเปˆเบขเป‰เบฒเบ™เบ—เบตเปˆเบˆเบฐเบเบปเบเป€เบฅเบตเบเบเบฒเบ™เป‚เบซเบผเบ”เปœเป‰เบฒเป€เบงเบฑเบšเบ—เบตเปˆเป€เบฎเบฑเบ”เปเบœเบ™เบ—เบตเปˆเปƒเบชเปˆเป„เบŸเบฅเปŒเบˆเบฒเบเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเป„เบ”เป‰เบ—เบธเบเป€เบงเบฅเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบˆเบฐเบ–เบทเบ synchronized เบเบฑเบšเป„เบŸเบฅเปŒเปƒเบ™เปเบœเปˆเบ™.
'' '"
เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเบ”เบฑเบ”เปเบเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเป€เบ›เบทเป‰เบญเบ™, เบšเปเปˆเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบˆเบฐเบ•เบฑเป‰เบ‡เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ–เบทเบเบ”เบฑเบ”เปเบเป‰เป‚เบ”เบเบเบฒเบ™เบ‚เบฝเบ™เปƒเบชเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰. เป€เบ›เบตเบ” LMDB เบ”เป‰เบงเบเบ—เบธเบ‡ MDB_WRITEMAP, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบกเบฑเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบชเปˆเบงเบ™โ€‹เบšเบธเบโ€‹เบ„เบปเบ™ ..

เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบฅเบตเปˆเบกเบฎเบฑเบšเป€เบญเบปเบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบฒเบ‡เบเบฒเบเบฐเบžเบฒเบšเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›, iOS เบˆเบฐเบ–เบทเบเบšเบตเบšเบญเบฑเบ”เบซเบ™เป‰เบฒเป€เบ›เบทเป‰เบญเบ™. เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบทเป‰เบญเบ™เปเบฅเบฐเบ–เบทเบเบšเบตเบšเบญเบฑเบ”เบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบฎเบญเบเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เป€เบกเบทเปˆเบญเบกเบฑเบ™เบฎเบญเบ”เป€เบเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, daemon เบฅเบฐเบšเบปเบš killer OOM เบกเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเบฐเบšเบฑเบ‡เบ„เบฑเบšเบกเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เบ‚เบญเบ‡ iOS เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ desktop. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเป‚เบ”เบเบเบฒเบ™เบชเบฐเบซเบผเบฑเบšเปœเป‰เบฒเบˆเบฒเบเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ—เบฒเบ‡เบเบฒเบเป„เบ›เปƒเบชเปˆเปเบœเปˆเบ™เปเบกเปˆเบ™เบšเปเปˆเป„เบ”เป‰เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เปƒเบ™ iOS. เป€เบซเบ”เบœเบปเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰. เบšเบฒเบ‡เบ—เบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบเป‰เบฒเบเบซเบ™เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เป„เบ›เบซเบฒเปเบœเปˆเบ™เปเบฅเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เปเบกเปˆเบ™เปƒเบŠเป‰เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เป€เบเบตเบ™เป„เบ›เบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบกเบทเบ–เบท, เบซเบผเบท iOS เบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบˆเบธเบฅเบฑเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™ SSD drives, เบซเบผเบทเบšเบฒเบ‡เบ—เบตเบœเบนเป‰เบญเบญเบเปเบšเบšเบšเปเปˆเบžเปเปƒเบˆเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบฅเบงเบกเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™. เปเบฅเบเบ›เปˆเบฝเบ™เบขเบนเปˆเบชเบฐเป€เบซเบกเบต. เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบ„เบงเบฒเบกเบˆเบดเบ‡เบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡.

เบ‚เปˆเบฒเบงเบ”เบต, เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบงเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เปเบกเปˆเบ™เบงเปˆเบฒ LMDB เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบเบปเบ™เป„เบ mmap เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เป„เบŸเบฅเปŒ. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เป‚เบ”เบ iOS เป€เบ›เบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบชเบฐเบญเบฒเบ”เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท Xcode เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ VM Tracker. เบฎเบนเบšเปœเป‰เบฒเบˆเปเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบชเบฐเป€เปเบทเบญเบ™เบ‚เบญเบ‡ iOS เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Cloud เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, 2 เบ•เบปเบงเบขเปˆเบฒเบ‡ LMDB เป„เบ”เป‰เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเบนเปˆเปƒเบ™เบกเบฑเบ™. เบ—เปเบฒเบญเบดเบ”เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบชเบฐเปเบ”เบ‡เป„เบŸเบฅเปŒเบ‚เบญเบ‡เบฅเบฒเบงเปƒเบ™ 1GiB เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual, เบ—เบตเบชเบญเบ‡ - 512MiB. เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบ„เบญเบšเบ„เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเบขเบนเปˆเบญเบฒเปƒเบช, เบ—เบฑเบ‡เบชเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เป€เบ›เบทเป‰เบญเบ™.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบชเปเบฒเบฅเบฑเบšเบ‚เปˆเบฒเบงเบฎเป‰เบฒเบ. เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบเบปเบ™เป„เบ swap เปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ desktop 64-bit, เปเบ•เปˆเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบญเบšเบ„เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ virtual เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบžเบทเป‰เบ™เบ—เบตเปˆเบฎเบฒเบ”เบ”เบดเบ”เบŸเบฃเบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ—เบตเปˆเบกเบตเบ—เปˆเบฒเปเบฎเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ—เบ™ swap เบ”เป‰เบงเบเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เปƒเบ™ iOS เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เป€เบซเบกเบฒเบฐเบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เบปเป‰เบ™เบ•เป (เบญเปˆเบฒเบ™ RAM), เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบขเบธเบ”เป€เบŠเบปเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ เบฅเบฒเบเบ‡เบฒเบ™, เปเบฅเบฐเปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™. เบ”เป‰เบงเบเป€เบซเบ”เบ™เบตเป‰, iOS เบˆเบณเบเบฑเบ”เบˆเบณเบ™เบงเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบขเปˆเบฒเบ‡เปœเบฑเบเปœเปˆเบงเบ‡เบชเบณเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบœเปˆเบฒเบ™ mmap. เบ—เบตเปˆเบ™เบตเป‰ เบ—เบตเปˆเบ™เบตเป‰ เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ‚เปเป‰โ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบซเบ™เปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบชเบฑเบ™โ€‹เปƒเบ™โ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ™เบตเป‰โ€‹. เปƒเบ™เปเบšเบšเบชเบฐเบกเบฒเบ”เป‚เบŸเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบตเปˆเบชเบธเบ”, iOS เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เปƒเบซเบเปˆเป‚เบ”เบ 2 gigabytes, เปเบฅเบฐเปƒเบ™เบฎเบธเปˆเบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡ iPad - เป‚เบ”เบ 4. เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเบธเบกเปƒเบชเปˆเบฎเบนเบšเปเบšเบšเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ•เปˆเปเบฒเบชเบธเบ”, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ sad เบซเบผเบฒเบ. เบฎเป‰เบฒเบเปเบฎเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เป‚เบ”เบเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ™ VM Tracker, เบ—เปˆเบฒเบ™เบˆเบฐเบžเบปเบšเบงเปˆเบฒ LMDB เปเบกเปˆเบ™เบขเบนเปˆเป„เบเบˆเบฒเบเบญเบฑเบ™เบ”เบฝเบงเบ—เบตเปˆเบญเป‰เบฒเบ‡เบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบŠเบดเป‰เบ™เบ—เบตเปˆเบ”เบตเบ–เบทเบเบเบดเบ™เป„เบ›เป‚เบ”เบเบœเบนเป‰เบˆเบฑเบ”เบชเบฑเบ™เบฅเบฐเบšเบปเบš, เป„เบŸเบฅเปŒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบเบญเบšเบฎเบนเบšเบžเบฒเบš, เปเบฅเบฐเบœเบนเป‰เบฅเป‰เบฒเบ—เบตเปˆเบ™เป‰เบญเบเบเบงเปˆเบฒเบญเบทเปˆเบ™เป†.

เบญเบตเบ‡เบ•เบฒเบกเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปƒเบ™ Cloud, เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบ„เปˆเบฒเบ›เบฐเบ™เบตเบ›เบฐเบ™เบญเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบˆเบฑเบ”เบชเบฑเบ™เป‚เบ”เบ LMDB: 384 megabytes เบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ 32-bit เปเบฅเบฐ 768 เบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ 64-bit. เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบฐเบฅเบดเบกเบฒเบ™เบ™เบตเป‰เบ–เบทเบเปƒเบŠเป‰เบซเบกเบปเบ”เปเบฅเป‰เบง, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เปƒเบ”เป†เบเปเปˆเป€เบฅเบตเปˆเบกเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ” MDB_MAP_FULL. เบžเบงเบเป€เบฎเบปเบฒเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เป‚เบ”เบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบกเบตเบŠเบตเบงเบดเบ”เบŠเบตเบงเบฒ. เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบชเบญเบ‡เบ›เบฐเบเบปเบ”เบเบฒเบ™เบ™เบตเป‰เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบ™เปเบ™เบงเปƒเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเป‚เบ”เบเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบญเบ‡เป€เบชเบปเบฒเบ„เป‰เปเบฒเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบ‚เบญเบ‡ LMDB.

3.2. เบ›เบฒเบงเบฒเบ™ #2. B+-เบ•เบปเป‰เบ™เป„เบกเป‰

เป€เบžเบทเปˆเบญเบˆเบณเบฅเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบขเบนเปˆเป€เบ—เบดเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบณเบ„เบฑเบ™, เบ„เบณเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเบ•เป‰เบญเบ‡เบกเบตเบขเบนเปˆเปƒเบ™ API เบ‚เบญเบ‡เบกเบฑเบ™:

  1. เบเบฒเบ™เปƒเบชเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบซเบกเปˆ.
  2. เบŠเบญเบเบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปƒเบซเป‰.
  3. เบเบฒเบ™เบ–เบญเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบš.
  4. Iterate เปƒเบ™เป„เบฅเบเบฐเบซเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฐเปเบˆเปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบฎเบฝเบ‡.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOSเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบตเปˆเบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปเบกเปˆเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบ„เบปเป‰เบ™เบซเบฒเบชเบญเบ‡. เปเบ•เปˆเบฅเบฐเบ‚เปเป‰เบ‚เบญเบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบเบฐเปเบˆเบ—เบตเปˆเปเบšเปˆเบ‡เบŠเบธเบ”เบเปˆเบญเบเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบเบฐเปเบˆเบฅเบนเบเบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบ•เบปเป‰เบ™เบเปˆเบญเบ. เป€เบšเบทเป‰เบญเบ‡เบŠเป‰เบฒเบเบšเบฑเบ™เบˆเบธเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒเบžเปเปˆเปเบกเปˆ, เปเบฅเบฐเป€เบšเบทเป‰เบญเบ‡เบ‚เบงเบฒเบšเบฑเบ™เบˆเบธเบชเบดเปˆเบ‡เบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒ. เบเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบŠเบธเบ”โ€‹เบเบฐโ€‹เปเบˆโ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบชเบฑเปˆเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบšเบฑเบ™โ€‹เบฅเบธโ€‹เป„เบ”เป‰โ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ”เบตเบ™โ€‹เบ—เบฒเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹เป„เบกเป‰โ€‹เบ„เบฅเบฒโ€‹เบชโ€‹เบชเบดเบ

เบ•เบปเป‰เบ™เป„เบกเป‰เป„เบšเบ™เบฒเบฃเบตเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเบญเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เบžเบงเบเบกเบฑเบ™เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบ›เบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเปเบœเปˆเบ™. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเบชเบปเบกเบ”เบธเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰. เบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบ„เบงเบฒเบกเบชเบนเบ‡เบ‚เบญเบ‡เบชเบฒเบ‚เบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเบฒเบกเบฒเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเปเบšเบš algorithmic เบฎเป‰เบฒเบเปเบฎเบ‡เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เบฒเบ”เบซเบงเบฑเบ‡. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบ„เบงเบฒเบกเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เป‰เบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes deprives binary tree เบ‚เบญเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. nodes เบ›เบดเบ” (เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ) เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ‚เป‰เบฒเบกเบœเปˆเบฒเบ™เปเบšเบšเบ‡เปˆเบฒเบเป†เบ‚เบญเบ‡เบซเบผเบฒเบเบˆเบธเบ”เปƒเบเป‰เบ„เบฝเบ‡เบขเบนเปˆเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบญเบฒเบ”เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เป„เบ›เบขเป‰เบฝเบกเบขเบฒเบกเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบฒเบ›เบฝเบšเบ—เบฝเบš. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ„เบนเปˆเป€เบ›เบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ rotating เบซเบ™เป‰เบฒเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปƒเบ™ cache เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบธเบเบฅเบฒเบ„เบฒเบ–เบทเบ. เป€เบกเบทเปˆเบญเบกเบฑเบ™เบกเบฒเบเบฑเบšเบเบฒเบ™เบ”เบถเบ‡เป€เบญเบปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป‚เบซเบ™เบ”เบˆเบฒเบเปเบœเปˆเบ™เป€เบฅเบทเป‰เบญเบเป†, เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบˆเบฐเบซเบกเบปเบ”เป„เบ› เปœเป‰เบฒเป€เบชเบปเป‰เบฒเปƒเบˆเบ—เบตเปˆเบขเบนเปˆ

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOSB-trees, เป€เบ›เบฑเบ™เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบชเบญเบ‡, เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบงเบฑเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบ›เบฐเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เปเบ•เปˆเบฅเบฐเบ‚เปเป‰เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เปเบเบเบŠเบธเบ”เบ‚เบญเบ‡เบฅเบนเบเบเบฐเปเบˆเบšเปเปˆเบญเบญเบเป€เบ›เบฑเบ™ 2, เปเบ•เปˆเป€เบ›เบฑเบ™เบŠเบธเบ”เบเปˆเบญเบเบเปˆเบญเบเบ‚เบญเบ‡ M, เปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™ M เบชเบฒเบกเบฒเบ”เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เปƒเบซเบเปˆ, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบซเบผเบฒเบเบฎเป‰เบญเบ, เบซเบผเบทเบซเบผเบฒเบเบžเบฑเบ™เบ„เบปเบ™.

เบ”เป‰เบงเบเป€เบซเบ”เบ™เบตเป‰:

  1. เปเบ•เปˆเบฅเบฐ node เบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบเบฐเปเบˆเบ—เบตเปˆเบชเบฑเปˆเบ‡เปเบฅเป‰เบงเปเบฅเบฐเบ•เบปเป‰เบ™เป„เบกเป‰เบชเบฑเป‰เบ™เบซเบผเบฒเบ.
  2. เบ•เบปเป‰เบ™เป„เบกเป‰เป„เบ”เป‰เบฎเบฑเบšเบŠเบฑเบšเบชเบดเบ™เบ‚เบญเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฐเปเบˆเบ—เบตเปˆเบกเบตเบกเบนเบ™เบ„เปˆเบฒเปƒเบเป‰เบ„เบฝเบ‡เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบเบฑเบ™เปƒเบ™เบ‚เปเป‰เบ”เบฝเบงเบเบฑเบ™เบซเบผเบทเปƒเบเป‰เบ„เบฝเบ‡.
  3. เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบœเปˆเบฒเบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹เป„เบกเป‰โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เปเบกเปˆเบ™โ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹.
  4. เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบญเปˆเบฒเบ™โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบญเบšโ€‹เบ–เบฒเบกโ€‹เป„เบฅโ€‹เบเบฐโ€‹เปเบกเปˆเบ™โ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹, เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบกเบตโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบเบฐโ€‹เปเบˆโ€‹เบชเบฑเปˆเบ‡โ€‹เปเบฅเป‰เบงโ€‹.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

LMDB เปƒเบŠเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰ B เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ•เบปเป‰เบ™เป„เบกเป‰ B+ เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™. เปเบœเบ™เบงเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบฒเบกเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ nodes เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบกเบฑเบ™:

  1. เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เปเบกเปˆเบ™เบฎเบฒเบ. เบกเบฑเบ™ materializes เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบซเบผเบฒเบเบเปˆเบงเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™เบชเบฒเบ‡. เบžเบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ LMDB, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ virtual. เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบฎเบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.
  2. เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปเปˆเบฒเบชเบธเบ”เปเบกเปˆเบ™เปƒเบš. เบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ„เบนเปˆเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰ B +. เบ–เป‰เบฒ B-tree เบ›เบปเบเบเบฐเบ•เบดเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเปƒเบ™ nodes เบ‚เบญเบ‡เบ—เบธเบเบฅเบฐเบ”เบฑเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ B+ เปเบกเปˆเบ™เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ•เปˆเปเบฒเบชเบธเบ”. เบกเบตเบเบฒเบ™เบชเป‰เบญเบกเปเบŠเบกเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป‚เบ—เบซเบฒเบ›เบฐเป€เบžเบ”เบเปˆเบญเบเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ LMDB เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™ B-tree.
  3. เบฅเบฐเบซเบงเปˆเบฒเบ‡เบฎเบฒเบเปเบฅเบฐเปƒเบšเบกเบต 0 เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบฅเบฐเบ”เบฑเบšเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ—เบตเปˆเบกเบตเป€เบชเบฑเป‰เบ™เบ™เปเบฒเบ—เบฒเบ‡ (เบชเบฒเบ‚เบฒ). เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปเบšเปˆเบ‡เบŠเบธเบ”เบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เบญเบ‡เบ„เบตเบฅเบฐเบซเบงเปˆเบฒเบ‡เปƒเบš.

เบ—เบฒเบ‡เบเบฒเบเบเบฐเบžเบฒเบš, เป‚เบ™เบ”เปเบกเปˆเบ™เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเบณเบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰เบฅเปˆเบงเบ‡เปœเป‰เบฒ. เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เปเบกเปˆเบ™เบซเบผเบฒเบเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡ node เปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เบชเปˆเบงเบ™เบซเบปเบงเบกเบตเบ‚เปเป‰เบกเบนเบ™ meta, เบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ checksum. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบเบ—เบตเปˆเบˆเบธเบฅเบฑเบ‡เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆ. เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบเบฐเปเบˆเป„เบ”เป‰, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš nodes navigation, เบซเบผเบทเบ„เบนเปˆเบ„เบต-value เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เปƒเบš. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบซเบ™เป‰เบฒเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. "เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบ‚เบญเบ‡เบฎเป‰เบฒเบ™เบ—เบตเปˆเบกเบตเบกเบนเบ™เบ„เปˆเบฒเบชเบนเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš".

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เป‚เบ”เบเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเป€เบ™เบทเป‰เบญเปƒเบ™เบžเบฒเบเปƒเบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡ LMDB B-tree เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปƒเบ™เบฎเบนเบšเปเบšเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบต nodes เบ•เบฑเป‰เบ‡เบขเบนเปˆเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบขเบนเปˆเปƒเบ™เปเบœเปˆเบ™. เบซเบ™เป‰เบฒเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒเปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เป„เบŸเบฅเปŒ. เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบซเบ™เป‰เบฒ meta เบกเบตเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบเบ—เบตเปˆเบฎเบฒเบเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰. เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เป„เบŸเบฅเปŒ, LMDB เบชเบฐเปเบเบ™เบซเบ™เป‰เบฒเป„เบŸเบฅเปŒเปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบˆเบฒเบเบ—เป‰เบฒเบเป„เบ›เบซเบฒเบ•เบปเป‰เบ™เปƒเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบซเบ™เป‰เบฒ meta เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบœเปˆเบฒเบ™เบกเบฑเบ™เบŠเบญเบเบซเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เป€เบซเบ”เบœเบปเบ™เปเบฅเบฐเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ‚เปเป‰เบกเบนเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเป‰เบฒเบงเป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒเป€เบžเบทเปˆเบญเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบชเบปเบฒเบซเบผเบฑเบเบ—เบตเบชเบฒเบกเบ‚เบญเบ‡ LMDB. เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบกเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเบˆเบฒเบเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™, เปƒเบซเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบฑเบ™เบŠเบฑเบšเบชเบดเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ multiversion.

3.3. เบ›เบฒเบงเบฒเบ™ #3. เบชเบณเป€เบ™เบปเบฒ-เบ‚เบฝเบ™

เบšเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ B-tree เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบŠเบธเบ”เบ‚เบญเบ‡ nodes เบ‚เบญเบ‡เบกเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบฅเบฐเบซเบฑเบ”เปƒเบซเบกเปˆเปƒเบซเป‰เบเบฑเบš node เบ—เบตเปˆเบšเบฑเบ™เบฅเบธเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเป‰เบง. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™, เบ—เปเบฒเบญเบดเบ”, เปเบเบ node เป€เบ›เบฑเบ™เบชเบญเบ‡, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš node budding เป€เบ”เบฑเบเปƒเบซเบกเปˆเปƒเบ™เบžเปเปˆเปเบกเปˆเบ‚เบญเบ‡เบ•เบปเบ™. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบซเบผเบฒเบ. เบ–เป‰เบฒเบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡ (เบญเบธเบ›เบฐเบ•เบดเป€เบซเบ”, เป„เบŸเป„เบซเบกเป‰, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเบฒเบเบŠเบธเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบเบตเบ”เบ‚เบถเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡.

เบเบฒเบ™เปเบเป‰เป„เบ‚เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบกเบญเบฑเบ™เปœเบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบตเบ„เบงเบฒเบกเบœเบดเบ”-เบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบœเปˆเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ•เปเปˆเบเบฑเบš B-tree - เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบญเบตเป‰เบ™เบเบฑเบ™เบงเปˆเบฒเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ‚เบฝเบ™เบฅเปˆเบงเบ‡เปœเป‰เบฒ (WAL). เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เบฑเบ”เปเบ›เบ‡ B-tree เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบเบงเบ”เบžเบปเบšเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเบ•เบปเบ™เป€เบญเบ‡, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบ—เบถเบเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบงเบฒเบ‡เบ•เบปเบงเป€เบญเบ‡.

LMDB เป„เบ”เป‰เป€เบฅเบทเบญเบเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบ›เบฑเบ™เบเบปเบ™เป„เบเบเบฒเบ™เบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”, เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเป€เบ—เบดเบ‡เบ‚เบฝเบ™. เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบกเบฑเบ™เบ—เปเบฒเบญเบดเบ”เบ„เบฑเบ”เบฅเบญเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบชเปเบฒเป€เบ™เบปเบฒ.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ•เปเปˆเป„เบ›, เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เปƒเบซเป‰เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เปˆเบฝเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป‚เบซเบ™เบ”เบ—เบตเปˆเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปƒเบ™เป‚เบซเบ™เบ”เปเบกเปˆเบ‚เบญเบ‡เบกเบฑเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเบ„เบฑเบ”เบฅเบญเบเบเปˆเบญเบ™. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบทเบšเบ•เปเปˆ recursively เบ—เบฑเบ‡เบซเบกเบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบฎเบฒเบ. เบชเบดเปˆเบ‡เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบซเบ™เป‰เบฒ meta.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ–เป‰เบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡เบขเปˆเบฒเบ‡เบเบฐเบ—เบฑเบ™เบซเบฑเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเบ™เป‰เบฒ meta เปƒเบซเบกเปˆเบˆเบฐเบšเปเปˆเบ–เบทเบเบชเป‰เบฒเบ‡, เบซเบผเบทเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบ‚เบฝเบ™เบฅเบปเบ‡เปƒเบ™เปเบœเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐ checksum เบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบซเบ™เป‰เบฒเปƒเบซเบกเปˆเบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰, เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบเบปเปˆเบฒเบˆเบฐเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบเบฐเบ—เบปเบš. เบ™เบตเป‰เบฅเบปเบšเบฅเป‰เบฒเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš LMDB เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบšเบฑเบ™เบ—เบถเบเบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบœเปˆเบ™เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™. เบเบฒเบ™เบ‚เบฒเบ”เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡ LMDB เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบนเบ‡.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบเบฒเบ™เบญเบญเบเปเบšเบšเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™, เป€เบญเบตเป‰เบ™เบงเปˆเบฒ append-only B-tree, เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบซเบผเบฒเบเบฎเบธเปˆเบ™. เปƒเบ™ LMDB, เปเบ•เปˆเบฅเบฐเบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเป€เบ›เบตเบ”เปเบกเปˆเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบฎเบฒเบเบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบˆเบปเบ™เบเปˆเบงเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเปเบฒเป€เบฅเบฑเบ”, เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบทเปƒเบŠเป‰เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบฎเบธเปˆเบ™เปƒเบซเบกเปˆ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบปเบ™เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฑเบšเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™. เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบˆเบฐเบชเบทเบšเบ•เปเปˆเบ›เบฑเบšเบ›เบธเบ‡เบขเปˆเบฒเบ‡เบซเป‰เบฒเบงเบซเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡ multiversion, เป€เบฎเบฑเบ”เปƒเบซเป‰ LMDB เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบฎเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ UICollectionView. เบกเบตเบเบฒเบ™เป€เบ›เบตเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบชเบนเบšเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบขเป‰เบฒเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบฅเบตเบ. เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบˆเปเบฒเปเบ™เบ LMDB เบˆเบฒเบ SQLite เบ”เบฝเบงเบเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป‚เบญเป‰เบญเบงเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเบ—เบฑเบ‡เบซเบกเบปเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เป‚เบ”เบเป„เบ”เป‰เป€เบ›เบตเบ”เบชเบญเบ‡เบ—เบธเบฅเบฐเบเปเบฒเปƒเบ™เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปเบฅเบฐเบฅเบถเบšเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบžเบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบ—เบถเบเบ”เบฝเบงเบเบฑเบ™เบžเบฒเบเปƒเบ™เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญ.

เบ”เป‰เบฒเบ™ flip เบ‚เบญเบ‡เบซเบผเบฝเบ™เปเบกเปˆเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ virtual เบ—เบตเปˆเบชเบนเบ‡เบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบชเบฐเป„เบฅเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบกเบฑเบ™เบ–เบทเบเปเบเป‰เป„เบ‚เบžเป‰เบญเบกเป†เบเบฑเบ™เบเบฑเบš 3 เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเป€เบ›เบตเบ”เบญเปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบฎเบธเปˆเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ LMDB เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ„เบทเบ™เปƒเบซเบกเปˆเบ‚เปเป‰เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบˆเบฒเบเบฎเบฒเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เบฎเป‰เบฒเบ™เบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบฎเบฒเบเบ—เบตเปˆเบชเบตเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡ clone เบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบฑเบ”เปเบเป‰เบžเบฒเบเปƒเบ•เป‰เบกเบฑเบ™.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเบˆเปเบฒเบžเบฒเบเบชเปˆเบงเบ™เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual เบšเปเปˆเบ„เบงเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบงเบปเบ™เบซเบผเบฒเบ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒ iOS เบกเบตเบ„เบงเบฒเบกเป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”เบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบกเบฑเบ™, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”, เป€เบŠเบฑเปˆเบ™เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบท desktop, เบชเบฐเบซเบ™เบญเบ‡เบžเบฒเบเบžเบทเป‰เบ™ LMDB เบ‚เบญเบ‡ 1 terabyte เปเบฅเบฐเบšเปเปˆเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เป€เบฅเบตเบ. เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เปƒเบซเป‰เบญเบฒเบเบธเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบฑเป‰เบ™เบ—เบตเปˆเบชเบธเบ”เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰.

4. เบเบฒเบ™เบญเบญเบเปเบšเบšเป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ key-value API

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ API เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบ LMDB: เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบฅเบฐเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบกเบนเบ™เบ„เปˆเบฒ, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบ•เบปเบงเบเบฐเบžเบดเบš.

เบšเบฑเบ™เบ—เบถเบเบเปˆเบฝเบงเบเบฑเบšเบฅเบฒเบเบŠเบทเปˆเบฅเบฐเบซเบฑเบ”

เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ LMDB API เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เปเบ•เปˆเปƒเบ™เบ—เบธเบเบฅเบฒเบเบเบฒเบ™เบ•เปเปˆเป„เบ›เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ‚เบญเบ‡เบกเบฑเบ™เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบซเบเปเป‰เบ—เปเป‰. เบชเป‰เบญเบก C++ wrappers lmdbxx, เปƒเบ™โ€‹เบ™เบฑเป‰เบ™โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปเบกเปˆเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™ C ++โ€‹.

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเป„เบงเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ LMDB เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš iOS เบซเบผเบท macOS, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒ CocoaPod เบ‚เบญเบ‡เบ‚เป‰เบญเบ POSLMDB.

4.1. เบšเบปเบ”เบ„เบฑเบ”เบซเบเปเป‰เบžเบทเป‰เบ™เบ–เบฒเบ™

เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก

เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™ MDB_env เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เบฅเบฑเบ”เบžเบฒเบเปƒเบ™เบ‚เบญเบ‡ LMDB. เบ„เบญเบšเบ„เบปเบงเบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบณเปœเป‰เบฒ mdb_env เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” configure เบšเบฒเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰.

mdb_env_create(env);โ€‹
mdb_env_set_map_size(*env, 1024 * 1024 * 512)โ€‹
mdb_env_open(*env, path.UTF8String, MDB_NOTLS, 0664);

เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Mail.ru Cloud, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เปˆเบฝเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ virtual เบ—เบตเปˆเป„เบŸเบฅเปŒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ–เบทเบเปเบœเบ™เบ—เบตเปˆ. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ”เบฝเบงเบเบฑเบ™, เบกเบนเบ™เบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐเบชเบฒเบกเบฒเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบˆเบฒเบเบเบฒเบ™เปเบฅเปˆเบ™เป„เบ›เบซเบฒเบเบฒเบ™เปเบฅเปˆเบ™. เป€เบžเบทเปˆเบญเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบ‚เบญเบ‡ iOS, เบ›เบฐเบฅเบดเบกเบฒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบนเบ‡เบชเบธเบ”เปเบกเปˆเบ™เป€เบฅเบทเบญเบเปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบ. เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบ„เปˆเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบˆเบปเบ™เบเปˆเบงเบฒเบŸเบฑเบ‡เบŠเบฑเบ™ mdb_env_open เบˆเบฐเบšเปเปˆเบชเบปเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ ENOMEM. เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบเบฑเบ‡เบกเบตเบงเบดเบ—เบตเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก - เบ—เปเบฒเบญเบดเบ”เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, MDB_MAP_FULL, เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เป€เบ›เบฑเบ™ thorny เบซเบผเบฒเบ. เป€เบซเบ”เบœเบปเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ„เบทเบ™เปƒเบซเบกเปˆ (remap) เป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ mdb_env_set_map_size invalidates entities เบ—เบฑเบ‡เบซเบกเบปเบ” (เบ•เบปเบงเบเบฐเบžเบดเบš, เบ—เบธเบฅเบฐเบเปเบฒ, เบ„เบตเปเบฅเบฐเบ„เปˆเบฒ) เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ. เบเบฒเบ™เป€เบญเบปเบฒเป€เบซเบ”เบเบฒเบ™เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ virtual เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™, เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบชเป‰เบญเบกเบ—เบตเปˆเป„เบ›เป„เบเบเปˆเบญเบ™เบซเบ™เป‰เบฒ. MDBX, เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบ”เบฒโ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบเบฒเบ”โ€‹เบกเบต "เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ–เบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบšเบดเบ™โ€‹"โ€‹.

เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเบชเบญเบ‡, เบกเบนเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เบ„เบงเบšเบ„เบธเบกเบเบปเบ™เป„เบเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบเบฐเบ—เบนเป‰. เบ‚เปเบญเบฐเป„เบž, เบขเปˆเบฒเบ‡เปœเป‰เบญเบ iOS 10 เบกเบตเบšเบฑเบ™เบซเบฒเบเบฑเบšเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰, เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, repository เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ”เป‰เบงเบเบ—เบธเบ‡ MDB_NOTLS. เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบ™เบตเป‰, เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™ เบชเป‰เบญเบก C++ wrapper lmdbxxเป€เบžเบทเปˆเบญเบ•เบฑเบ”เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰เปเบฅเบฐเปƒเบ™เบกเบฑเบ™.

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ B-tree เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เบเบฒเบ™เป€เบ›เบตเบ”เบ‚เบญเบ‡เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เบ—เบธเบฅเบฐเบเปเบฒ, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเปเบ›เบเป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”.

MDB_txn *txn;โ€‹
MDB_dbi dbi;โ€‹
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);โ€‹
mdb_dbi_open(txn, NULL, MDB_CREATE, &dbi);โ€‹
mdb_txn_abort(txn);

เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปƒเบ™ LMDB เปเบกเปˆเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ, เบšเปเปˆเปเบกเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐ. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบ™เบตเป‰เป€เบ›เบตเบ”เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบญเบปเบฒเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบญเบฐเบ—เบดเบšเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบ„เบต เปเบฅเบฐเบ„เปˆเบฒ

เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™ MDB_val เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ—เบฑเบ‡เบชเบญเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบฅเบฐเบกเบนเบ™เบ„เปˆเบฒ. repository เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบš semantics เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบชเปเบฒเบฅเบฑเบšเบ™เบฒเบ‡, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆ array เบ‚เบญเบ‡ bytes เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เบ‚เบฐเปœเบฒเบ”เบเบฐเปเบˆเบชเบนเบ‡เบชเบธเบ”เปเบกเปˆเบ™ 512 bytes.

typedef struct MDB_val {โ€‹
    size_t mv_size;โ€‹
    void *mv_data;โ€‹
} MDB_val;โ€‹โ€‹

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบ›เบฝเบšโ€‹เบ—เบฝเบšโ€‹, เบฎเป‰เบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบเบฐโ€‹เปเบˆโ€‹เปƒเบ™โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ—เบปเบ”โ€‹เปเบ—เบ™โ€‹เบ”เป‰เบงเบโ€‹เบ•เบปเบงโ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบญเบ‡โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ„เปˆเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹, เป€เบŠเบดเปˆเบ‡โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบš byte-by-byte เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡ lexicographicโ€‹.โ€‹

เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐ เบเบณ

เป‚เบ„เบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบเบฒเบ™โ€‹เบ—เบธโ€‹เบฅเบฐโ€‹เบเปเบฒโ€‹เปเบกเปˆเบ™โ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เปƒเบ™ เบšเบปเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบ„เบทเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป‚เบ”เบเบซเบเปเป‰:

  1. เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” เป€เบญเบŠเบตเบ”เบต: เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน, เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡, เบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเปเบฅเบฐเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท. เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰เปเบ•เปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เปƒเบ™ macOS เปเบฅเบฐ iOS เบ—เบตเปˆเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™ MDBX. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ README.
  2. เบงเบดเบ—เบตเบเบฒเบ™เป€เบžเบทเปˆเบญ multithreading เปเบกเปˆเบ™เบญเบฐเบ—เบดเบšเบฒเบเป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™ "เบ™เบฑเบเบ‚เบฝเบ™เบ”เบฝเบง / เบœเบนเป‰เบญเปˆเบฒเบ™เบซเบผเบฒเบ". เบ™เบฑเบเบ‚เบฝเบ™เบšเบฅเบฑเบญเบเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™, เปเบ•เปˆเบขเปˆเบฒเบšเบฅเบฑเบญเบเบœเบนเป‰เบญเปˆเบฒเบ™. เบœเบนเป‰เบญเปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ™เบฑเบเบ‚เบฝเบ™เบซเบผเบทเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™.
  3. เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบŠเป‰เบญเบ™เบเบฑเบ™.
  4. Multiversion เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.

Multiversion เปƒเบ™ LMDB เปเบกเปˆเบ™เบ”เบตเบซเบผเบฒเบเบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ—เบธเบฅเบฐเบเปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปเบšเบšเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบตเบ”, เบ–เบทเบเปเบเบเบญเบญเบเบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เปเปˆเป„เบ›เบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฑเบšเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบดเบ—เบตเบเปเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบ›เบฐเป„เบงเป‰เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™ spoiler.

เบเบณเบฅเบฑเบ‡เป€เบžเบตเปˆเบกเบฅเบฒเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

MDB_env *env;
MDB_dbi dbi;
MDB_txn *txn;

mdb_env_create(&env);
mdb_env_open(env, "./testdb", MDB_NOTLS, 0664);

mdb_txn_begin(env, NULL, 0, &txn);
mdb_dbi_open(txn, NULL, 0, &dbi);
mdb_txn_abort(txn);

char k = 'k';
MDB_val key;
key.mv_size = sizeof(k);
key.mv_data = (void *)&k;

int v = 997;
MDB_val value;
value.mv_size = sizeof(v);
value.mv_data = (void *)&v;

mdb_txn_begin(env, NULL, 0, &txn);
mdb_put(txn, dbi, &key, &value, MDB_NOOVERWRITE);
mdb_txn_commit(txn);

MDB_txn *txn1, *txn2, *txn3;
MDB_val val;

// ะžั‚ะบั€ั‹ะฒะฐะตะผ 2 ั‚ั€ะฐะฝะทะฐะบั†ะธะธ, ะบะฐะถะดะฐั ะธะท ะบะพั‚ะพั€ั‹ั… ัะผะพั‚ั€ะธั‚
// ะฝะฐ ะฒะตั€ัะธัŽ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… ั ะพะดะฝะพะน ะทะฐะฟะธััŒัŽ.
mdb_txn_begin(env, NULL, 0, &txn1); // read-write
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn2); // read-only

// ะ’ ั€ะฐะผะบะฐั… ะฟะตั€ะฒะพะน ั‚ั€ะฐะฝะทะฐะบั†ะธะธ ัƒะดะฐะปัะตะผ ะธะท ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… ััƒั‰ะตัั‚ะฒัƒัŽั‰ัƒัŽ ะฒ ะฝะตะน ะทะฐะฟะธััŒ.
mdb_del(txn1, dbi, &key, NULL);
// ะคะธะบัะธั€ัƒะตะผ ัƒะดะฐะปะตะฝะธะต.
mdb_txn_commit(txn1);

// ะžั‚ะบั€ั‹ะฒะฐะตะผ ั‚ั€ะตั‚ัŒัŽ ั‚ั€ะฐะฝะทะฐะบั†ะธัŽ, ะบะพั‚ะพั€ะฐั ัะผะพั‚ั€ะธั‚ ะฝะฐ
// ะฐะบั‚ัƒะฐะปัŒะฝัƒัŽ ะฒะตั€ัะธัŽ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั…, ะณะดะต ะทะฐะฟะธัะธ ัƒะถะต ะฝะตั‚.
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn3);
// ะฃะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ะทะฐะฟะธััŒ ะฟะพ ะธัะบะพะผะพะผัƒ ะบะปัŽั‡ัƒ ัƒะถะต ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚.
assert(mdb_get(txn3, dbi, &key, &val) == MDB_NOTFOUND);
// ะ—ะฐะฒะตั€ัˆะฐะตะผ ั‚ั€ะฐะฝะทะฐะบั†ะธัŽ.
mdb_txn_abort(txn3);

// ะฃะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ะฒ ั€ะฐะผะบะฐั… ะฒั‚ะพั€ะพะน ั‚ั€ะฐะฝะทะฐะบั†ะธะธ, ะพั‚ะบั€ั‹ั‚ะพะน ะฝะฐ ะผะพะผะตะฝั‚
// ััƒั‰ะตัั‚ะฒะพะฒะฐะฝะธั ะทะฐะฟะธัะธ ะฒ ะฑะฐะทะต ะดะฐะฝะฝั‹ั…, ะตั‘ ะฒัั‘ ะตั‰ั‘ ะผะพะถะฝะพ ะฝะฐะนั‚ะธ ะฟะพ ะบะปัŽั‡ัƒ.
assert(mdb_get(txn2, dbi, &key, &val) == MDB_SUCCESS);
// ะŸั€ะพะฒะตั€ัะตะผ, ั‡ั‚ะพ ะฟะพ ะบะปัŽั‡ัƒ ะฟะพะปัƒั‡ะตะฝ ะฝะต ะฐะฑั‹ ะบะฐะบะพะน ะผัƒัะพั€, ะฐ ะฒะฐะปะธะดะฝั‹ะต ะดะฐะฝะฝั‹ะต.
assert(*(int *)val.mv_data == 997);
// ะ—ะฐะฒะตั€ัˆะฐะตะผ ั‚ั€ะฐะฝะทะฐะบั†ะธัŽ, ั€ะฐะฑะพั‚ะฐัŽั‰ะตะน ั…ะพั‚ัŒ ะธ ั ัƒัั‚ะฐั€ะตะฒัˆะตะน, ะฝะพ ะบะพะฝัะธัั‚ะตะฝั‚ะฝะพะน ะฑะฐะทะพะน ะดะฐะฝะฝั‹ั….
mdb_txn_abort(txn2);

เบ‚เป‰เบญเบเบ‚เปเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบก trick เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš SQLite เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™.

Multiversion เป€เบญเบปเบฒเบชเบดเบ”เบ—เบดเบ›เบฐเป‚เบซเบเบ”เบ”เบตเป†เบกเบฒเบชเบนเปˆเบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ iOS. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบšเบซเบ™เป‰เบฒเบˆเปเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Mail.ru Cloud เป€เบŠเบฑเปˆเบ™เบเบฒเบ™เป‚เบซเบผเบ”เป€เบ™เบทเป‰เบญเบซเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฒเบเบ„เบฑเบ‡เบชเบทเปˆเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš. เบ”เป‰เบงเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบ”เบต, เบฅเบนเบเบ„เป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบฎเบนเบšเบซเบผเบฒเบเบฎเบนเบšเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ”เบฒเบงโ€‹เป‚เบซเบผเบ”โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹ UICollectionView เบ”เป‰เบงเบเป€เบ™เบทเป‰เบญเบซเบฒเบชเบทเปˆเบขเบนเปˆเปƒเบ™เป€เบกเบ„เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบทเบกเบเปˆเบฝเบงเบเบฑเบš 60 fps เปเบฅเบฐเบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เบžเบฒเบšเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰. เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบซเบ™เป‰เบฒเบˆเปเป€เบฅเบทเป‰เบญเบเป†, เบ—เปˆเบฒเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ เบˆเบณ เบเบฑเบ”เบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™ UICollectionViewDataSource.

เบ–เป‰เบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ multiversion เปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบžเบฝเบ‡เปเบ•เปˆเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ›เบฐเบˆเบธเบšเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ snapshot เบ„เบปเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบฑเบ”เบฅเบญเบเบกเบฑเบ™เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบšเบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบทเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบŠเบปเปˆเบงเบ„เบฒเบง. เบ—เบธเบเป†เบงเบดเบ—เบตเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ—เบฑเบ‡เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบ—เบตเปˆเป€เบเบตเบ”เบˆเบฒเบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบงเบฑเบ”เบ–เบธเบเปเปˆเบชเป‰เบฒเบ‡, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒ, เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™ ORM เบŠเป‰เปเบฒเบŠเป‰เบญเบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบŠเบปเปˆเบงเบ„เบฒเบง, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบธเบเบ—เบตเปˆเบกเบตเบฅเบฒเบ„เบฒเปเบžเบ‡เบเบงเปˆเบฒ, เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบšเปเปˆเบชเปเบฒเบ„เบฑเบ™.

เบเบฒเบ™เปเบเป‰เป„เบ‚ multiversion เบ‚เบญเบ‡ LMDB เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบฎเบฑเบเบชเบฒเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบก. เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐ voila - เบˆเบปเบ™เบเปˆเบงเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเป€เบฅเบฑเบ”เบกเบฑเบ™, เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบˆเบฐเบ–เบทเบเปเบเป‰เป„เบ‚. เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเป„เบงเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบกเบทเบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต, เป‚เบ”เบเบšเปเปˆเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™.

เบ•เบปเบงเบเบฐเบžเบดเบš

เบ•เบปเบงเบเบฐเบžเบดเบšเบชเบฐเบซเบ™เบญเบ‡เบเบปเบ™เป„เบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ iterating เป€เบ›เบฑเบ™เบฅเบฐเบšเบฝเบšเปƒเบ™เป„เบฅเบเบฐเบ„เบนเปˆเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เป‚เบ”เบเบœเปˆเบฒเบ™ B-Tree traversal. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบžเบงเบเบกเบฑเบ™, เบกเบฑเบ™เบเปเปˆเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบซเบฑเบ™เป„เบ›เบซเบฒ.

4.2. เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡ abstraction เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เป€เบŠเบฑเปˆเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ—เบดเบ‡เบ‚เบญเบ‡ abstractions เบžเบทเป‰เบ™เบ–เบฒเบ™. เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบŸเบฑเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเปเบฅเบฐเป‚เบŸเบ™เป€เบ”เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเบ•เบปเป‰เบ™เป„เบกเป‰เป‚เบŸเป€เบ”เบตเบ„เบงเบ™เบ–เบทเบเบ›เบฑเบšเปเบ•เปˆเบ‡เปเบกเปˆเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”. เบฎเบนเบšเปเบšเบšเบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ™เบตเป‰เปเบกเปˆเบ™. เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”. เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบฎเบฝเบ‡เบ„เบตเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปเบฅเบฐเป‚เบŸเบ™เป€เบ”เบตเป‰เบ•เปˆเบฒเบ‡เป†เปƒเบ™เปเบšเบšเบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบˆเบฑเบ”เป€เบ›เบฑเบ™เบเบธเปˆเบกเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เป€เบ›เบฑเบ™เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบžเปเปˆเปเบกเปˆ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เป€เบ™เบทเป‰เบญเบซเบฒเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ Windows (เป‚เบŸเป€เบ”เบตเบ—เปเบฒเบญเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบŸเบฅเปŒ, เบ—เบฑเบ‡เบชเบญเบ‡เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš), เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฅเบงเบกเป€เบญเบปเบฒเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบ™เบ„เบต.

เบฎเบนเบšเบžเบฒเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบกเบท, เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบเบฐเปเบˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ byte array เบญเบฒเบ”เบˆเบฐเบ„เป‰เบฒเบเบ„เบท. bytes เบ—เบตเปˆเบกเบตเบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบกเปˆ (เบชเบตเปเบ”เบ‡) เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเบเปˆเบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ”เป‰เบงเบเบ›เบฐเป€เบžเบ” (เบชเบตเบ‚เบฝเบง) เปเบฅเบฐเปƒเบ™เบซเบฒเบ‡เบ—เบตเปˆเบกเบตเบŠเบทเปˆ (เบชเบตเบŸเป‰เบฒ). เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹. เบ„เบต traversing เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบชเบตเปเบ”เบ‡เบ”เบฝเบงเบเบฑเบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰ (เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบ‚เบงเบฒ), เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

Serializing Keys เปเบฅเบฐเบ„เปˆเบฒ

เบงเบดเบ—เบตเบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ serializing เบงเบฑเบ”เบ–เบธเป„เบ”เป‰เบ–เบทเบ invented เปƒเบ™เป‚เบฅเบ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเบทเปˆเบ™เบ™เบญเบเบˆเบฒเบเบ„เบงเบฒเบกเป„เบง, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเป„เบงเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡ - เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบฒเบชเบฒ C. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบธเบ™เปเบˆเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ”เป‰เบงเบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰. NodeKey.

typedef struct NodeKey {โ€‹
    EntityId parentId;โ€‹
    uint8_t type;โ€‹
    uint8_t nameBuffer[256];โ€‹
} NodeKey;

เบšเบฑเบ™โ€‹เบ—เบถเบ NodeKey เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบงเบฑเบ”เบ–เบธ MDB_val เบงเบฒเบ‡เบ•เบปเบงเบŠเบตเป‰เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เปเบฅเบฐเบ„เบดเบ”เป„เบฅเปˆเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ”เป‰เบงเบเบซเบ™เป‰เบฒเบ—เบตเปˆ sizeof.

MDB_val serialize(NodeKey * const key) {
    return MDB_val {
        .mv_size = sizeof(NodeKey),
        .mv_data = (void *)key
    };
}

เปƒเบ™เบšเบปเบ”เบ—เปเบฒเบญเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบžเบฒเบเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ CRUD เป€เบ›เบฑเบ™เบ›เบฑเบ”เปƒเบˆเบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™. เบฅเบฐเบซเบฑเบ”เบŸเบฑเบ‡เบŠเบฑเบ™ serialize เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ LMDB เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เป€เบกเบทเปˆเบญเปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบเปƒเบซเบกเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. array byte เบ‚เบฒเป€เบ‚เบปเป‰เบฒเบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบตเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ stack เบ—เปเบฒเบญเบดเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบ dumped เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™. เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบžเบฒเบเปƒเบ™ LMDB, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”เป‚เบ”เบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ iOS - เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆ stack memory เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเป„เบ›เบซเบฒเปเบœเปˆเบ™!

เบเบฒเบ™เบชเบฑเปˆเบ‡เบเบฐเปเบˆเบ”เป‰เบงเบเบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบ„เบนเปˆ

เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบดเป€เบชเบ”เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบš. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบšเปเปˆเบฎเบนเป‰เบซเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบซเบกเบฒเบเบ‚เบญเบ‡ bytes เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเบฑเบ™เบˆเบธ, เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบญเบ เป€เปœเบทเบญ เบˆเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบเบฐเปเบˆเปƒเบ™ เบ„เบณ เบชเบฑเปˆเบ‡ lexicographic, เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš byte-by-byte. เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบกเบฑเบ™โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เป‚เบเบ™โ€‹เบซเบ™เบงเบ”โ€‹เบ”เป‰เบงเบโ€‹เบ‚เบงเบฒเบ™โ€‹เบŸเบฑเบโ€‹. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‡เปˆเบฒเบเบ”เบฒเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบเบญเบกเบฎเบฑเบš. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบกเปˆเบ™เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบชเบญเบ‡เบชเบฒเบก rakes เบเบฐเปเบˆเบเบเบฐเบˆเบฒเบเป„เบ›เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ™เบตเป‰.

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบˆเบทเปˆเปเบกเปˆเบ™เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™ Apple เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ•เบปเบงเปเบ› integer เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบฎเบนเบšเปเบšเบš Endian เบ™เป‰เบญเบ. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ byte เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบˆเบฐเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบŠเป‰เบฒเบ, เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบฅเบฝเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš byte-by-byte. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบŠเบธเบ”เบ‚เบญเบ‡เบ•เบปเบงเป€เบฅเบเบˆเบฒเบ 0 เบซเบฒ 511 เบˆเบฐเบชเป‰เบฒเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰.

// value (hex dump)
000 (0000)
256 (0001)
001 (0100)
257 (0101)
...
254 (fe00)
510 (fe01)
255 (ff00)
511 (ff01)

เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ•เป‰เบญเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ„เบตเปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบš byte-byte. เบซเบ™เป‰เบฒเบ—เบตเปˆเบˆเบฒเบเบ„เบญเบšเบ„เบปเบงเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™ hton* (เป‚เบ”เบโ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐ htons เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเป€เบฅเบ double-byte เบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡).

เบฎเบนเบšเปเบšเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡ strings เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก, เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เบ—เบฑเบ‡เบซเบกเบปเบ” เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”. เบ–เป‰เบฒ semantics เบ‚เบญเบ‡ strings, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบญเบฒเบ”เบˆเบฐเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡ byte เบ•เปเปˆเบ•เบปเบงเบญเบฑเบเบชเบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบเปเปˆเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ–เบดเป‰เบกเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™.

เบชเบดเปˆเบ‡เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™เปƒเบˆเปเบกเปˆเบ™ เบซเบผเบฑเบโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹ เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก compiler. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒ, bytes เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ—เบปเปˆเบ‡เบ™เบฒ, เป€เบŠเบดเปˆเบ‡, เปเบ™เปˆเบ™เบญเบ™, breaks byte-byte sorting. เป€เบžเบทเปˆเบญเบเปเบฒเบˆเบฑเบ”เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบเบฒเบ”เบ—เบปเปˆเบ‡เบ™เบฒเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”, เบฎเบฑเบเบชเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบขเบนเปˆเปƒเบ™เปƒเบˆ, เบซเบผเบทเบ™เปเบฒเปƒเบŠเป‰เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเปƒเบ™เบเบฒเบ™เบ›เบฐเบเบฒเบ”เป‚เบ„เบ‡เบชเป‰เบฒเบ‡. packed.

เบเบฒเบ™เบชเบฑเปˆเบ‡เบเบฐเปเบˆเบ”เป‰เบงเบเบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบžเบฒเบเบ™เบญเบ

เป€เบซเบ”เบœเบปเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบซเบผเบฑเบเบญเบฒเบ”เบˆเบฐเบชเบฑเบšเบชเบปเบ™เป€เบเบตเบ™เป„เบ›เบชเบณเบฅเบฑเบšเบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบ„เบนเปˆ. เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเป€เบซเบ”เบœเบปเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบชเบฒเบ‚เบฒเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบžเบฒเบเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เบตเบชเปเบฒเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ.

typedef struct NodeKey {โ€‹
    EntityId parentId;โ€‹
    uint8_t type;โ€‹
    uint8_t nameBuffer[256];โ€‹
} NodeKey;

เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เบกเบฑเบ™, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”, เบกเบฑเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›. buffer เบชเปเบฒเบฅเบฑเบšเบŠเบทเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ–เบดเบ‡ 256 bytes, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเป„เบŸเบฅเปŒเปเบฅเบฐเบŠเบทเปˆเป‚เบŸเบ™เป€เบ”เบตเบšเปเปˆเบ„เปˆเบญเบเบˆเบฐเป€เบเบตเบ™ 20-30 เบ•เบปเบงเบญเบฑเบเบชเบญเบ™.

เบซเบ™เบถเปˆเบ‡เปƒเบ™เป€เบ•เบฑเบเบ™เบดเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™เป€เบžเบทเปˆเบญ "เบ•เบฑเบ”" เบกเบฑเบ™เบเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ•เบปเบงเบˆเบดเบ‡. เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ„เบงเบฒเบกเบเบฒเบงเบ•เบปเบงเปเบ›เบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ buffer เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เปเบฅเบฐเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ•เบปเบงเปเบ›เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. NodeKey เบ–เบทเบโ€‹เบซเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹.

typedef struct NodeKey {โ€‹
    EntityId parentId;โ€‹
    uint8_t type;โ€‹
    uint8_t nameLength;โ€‹
    uint8_t nameBuffer[256];โ€‹
} NodeKey;

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ serializing, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธ sizeof เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ„เบงเบฒเบกเบเบฒเบงเบ„เบปเบ‡เบ—เบตเปˆเบšเบงเบเบเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเปƒเบŠเป‰เบ•เบปเบงเบˆเบดเบ‡เบ‚เบญเบ‡ buffer เป„เบ”เป‰.

MDB_val serialize(NodeKey * const key) {
    return MDB_val {
        .mv_size = offsetof(NodeKey, nameBuffer) + key->nameLength,
        .mv_data = (void *)key
    };
}

เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™ refactoring, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆ occupied เป‚เบ”เบเบเบฐเปเบˆ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™ nameLength, เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบ–เบฒเบ™เบชเบญเบ‡เบšเปเปˆเป€เปเบฒเบฐเบชเบปเบกเบเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบซเบผเบฑเบเบญเบตเบเบ•เปเปˆเป„เบ›. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ—เบ™เบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡, เบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบŠเบทเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ›เบฑเบ”เปƒเบˆเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เบญเบ‡เบŠเบทเปˆเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

LMDB เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ mdb_set_compare เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเป„เบ”เป‰เบฎเบฑเบšเบชเบญเบ‡เบเบฐเปเบˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ–เบฒเบ™เบชเบญเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบขเบนเปˆเบ—เบตเปˆเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš: เปœเป‰เบญเบเบเบงเปˆเบฒ (-1), เบซเบผเบฒเบเบเบงเปˆเบฒ (1) เบซเบผเบทเป€เบ—เบปเปˆเบฒเบเบฑเบš (0). Pseudocode เบชเปเบฒเบฅเบฑเบš NodeKey เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ.

int compare(MDB_val * const a, MDB_val * const b) {โ€‹
    NodeKey * const aKey = (NodeKey * const)a->mv_data;โ€‹
    NodeKey * const bKey = (NodeKey * const)b->mv_data;โ€‹
    return // ...
}โ€‹

เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบเบฐเปเบˆเบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบตเบ›เบฐเป€เบžเบ”เบ”เบฝเบงเบเบฑเบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, เบเบฒเบ™เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เป„เบšเบ•เปŒเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบซเบผเบฑเบเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบ•เบฒเบกเบเบปเบ”เปเบฒเบ. เบกเบต nuance เบซเบ™เบถเปˆเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบเปˆเบญเบ "Reading Records".

Serializing เบ„เปˆเบฒ

LMDB เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบเบฑเบšเบเบฐเปเบˆเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰. เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เปเบกเปˆเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบ‚เบญเบšเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเบ™เปเบฒเปƒเบŠเป‰, เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบœเบนเป‰เบ›เบฝเบšเบ—เบฝเบš. เปƒเบ™เป‚เบฅเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก, เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบ„เบนเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ„เบงเบ™เบˆเบฐเบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบ›เบฝเบšเบ—เบฝเบšเบเบฐเปเบˆ, เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ•เบปเบงเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ deserializing เบเบฐเปเบˆเปƒเบ™เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป„เบงเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบˆเบฐเป„เบงเป„เบ”เป‰.

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ (เบกเบนเบ™เบ„เปˆเบฒ). เบเบฒเบ™เบ›เปˆเบฝเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฒเบเบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™ byte เป€เบ›เบฑเบ™เบงเบฑเบ”เบ–เบธเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเป‰เบงเป‚เบ”เบเบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบกเบฑเบ™เปƒเบ™เบซเบ™เป‰เบฒเบˆเป. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบšเปเปˆเบ„เปˆเบญเบ, เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเป„เบงเบชเปเบฒเบฅเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™, เปเบฅเบฐเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบญเบดเบ”เบชเบฐเบซเบผเบฐเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบ. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญ serialize metadata เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ”เบฒเบงเป‚เบซเบผเบ”, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰. NSKeyedArchiver.

NSData *data = serialize(object);โ€‹
MDB_val value = {โ€‹
    .mv_size = data.length,โ€‹
    .mv_data = (void *)data.bytesโ€‹
};

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบตเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฑเบ‡เบชเปเบฒเบ„เบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบกเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบ metaformation เบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ‚เบญเบ‡เป€เบกเบ„เบœเบนเป‰เปƒเบŠเป‰, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ–เบดเป‰เบกเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ. เบˆเบธเบ”โ€‹เป€เบ”เบฑเปˆเบ™โ€‹เบ‚เบญเบ‡โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เปเบ—เบ™ serialized เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เปเบกเปˆเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡โ€‹เบ—เบตเปˆโ€‹เบงเปˆเบฒโ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เปเบšเบšโ€‹เบˆเปเบฒโ€‹เบฅเบญเบ‡โ€‹เป‚เบ”เบโ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบŠเบฑเป‰เบ™โ€‹เบฎเบฝเบ™โ€‹.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เปƒเบ™เบžเบฒเบชเบฒ C, เบ‚เบปเบ‡เป€เบ‚เบ”เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ heirs เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ‚เบญเบ‡เบชเบฐเบซเบฐเบžเบฑเบ™เบ›เบฐเป€เบžเบ”. เป€เบ™เบทเป‰เบญเปƒเบ™เบ•เบปเบงเบˆเบดเบ‡เบ‚เบญเบ‡เบชเบฐเบซเบฐเบžเบฑเบ™เปเบกเปˆเบ™เป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบ›เบฐเป€เบžเบ”เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™.

typedef struct NodeValue {โ€‹
    EntityId localId;โ€‹
    EntityType type;โ€‹
    union {โ€‹
        FileInfo file;โ€‹
        DirectoryInfo directory;โ€‹
    } info;โ€‹
    uint8_t nameLength;โ€‹
    uint8_t nameBuffer[256];โ€‹
} NodeValue;โ€‹

เป€เบžเบตเปˆเบกโ€‹เปเบฅเบฐโ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹

เบฅเบฐเบซเบฑเบ” serialized เปเบฅเบฐเบกเบนเบ™เบ„เปˆเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบฎเป‰เบฒเบ™. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆ mdb_put.

// key ะธ value ะธะผะตัŽั‚ ั‚ะธะฟ MDB_valโ€‹
mdb_put(..., &key, &value, MDB_NOOVERWRITE);

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เบซเบผเบทเบซเป‰เบฒเบกเบšเปเปˆเปƒเบซเป‰เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบเบญเบฑเบ™เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบ”เบฝเบงเบเบฑเบ™. เบ–เป‰เบฒเบเบฒเบ™เบŠเปเป‰เบฒเบŠเป‰เบญเบ™เบ‚เบญเบ‡เบเบฐเปเบˆเบ–เบทเบเบซเป‰เบฒเบก, เป€เบกเบทเปˆเบญเปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบซเบผเบทเบšเปเปˆ. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ fraying เบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เป‰เบญเบ‡เบเบฑเบ™เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เบˆเบฒเบเบกเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบฅเบฐเบšเบธเบ—เบธเบ‡. NOOVERWRITEเบ—เบตเปˆเบขเบนเปˆ

เบเบฒเบ™เบญเปˆเบฒเบ™เบฅเบฒเบเบเบฒเบ™

เป€เบžเบทเปˆเบญเบญเปˆเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ™ LMDB, เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ mdb_get. เบ–เป‰เบฒเบ„เบนเปˆเบ„เบต-เบ„เปˆเบฒเบ–เบทเบเบชเบฐเปเบ”เบ‡เป‚เบ”เบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ–เบดเป‰เบกเป„เบงเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰.

NodeValue * const readNode(..., NodeKey * const key) {โ€‹
    MDB_val rawKey = serialize(key);โ€‹
    MDB_val rawValue;โ€‹
    mdb_get(..., &rawKey, &rawValue);โ€‹
    return (NodeValue * const)rawValue.mv_data;โ€‹
}

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™ serialization เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™ dump เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบˆเบฑเบ”เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบกเบฒเบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™ mdb_get เบ•เบปเบงเบŠเบตเป‰เป€เบšเบดเปˆเบ‡เปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเบขเบนเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ virtual เบšเปˆเบญเบ™เบ—เบตเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบเบฒเบ™เบชเบฐเปเบ”เบ‡ byte เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ ORM เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบนเบ‡เบซเบผเบฒเบเป€เบเบทเบญเบšเบšเปเปˆเป€เบชเบเบ„เปˆเบฒ. เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบ‡เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบทเปˆเบˆเปเบฒเบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบกเบฑเบ™.

  1. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบกเบนเบ™เบ„เปˆเบฒเปเบกเปˆเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบเบฑเบ‡เบ„เบปเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบˆเบปเบ™เบเปˆเบงเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ–เบทเบเบ›เบดเบ”. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบซเบ™เป‰เบฒ B-tree เบ—เบตเปˆเบงเบฑเบ”เบ–เบธเบ•เบฑเป‰เบ‡เบขเบนเปˆ, เบ‚เบญเบšเปƒเบˆเบเบฑเบšเบซเบผเบฑเบเบเบฒเบ™ copy-on-write, เบเบฑเบ‡เบ„เบปเบ‡เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบญเป‰เบฒเบ‡เบญเบตเบ‡เป‚เบ”เบเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒ. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบžเบงเบเบกเบฑเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบซเบ™เป‰เบฒเบ•เปˆเบฒเบ‡เป†เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ„เบทเบ™เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ. เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบงเบฑเบ”เบ–เบธเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบขเบนเปˆเบฅเบญเบ”เบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบ.
  2. โ€‹โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹, เบ•เบปเบงโ€‹เบŠเบตเป‰โ€‹เป„เบ›โ€‹เป€เบ–เบดเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบˆเบปเบ™โ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ”เบฑเบ”โ€‹เปเบเป‰โ€‹เบ„เบฑเป‰เบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ” (เบ‚เบฝเบ™โ€‹เบซเบผเบทโ€‹เบฅเบถเบšโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹)โ€‹.
  3. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ NodeValue เบšเปเปˆเป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš, เปเบ•เปˆเบ–เบทเบเบ•เบฑเบ”เบญเบญเบ (เป€เบšเบดเปˆเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบเปˆเบญเบ โ€œเบเบฒเบ™เบชเบฑเปˆเบ‡เบเบฐเปเบˆเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบžเบฒเบเบ™เบญเบโ€), เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบปเปˆเบ‡เบ™เบฒเบ‚เบญเบ‡เบกเบฑเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบžเบœเปˆเบฒเบ™เบ•เบปเบงเบŠเบตเป‰. เบชเบดเปˆเบ‡เบ—เบตเปˆ เบชเบณ เบ„เบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบกเบฑเบ™!
  4. เบžเบฒเบเปƒเบ•เป‰เบชเบฐเบžเบฒเบšเบเบฒเบ™เปƒเบ”เป†เบšเปเปˆเบ„เบงเบ™เบ”เบฑเบ”เปเบ›เบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ mdb_put. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบญเบฑเบ™เบ™เบตเป‰เบเบฒเบเบ›เบฒเบ™เปƒเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ™เบตเป‰เบ•เบฑเป‰เบ‡เบขเบนเปˆเปเบกเปˆเบ™เปเบœเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ”เบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.
  5. Remap เป„เบŸเบฅเปŒเป„เบ›เบซเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบฐเบซเบ™เบฒเบ”เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบนเบ‡เบชเบธเบ”เป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ mdb_env_set_map_size invalidates เบ—เบธเบฅเบฐเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบŠเบตเป‰เป„เบ›เบซเบฒเบงเบฑเบ”เบ–เบธเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบฅเบฑเบเบชเบฐเบ™เบฐเบญเบทเปˆเบ™เปเบกเปˆเบ™ insidious เบชเบฐเบ™เบฑเป‰เบ™เบเบฒเบ™เป€เบ›เบตเบ”เป€เบœเบตเบเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบงเบฑเบเบญเบทเปˆเบ™. เปƒเบ™เบšเบปเบ”เบเปˆเบฝเบงเบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰ B, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบซเป‰เปเบœเบ™เบงเบฒเบ”เบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ. เบกเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ™เบตเป‰เบงเปˆเบฒเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ buffer เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™ serialized เบชเบฒเบกเบฒเบ” arbitrary เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰, เบ•เบปเบงเบŠเบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ MDB_val เปเบฅเบฐเบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เบกเบฑเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™ unaligned เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบปเปˆเบงเป„เบ›. เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เบšเบฒเบ‡เบŠเบดเบš (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ iOS เบ™เบตเป‰เปเบกเปˆเบ™ armv7) เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบซเบผเบฒเบเบซเบผเบฒเบเบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบซเบผเบท, เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ‚เบฐเบซเบ™เบฒเบ”เบšเบดเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš (. เบชเปเบฒเบฅเบฑเบš armv7 เบกเบฑเบ™เปเบกเปˆเบ™ 32 bits). เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เป€เบŠเบฑเปˆเบ™: *(int *foo)0x800002 เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เปเบกเปˆเบ™โ€‹เป€เบ—เบปเปˆเบฒโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบซเบ™เบตโ€‹เปเบฅเบฐโ€‹เบ™เปเบฒโ€‹เป„เบ›โ€‹เบชเบนเปˆโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เปเบฒโ€‹เบ•เบฑเบ”โ€‹เบชเบดเบ™โ€‹ EXC_ARM_DA_ALIGN. เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบซเบผเบตเบเบฅเป‰เบฝเบ‡เบŠเบฐเบ•เบฒเบเปเบฒเบ—เบตเปˆเป‚เบชเบเป€เบชเบปเป‰เบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.

เบ—เปเบฒเบญเบดเบ”เบ•เบปเป‰เบกเบฅเบปเบ‡เป„เบ›เบซเบฒเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเบ‚เปเป‰เบกเบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบ•เบปเบงเบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡เบ™เบตเป‰เบˆเบฐเบ–เบทเบเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

int compare(MDB_val * const a, MDB_val * const b) {
    NodeKey aKey, bKey;
    memcpy(&aKey, a->mv_data, a->mv_size);
    memcpy(&bKey, b->mv_data, b->mv_size);
    return // ...
}

เบญเบตเบเบงเบดเบ—เบตเปœเบถเปˆเบ‡เบ„เบทเบเบฒเบ™เปเบˆเป‰เบ‡เปƒเบซเป‰เบœเบนเป‰เบชเบฑเบ‡เบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบฅเปˆเบงเบ‡เปœเป‰เบฒเบงเปˆเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ„เปˆเบฒเบซเบผเบฑเบเบญเบฒเบ”เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบ•เบฒเบกเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ. aligned(1). เปƒเบ™ ARM เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ”เบฝเบงเบเบฑเบ™ เบšเบฑเบ™เบฅเบธ เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบšเบฑเบ™เบˆเบธ. เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบกเบฑเบ™เบเบฑเบ‡เบŠเปˆเบงเบเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบเบกเบฑเบ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ. เบ›เบฐเป€เบžเบ” เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ‚เปเป‰เบกเบนเบ™.

typedef struct __attribute__((packed)) NodeKey {
    uint8_t parentId;
    uint8_t type;
    uint8_t nameLength;
    uint8_t nameBuffer[256];
} NodeKey;

เป„เบฅเบเบฐเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบŠเป‰เบณเปƒเบ™เบเบธเปˆเบกเบšเบฑเบ™เบ—เบถเบ, LMDB เบชเบฐเปœเบญเบ‡เบ•เบปเบงเบŠเบตเป‰เบ•เบปเบงเบเบฐเบžเบดเบš. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบต metadata cloud เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ.

เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบฅเบฒเบเบเบฒเบ™เป„เบŸเบฅเปŒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบ„เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป„เบŸเบฅเปŒเปเบฅเบฐเป‚เบŸเบ™เป€เบ”เบตเป‰เบฅเบนเบเบ‚เบญเบ‡เบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡. เปƒเบ™เบžเบฒเบเบเปˆเบญเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบฎเบฝเบ‡เบ„เบต NodeKey เบ”เบฑเปˆเบ‡ เบ™เบฑเป‰เบ™ เบžเบงเบ เป€เบ‚เบปเบฒ เป€เบˆเบปเป‰เบฒ เป„เบ”เป‰ เบ–เบทเบ เบฅเปเบฒ เบ”เบฑเบš เบ•เบปเป‰เบ™ เบ•เป เป‚เบ”เบ ID เบ‚เบญเบ‡ เบฅเบฐ เบšเบปเบš เบžเปเปˆ เปเบกเปˆ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เป€เบ•เบฑเบเบ™เบดเบ, เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เบถเบ‡เป€เบญเบปเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป‚เบŸเบ™เป€เบ”เบตเบกเบฒเบฅเบปเบ‡เป€เบžเบทเปˆเบญเบงเบฒเบ‡เบ•เบปเบงเบเบฐเบžเบดเบšเบขเบนเปˆเปƒเบ™เป€เบ‚เบ”เปเบ”เบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡เบเบธเปˆเบกเบ‚เบญเบ‡เบ„เบตเบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบซเป‰เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ iterating เบเบฑเบšเป€เบ‚เบ”เปเบ”เบ™เบ•เปˆเปเบฒ.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบ‚เบญเบšเป€เบ‚เบ”เป€เบ—เบดเบ‡เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เป‚เบ”เบเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ•เบปเบงเบเบฐเบžเบดเบšเบ–เบทเบเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบฐเปเบˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ•เบทเปˆเบกเบญเบตเบเบˆเบปเบ™เบเปˆเบงเบฒเบเบฐเปเบˆเบ—เบตเปˆเบกเบตเบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบžเปเปˆเปเบกเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบก. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบต 2 เบ‚เปเป‰เป€เบชเบเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡:

  1. เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เปƒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเป€เบชเบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ, เบ•เบฒเบกเบ—เบตเปˆเบฎเบนเป‰, เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰ B, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปƒเบ™เป€เบงเบฅเบฒ logarithmic.
  2. เป„เบฎเป‰เบ›เบฐเป‚เบซเบเบ”, เบ—เบธเบเบซเบ™เป‰เบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเปเบกเปˆเบ™เบ–เบทเบเบเบปเบเบˆเบฒเบเป„เบŸเบฅเปŒเป„เบ›เบซเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เบปเป‰เบ™เบ•เป, เป€เบŠเบดเปˆเบ‡เบกเบตเบฅเบฒเบ„เบฒเปเบžเบ‡เบ—เบตเปˆเบชเบธเบ”.

เป‚เบŠเบเบ”เบต, LMDB API เบชเบฐเบซเบ™เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบเบฒเบ™เบงเบฒเบ‡เบ•เบปเบงเบเบฐเบžเบดเบšเปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก parentId เบˆเบฐเป€เบ—เบปเปˆเบฒเบเบฑเบš 2, เปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบชเบนเบ™. เบเบฐเปเบˆเบ—เบตเปˆเป€เบ•เบฑเบกเป„เบ›เบšเบฒเบ‡เบชเปˆเบงเบ™เปเบกเปˆเบ™เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบŸเบฑเบ‡เบŠเบฑเบ™ mdb_cursor_get เบŠเบตเป‰โ€‹เบšเบญเบโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹ MDB_SET_RANGEเบ—เบตเปˆเบขเบนเปˆ

NodeKey upperBoundSearchKey = {โ€‹
    .parentId = 2,โ€‹
    .type = 0,โ€‹
    .nameLength = 0โ€‹
};โ€‹
MDB_val value, key = serialize(upperBoundSearchKey);โ€‹
MDB_cursor *cursor;โ€‹
mdb_cursor_open(..., &cursor);โ€‹
mdb_cursor_get(cursor, &key, &value, MDB_SET_RANGE);

เบ–เป‰เบฒเป€เบ‚เบ”เปเบ”เบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡เบเบธเปˆเบกเบ‚เบญเบ‡เบเบฐเปเบˆเบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบกเบฑเบ™เบˆเบปเบ™เบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบปเบšเบเบฑเบ™เบซเบผเบทเบเบฐเปเบˆเบžเบปเบšเบเบฑเบ™. parentIdเบซเบผเบทเบเบฐเปเบˆเบˆเบฐเบšเปเปˆเปเบปเบ”.

do {โ€‹
    rc = mdb_cursor_get(cursor, &key, &value, MDB_NEXT);โ€‹
    // processing...โ€‹
} while (MDB_NOTFOUND != rc && // check end of tableโ€‹
         IsTargetKey(key));    // check end of keys groupโ€‹โ€‹

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเป‚เบ”เบเปƒเบŠเป‰ mdb_cursor_get, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”, เปเบ•เปˆเบเบฑเบ‡เบกเบตเบกเบนเบ™เบ„เปˆเบฒ. เบ–เป‰เบฒ, เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เป€เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡, เปƒเบ™เบšเบฑเบ™เบ”เบฒเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†, เบ—เบปเปˆเบ‡เบ™เบฒเบˆเบฒเบเบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบ—เปˆเบฒเบ—เบฒเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

4.3. เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

เป‚เบ”เบเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบธเบเบ”เป‰เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบญเบญเบเปเบšเบšเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฝเบง. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป„เบ”เป‰เบงเปˆเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบกเปˆเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ›เบฐเป€เบžเบ”เบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบ„เบนเปˆเบ„เบตเบกเบนเบ™เบ„เปˆเบฒ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบฐเปเบ”เบ‡เบ„เบตเป€เบ›เบฑเบ™เบฎเบนเบšเบชเบตเปˆเบซเบฅเปˆเบฝเบกเปเบฅเบฐเบ„เปˆเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป€เบ›เบฑเบ™ parallelepiped, เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเปเบœเบ™เบงเบฒเบ”เบžเบฒเบšเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

'' '"

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เปƒเบ™เบŠเบตเบงเบดเบ”เบˆเบดเบ‡เบกเบฑเบ™เบšเปเปˆเบ„เปˆเบญเบเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป‚เบ”เบเบเบฒเบ™เบ™เบญเบ‡เป€เบฅเบทเบญเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบ. เป€เบฅเบทเป‰เบญเบเป†เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบต, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ•เป‰เบญเบ‡เบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบผเบฒเบ, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป€เบฅเบทเบญเบเปƒเบ™เบžเบงเบเบกเบฑเบ™เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ. เบžเบฒเบเบชเบธเบ”เบ—เป‰เบฒเบเบ™เบตเป‰เปเบกเปˆเบ™เบญเบธเบ—เบดเบ”เปƒเบซเป‰เบเบฑเบšเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบต

เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ„เบฅเบฒเบงเบกเบตเบชเปˆเบงเบ™ "Gallery". เบกเบฑเบ™เบชเบฐเปเบ”เบ‡เป€เบ™เบทเป‰เบญเบซเบฒเบชเบทเปˆเบˆเบฒเบเบŸเบฑเบ‡เบ—เบฑเบ‡เปเบปเบ”, เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเบงเบฑเบ™เบ—เบต. เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบฅเบทเบญเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบซเป‰เบ”เบตเบ—เบตเปˆเบชเบธเบ”, เบ•เปเปˆเป„เบ›เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเป‰เบ™เบ•เป, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบซเบกเปˆเบ—เบตเปˆเบกเบตเบ›เบฐเป€เบžเบ”เปƒเบซเบกเปˆ. เบžเบงเบเบกเบฑเบ™เบˆเบฐเบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบงเบฑเบ™เบ—เบตเบ—เบตเปˆเป„เบŸเบฅเปŒเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ•เบปเป‰เบ™เบ•เป. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฐเปเบˆเปƒเบซเบกเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฐเปเบˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเป‰เบ™เบ•เป, เบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฐเปเบˆเบ”เบฑเบ”เบชเบฐเบ™เบต. เปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเปƒเบ™เบชเบตเบชเบปเป‰เบก.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เป€เบžเบทเปˆเบญเปเบเบเบเบฐเปเบˆเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบญเบญเบเบˆเบฒเบเบเบฑเบ™เบžเบฒเบเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™, tableId เบ”เป‰เบฒเบ™เป€เบ•เบฑเบเบ™เบดเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบชเบนเบ‡เบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบฑเบ™เบฅเบธเบเบฒเบ™เบˆเบฑเบ”เบเบธเปˆเบกเบ‚เบญเบ‡เบ„เบตเบ—เปเบฒเบญเบดเบ”เป‚เบ”เบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปเบฅเบฐเบžเบฒเบเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ - เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฐเปเบˆเบ”เบฑเบ”เบชเบฐเบ™เบตเบญเป‰เบฒเบ‡เบญเบตเบ‡เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฐเปเบˆเบซเบผเบฑเบ. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบเบปเบ‡เป„เบ›เบเบปเบ‡เบกเบฒเบ‚เบญเบ‡เบŠเบฑเบšเบชเบดเบ™เบ™เบตเป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบกเบฑเบ™เบเบฑเบšเบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบเบธเบ™เปเบˆเบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบˆเบฒเบเบซเบผเบฒเบเบˆเบธเบ”:

  1. เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบญเบปเบฒเบžเบทเป‰เบ™เบ—เบตเปˆ, metadata เบชเบฒเบกเบฒเบ”เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™.
  2. เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡ metadata เบ‚เบญเบ‡ node, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเป‚เบ”เบเปƒเบŠเป‰เบชเบญเบ‡เบ›เบธเปˆเบก.
  3. เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฅเบฐเบซเบฑเบ”, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบฅเบทเบกเบ›เบฑเบšเบ›เบธเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡เปƒเบ™เบฅเบฐเบซเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ.

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเบดเบ—เบตเบเบฒเบ™เบฅเบปเบšเบฅเป‰เบฒเบ‡เบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

เบฎเบนเบšเปเบšเบšเปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบตเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเป‰เบ™เบ•เป "เบเบฐเปเบˆเป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒ". เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบŠเบทเปˆเบ‚เบญเบ‡เบกเบฑเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™, เบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ”เบฑเบ”เบชเบฐเบ™เบตเปเบกเปˆเบ™เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเบซเบผเบฑเบเบ•เบปเป‰เบ™เบ•เป. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบเปเบฒเบˆเบฑเบ”เบ—เบธเบเบ‚เปเป‰เป€เบชเบเบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ•เบปเป‰เบ™เบ•เป. เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบกเบนเบ™เบ„เปˆเบฒเป‚เบ”เบเบฅเบฐเบซเบฑเบ”เบ”เบฑเบ”เบชเบฐเบ™เบต, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” 2 เบ„เปเบฒเบ–เบฒเบกเป„เบ›เบซเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡. schematically, schema เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบฎเบนเบšเปเบšเบšเบญเบทเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบกเปˆเบ™ "เบเบฐเปเบˆเบŠเป‰เบณเบŠเป‰เบญเบ™". เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบซเป‰เบเบฑเบšเบเบฐเปเบˆ, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆ. เบชเบฐโ€‹เบžเบฒเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOS เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เปƒเบซเป‰โ€‹เป€เบ›เบฑเบ™ fictitiousโ€‹, เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เปเบˆเป‰เบ‡โ€‹เบเบงเปˆเบฒโ€‹.

เบฅเบนเบเบ„เป‰เบฒเบกเบทเบ–เบทเบ„เบฅเบฒเบงเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เป„เบŸเบฅเปŒเปเบฅเบฐเป‚เบŸเบ™เป€เบ”เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบญเบ, เปเบฅเบฐเบกเบตเบซเบผเบฒเบเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ (เบœเบนเป‰เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”, เบกเบตเบชเบดเบ”เบ—เบดเบซเบเบฑเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†), เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบžเบฒเบฅเบฐเบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡. เบšเบฑเบ™เบ—เบถเบเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเป‰เบ™เบ•เปเบเบฑเบšเบกเบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบšเบšเบญเบญเบšเป„เบฅเบ™เปŒ, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบกเบฑเบ™เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡. เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เปเบฒเบกเบฐเบŠเบฒเบ”เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™. เปƒเบ™เปเบœเบ™เบงเบฒเบ”เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เบ„เบตเบ‚เบญเบ‡เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเบซเบ™เป‰เบฒเบ”เป‰เบงเบ "P", เปเบฅเบฐเบ•เบปเบงเบเบถเบ” "propname" เบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบกเบนเบ™เบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐ "เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ".

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

metadata เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ—เบฑเบ‡เบซเบกเบปเบ”, เบชเปเบฒเบฅเบฑเบš sake เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™, เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบชเปˆเบงเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบŠเป‰เปเบฒเบเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเปเบฅเบฐเป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเป‰เบ™เบ•เป. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบŠเป‰เปเบฒเบเบฑเบ™เบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ›เบธเปˆเบก "P" เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ "node ID" เปเบฅเบฐ "timestamp". เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ”เบฑเบ”เบชเบฐเบ™เบต, เบˆเบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เบ•เบปเป‰เบ™เบ•เป, เบˆเบฒเบเบ™เบฑเป‰เบ™, เบชเบธเบ”เบ—เป‰เบฒเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš node metadata.

เบชเบฐโ€‹เบซเบผเบธเบš

เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” LMDB เปƒเบ™เบ—เบฒเบ‡เบšเบงเบ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™, เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ freezes เบซเบผเบธเบ”เบฅเบปเบ‡เป‚เบ”เบ 30%.

เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบธเบเบเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ LMDB เปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ iOS

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป€เบฎเบฑเบ”เป„เบ”เป‰ resonated เป€เบเบตเบ™เบเบงเปˆเบฒเบ—เบตเบกเบ‡เบฒเบ™ iOS. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบซเบ™เบถเปˆเบ‡เปƒเบ™เบžเบฒเบเบชเปˆเบงเบ™ "Files" เบ•เบปเป‰เบ™เบ•เปเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Android เบเบฑเบ‡เป„เบ”เป‰เบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰ LMDB, เปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เป†เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ—เบฒเบ‡. เบžเบฒเบชเบฒ C, เบ—เบตเปˆเป€เบเบฑเบšเบฎเบฑเบเบชเบฒ key-value เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบ›เบฑเบ™เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ—เบตเปˆเบ”เบตเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ›เบฐเบกเบฒเบ™เบกเบฑเบ™เบ‚เป‰เบฒเบกเป€เบงเบ—เบตเปƒเบ™ C ++. เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” C ++ เบ—เบตเปˆเป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบฅเบฐเบซเบฑเบ”เป€เบงเบ—เบตเปƒเบ™ Objective-C เปเบฅเบฐ Kotlin. เบ”เบตเบˆเบดเบ™เบ™เบต เบˆเบฒเบ Dropbox, เปเบ•เปˆเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™