αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž“αŸ…αžšαžŠαžΌαžœαžŸαŸ’αž›αžΉαž€αžˆαžΎαž‡αŸ’αžšαž»αŸ‡αž†αŸ’αž“αžΆαŸ† 2019 αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αžšαž„αŸ‹αž…αžΆαŸ†αž‡αžΆαž™αžΌαžšαž˜αž€αž αžΎαž™αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜ Mail.ru Cloud iOS αŸ” αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αž˜αŸ’αž”αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‡αžΆαž”αŸ‹αž›αžΆαž”αŸ‹αž“αŸƒαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαž€αž˜αŸ’αžšαž“αž·αž„αž’αžŸαž€αž˜αŸ’αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž·αž—αž–αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ Lightning Memory-Mapped Database (LMDB) αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž€αžΆαžαŸ‹αž“αŸαŸ‡ αž™αžΎαž„αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž’αŸ’αž“αž€αž“αžΌαžœαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαžœαžΆαž‡αžΆαž”αž½αž“αž•αŸ’αž“αŸ‚αž€αŸ” αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž…αžΌαžšαž™αžΎαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž αŸαžαž»αž•αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ‚αž›αž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹ αž“αž·αž„αž–αž·αž”αžΆαž€αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž“αžΉαž„αž”αž“αŸ’αžαž–αž·αž…αžΆαžšαžŽαžΆαžŸαžŸαžšαžŸαŸ’αžαž˜αŸ’αž—αž‘αžΆαŸ†αž„αž”αžΈαžŠαŸ‚αž›αž‡αžΆαž”αŸαŸ‡αžŠαžΌαž„αž“αŸƒαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ LMDB: αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† B+-tree αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž…αž˜αŸ’αž›αž„αž›αžΎαž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž–αž αž»αž€αŸ†αžŽαŸ‚αŸ” αž‘αžΈαž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž’αŸ‚αž˜ - αž•αŸ’αž“αŸ‚αž€αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžšαž”αŸ€αž”αžšαž…αž“αžΆ αž“αž·αž„αž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžαžΆαžšαžΆαž„αž‡αžΆαž…αŸ’αžšαžΎαž“ αžšαž½αž˜αž‘αžΆαŸ†αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜αž˜αž½αž™αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ API αžαž˜αŸ’αž›αŸƒαž‚αž“αŸ’αž›αžΉαŸ‡αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αŸ”

αž˜αžΆαžαž·αž€αžΆ

  1. αž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž
  2. αž‘αžΈαžαžΆαŸ†αž„ LMDB
  3. αžŸαžŸαžšαžŸαŸ’αžαž˜αŸ’αž—αž…αŸ†αž“αž½αž“αž”αžΈαž“αŸƒ LMDB
    3.1. αžαŸ’αžšαžΈαž”αžΆαž‘αŸ‚αž“αž›αŸαž 1 αŸ” αž―αž€αžŸαžΆαžšβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž‚αžΌαžŸβ€‹αž•αŸ‚αž“αž‘αžΈβ€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†
    3.2. αžαŸ’αžšαžΈαž”αžΆαž‘αŸ‚αž“ #2. B+ ដើមឈើ
    3.3. αžαŸ’αžšαžΈαž”αžΆαž‘αŸ‚αž“ #3. αž…αž˜αŸ’αž›αž„αž›αžΎαž€αžΆαžšαžŸαžšαžŸαŸαžš
  4. αž€αžΆαžšαžšαž…αž“αžΆαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ API αžαž˜αŸ’αž›αŸƒαž‚αž“αŸ’αž›αžΉαŸ‡
    4.1. αž’αžšαžΌαž”αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“
    4.2. αž‚αŸ†αžšαžΌαžαžΆαžšαžΆαž„
    4.3. αž‚αŸ†αžšαžΌαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αžαžΆαžšαžΆαž„

1. αž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2015 αž™αžΎαž„αž”αžΆαž“αž™αž€αž”αž‰αŸ’αž αžΆαžŠαžΎαž˜αŸ’αž”αžΈαžœαžΆαžŸαŸ‹αžœαŸ‚αž„αžαžΆαžαžΎαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαžΆαžŠαŸ‚αž›αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αž—αžΆαž–αž™αžΊαžαž™αŸ‰αžΆαžœαŸ” αž™αžΎαž„β€‹αž’αŸ’αžœαžΎβ€‹αž“αŸαŸ‡β€‹αžŠαŸ„αž™β€‹αž αŸαžαž»αž•αž›αŸ” αž™αžΎαž„αž”αžΆαž“αž‘αž‘αž½αž›αž€αžΆαžšαžαŸ’αž’αžΌαž‰αžαŸ’αž’αŸ‚αžšαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž‡αžΆαž„αž˜αž»αž“ αžŠαŸ‚αž›αž–αŸαž›αžαŸ’αž›αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžˆαž”αŸ‹αž†αŸ’αž›αžΎαž™αžαž”αž“αžΉαž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ– αž”αŸŠαžΌαžαž»αž„αž˜αž·αž“αž’αžΆαž…αž…αž»αž…αž”αžΆαž“αž‘αŸ αž”αž‰αŸ’αž‡αžΈαž˜αž·αž“αžšαž˜αžΌαžšαŸ”αž›αŸ” αž’αŸ†αž–αžΈαž˜αŸαž€αžΆαž“αž·αž…αž“αŸƒαž€αžΆαžšαžœαžΆαžŸαŸ‹αžœαŸ‚αž„ αž”αžΆαž“αž”αŸ’αžšαžΆαž”αŸ‹ αž“αŸ…αž›αžΎ AvitoTech αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž•αŸ’αžαž›αŸ‹αžαŸ‚αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸαžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαžœαžΆαžŸαŸ‹αžœαŸ‚αž„αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžšαž„αžΌαžαž‘αžΉαž€αžαŸ’αžšαž‡αžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αŸ” αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αžαžŠαŸ‚αž›αž”αžŽαŸ’αžαžΆαž›αž˜αž€αž–αžΈαž€αžΆαžšαž”αž„αŸ’αž€αž€αž‡αžΆαž„αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž»αž“αž–αŸαž›αžŠαžΉαž„αž–αžΈαž€αžΆαžšαž–αž·αžαž“αŸαŸ‡ αžŸαžΌαž…αž“αžΆαž€αžšαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž‚αž»αžŽαž—αžΆαž–αž‚αžΊαž˜αž·αž“αž˜αžΆαž“αž‚αžΆαŸ†αž„αž‘αŸ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž•αŸ’αžαŸ„αžαž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αŸ…αž›αžΎαž€αžΆαžšαž”αž„αŸ’αž€αž€αžŠαŸ„αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαŸ”

αžŠαŸ„αž™αž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹ αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αž„αŸ’αž€αž€ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž…αŸ†αžŽαžΆαž™ αž”αžšαž·αž˜αžΆαžŽ ΠΈ αž‚αž»αžŽαž—αžΆαž– αž€αžΆαžšαžœαž·αž—αžΆαž‚αž’αŸ†αž–αžΈαž αŸαžαž»αž•αž›αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αžŸαžαŸ’αžšαžΌαžœαžŸαŸ†αžαžΆαž“αŸ‹αž”αžΆαž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ - αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž’αž»αž“αž’αŸ’αž„αž“αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž”αŸ’αžšαžαž·αž€αž˜αŸ’αž˜β€‹αž’αž˜αŸ’αž˜αž‡αžΆαžαž·β€‹αž…αŸ†αž–αŸ„αŸ‡β€‹αž—αžΆαž–β€‹αž’αžΆαž˜αŸ‰αžΆαžŸαŸ‹β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž”αŸ†αžŽαž„β€‹αž”αŸ’αžšαžΆαžαŸ’αž“αžΆβ€‹αžŠαŸβ€‹αž€αŸ’αžαŸ…β€‹αž‚αž‚αž»αž€β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αžšαž»αž‰β€‹αžœαžΆβ€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αžŸαŸ’αž‘αŸ’αžšαžΈαž˜β€‹αž€αžΆαžšαž„αžΆαžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž–αž αž»αžαŸ’αžŸαŸ‚ αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžαž½αž’αž„αŸ’αž‚αž‘αž˜αŸ’αž„αž“αŸ‹αžŸαŸ’αžšαžΆαž›αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž§αž‘αŸ’αž‘αž·αžŸαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαž˜αŸ’αžšαž”αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž·αž—αž–αž›αŸ„αž€ iOS αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž–αžΈαžš αž“αŸ…αž›αžΎ Twitter រួម αž“αž·αž„ αž’αžαŸ’αžαž”αž‘αž’αŸ†αž–αžΈ Habre. αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž“αž·αž‘αžΆαž“αžšαžΏαž„αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αž“αŸƒαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŠαŸ‚αž›αž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αž›αžΎαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”β€‹

αž‚αŸ†αžšαžΌαžαž½αž“αŸƒαž’αž„αŸ’αž‚αž€αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆ multithreading αž€αŸ’αž›αžΆαž™αž‡αžΆαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž‘αžΈαž–αžΈαžšαžšαž”αžŸαŸ‹αžœαžΆαŸ” αžœαžαŸ’αžαž»αž‚αŸ†αžšαžΌαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž…αžΌαž›αž…αž·αžαŸ’αžαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž–αŸ’αžšαŸ†αžŠαŸ‚αž“αžŸαŸ’αž‘αŸ’αžšαžΈαž˜αŸ” αž αžΎαž™β€‹αž‚αŸβ€‹αž’αŸ’αžœαžΎβ€‹αž”αŸ‚αž”β€‹αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž–αŸαž›β€‹αžαŸ’αž›αŸ‡β€‹αž αžΎαž™β€‹αž“αŸ…β€‹αž‘αžΈβ€‹αž“αŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžŸαŸ’αž‘αžΎαžšβ€‹αžαŸ‚β€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊαž‡αžΆαž’αžΆαžαž»αž•αŸ’αžŸαŸ†αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αŸ” αž—αžΆαžšαž€αž·αž…αŸ’αž…αž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αž macropattern αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αžŸαž αž‚αŸ’αžšαžΆαžŸαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžœαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžαžΆαžšαžΆαžŸαž˜αŸ’αžαŸ‚αž„ - αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžœαžΆαž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž“αžΉαž„αž˜αž·αž“αž”αž„αŸ’αž€αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž›αŸ†αž”αžΆαž€αžαž·αž…αžαž½αž…αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž–αž αž»αžαŸ’αžŸαŸ‚αŸ” αž‡αžΆαž–αž·αžŸαŸαžŸ αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαžœαžαŸ’αžαž»αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž–αžΈαžœαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž™αŸ‰αžΆαž„αžαž·αž…αž”αŸ†αž•αž»αž αž αžΎαž™αžαžΆαž˜αž§αžαŸ’αžŠαž˜αž‚αžαž·αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžŠαžΉαž„αž αžΎαž™αžαžΆαž€αŸ’αžšαŸ„αž™αž˜αž€αž‘αŸ€αžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž–αžΈαžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ„αž™αž˜αž·αž“αž„αžΆαž€αž‘αŸ…αžšαž€αž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αžšαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αž‡αž“αŸαž›αžΎαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOSαž€αžαŸ’αžαžΆαžŸαŸ†αžαžΆαž“αŸ‹αž‘αžΈαž–αžΈαžšαžŠαŸ‚αž›αž‡αŸ‡αž₯αž‘αŸ’αž’αž·αž–αž›αž›αžΎαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊ Cloud API αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž•αž»αžŸαž‚αŸ†αž“αž·αžαžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž˜αŸαžαžŠαŸ„αž™ git αŸ” αžŠαžΌαž…αž‚αžΆαžαŸ‹αžŠαŸ‚αžš αž™αžΎαž„αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„ Offline-first APIαžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αžŸαž˜αžŸαŸ’αžšαž”αž‡αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“αž–αž–αž€αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž–αž½αž€αž‚αŸαž“αžΉαž„αž”αžΌαž˜αž…αŸαž‰αž“αžΌαžœαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž–αŸαž‰αž›αŸαž‰αž“αŸƒαž–αž–αž€αžαŸ‚αž˜αŸ’αžαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž›αžΎαžŸαž›αž”αŸ‹αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” Alas αž±αž€αžΆαžŸαž“αŸαŸ‡αž“αŸ…αžαŸ‚αž˜αžΆαž“αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž αžΎαž™αž’αžαž·αžαž·αž‡αž“αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αžšαŸ€αž“αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αŸ†αžŽαŸ‡αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‘αŸαŸ” αž˜αžΆαž“αž αŸαžαž»αž•αž›αž‚αŸ„αž›αž”αŸ†αžŽαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αžŠαŸ‚αž›αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž™αžΎαž„αž“αžΉαž„αž‘αž»αž€αžαž„αŸ’αž€αŸ€αž”αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αžαž“αŸ„αŸ‡αž‚αžΊαž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αž‡αžΆαž˜αŸαžšαŸ€αž“αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› API αž“αž·αž™αžΆαž™αžαžΆ "A" αž αžΎαž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž˜αž·αž“αž“αž·αž™αžΆαž™αžαžΆ "B" αž‘αŸαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŸαŸ’αžšαž˜αŸƒαž˜αžΎαž› git αžŠαŸ‚αž›αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‘αžΆαž‰ αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αŸ†αžŽαŸ‡αž‘αŸ…αž“αžΉαž„αžšαžΌαž”αžαžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž–αŸαž‰αž›αŸαž‰αžšαž”αžŸαŸ‹αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž–αŸαž‰αž›αŸαž‰ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αž˜αžΆαž“αž‚αŸ†αž“αž·αžαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž–αž€αŸ” αž’αžαž·αžαž·αž‡αž“αŸ” αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αžΆαž™αžαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžœαžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ‚αž„αž…αŸ‚αž€αž˜αŸ‚αž€αž’αžΆαž„ DOM αž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž–αŸαžαŸŒαž˜αžΆαž“αž˜αŸαžαžΆαž’αŸ†αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αž―αž€αžŸαžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž―αž€αžŸαžΆαžšαž…αŸ†αž“αž½αž“ 500 αž–αžΆαž“αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž–αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αž“αž·αž„αž”αŸ†αž•αŸ’αž›αžΆαž‰αžŠαžΎαž˜αžˆαžΎαž–αžΈαžšαžŠαŸ‚αž›αž˜αžΆαž“αžαŸ’αž“αžΆαŸ†αž„ 1 αž›αžΆαž“αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ’αžšαžΆαž αŸ’αžœαž“αŸƒαžœαžαŸ’αžαž»αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž“αŸ’αž›αžΊαž“αŸαŸ‡ αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ” αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αž·αž“αž”αžΆαž“αž‚αž·αžαž‚αžΌαžšαž–αžΈαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž€αŸαžŠαŸ„αž™ αž€αŸαž“αžΈαžαž·αžœαž·αž’αžΈαž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž”αŸ†αž•αŸ’αž›αžΆαž‰αžœαžαŸ’αžαž»αžαžΌαž…αŸ—αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž’αžŸαŸ‹αž˜αž½αž™αž€αžΆαž€αŸ‹αžŸαŸ’αž’αžΆαžαŸ” αž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž™αžΎαž„αž‡αž½αžŸαž‡αž»αž›αž›αž€αŸ’αžαžŽαŸˆαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžŸαŸ†αžαžΆαž“αŸ‹αž‘αžΈαž–αžΈαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ - αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš CRUD αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαž“αŸƒαžœαžαŸ’αžαž»αŸ”

αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž”αŸ’αžšαž–αŸƒαžŽαžΈαž‡αžΆαž„ αž αžΎαž™αž”αž‰αŸ’αž‡αžΈαž‘αžΆαŸ†αž„αž˜αžΌαž›αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

  1. αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αŸ”
  2. αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αŸ’αžšαžΎαž“αŸ” αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž”αŸ†αžŽαž„αž”αŸ’αžšαžΆαžαŸ’αž“αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžšαžœαžΆαž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ‚αž˜αž‘αžΆαŸ†αž„αžšαžœαžΆαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαŸ†αžαžΆαž“αŸ‹αž“αž·αž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ iOS αž•αž„αžŠαŸ‚αžšαŸ”
  3. αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‡αžΆαžœαžαŸ’αžαž»αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“ ..
  4. αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš CRUD αž‘αŸαŸ”
  5. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž‘αžΉαž€αž’αžΆαžŸαŸŠαžΈαžŠαŸ– αž’αžΆαžαžΌαž˜αž·αž… αž—αžΆαž–αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹ αž—αžΆαž–αž―αž€αŸ„ αž“αž·αž„αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αŸ”
  6. αž›αŸ’αž”αžΏαž“αž›αžΎαž€αžšαžŽαžΈαž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αžαŸ”

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸαŸ‡ SQLite αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž‡αž˜αŸ’αžšαžΎαžŸ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αž½αž”αžŸαŸ€αžœαž—αŸ…αž˜αž½αž™αŸ” "αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ LevelDB". αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαžŠαžΉαž€αž“αžΆαŸ†αžšαž”αžŸαŸ‹αž“αžΆαž„ αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαž„αžΆαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž–αž–αž€αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αž›αž‘αŸ’αž’αž•αž›αž›αžΎαžŸαž–αžΈαž€αžΆαžšαžšαŸ†αž–αžΉαž„αž‘αž»αž€αžŠαŸαž–αŸ’αžšαŸƒαž•αŸ’αžŸαŸƒαž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αž - αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αž“αŸ…αž›αžΎαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž”αž“αŸƒαž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αž”αž‰αŸ’αž‡αžΈαžαž˜αŸ’αžšαŸ€αž”αž“αŸƒαž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ - LMDB αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆαž›αžΏαž“αž‡αžΆαž„ SQLite 10 αžŠαž„αŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

2. αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αžΈαžαžΆαŸ†αž„ LMDB

LMDB αž‚αžΊαž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαžΌαž…αž˜αž½αž™ (αžαŸ’αžšαžΉαž˜αžαŸ‚ 10K αž‡αž½αžš) αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαž”αž”αŸ†αž•αž»αž - αž€αžΆαžšαž•αŸ’αž‘αž»αž€αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž›αžΎαž”αž„αŸ’αž αžΆαž‰αžαžΆαž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” LMDB αž‡αžΆαž˜αž½αž™ SQLite αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž•αž„αžŠαŸ‚αžš αž‡αžΆαž‘αžΌαž‘αŸ…αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‡αžΆαž„ SQLite αžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αž“αžΌαž›αž‘αŸαŸ” αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž—αžΆαž–αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαž‡αžΆαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαž€αžŸαŸ’αžšαž„αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž•αŸ’αž‘αž»αž€αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αžŠαŸƒαž‚αžΌαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆ - BerkeleyDB, LevelDB, Sophia, RocksDB αž‡αžΆαžŠαžΎαž˜αŸ” αž˜αžΆαž“αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸ‚αž› LMDB αžŠαžΎαžšαžαž½αž‡αžΆαžŸαž˜αžΆαžŸαž’αžΆαžαž»αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž•αŸ’αž‘αž»αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ SQLite αŸ” αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž”αŸ‚αž”αž“αŸαŸ‡αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„αž‚αžΊαž“αŸ…αž†αŸ’αž“αžΆαŸ† 2012 αž”αžΆαž“αž…αŸ†αžŽαžΆαž™ αžŠαŸ„αž™ LMDB αž›αŸ„αž€ Howard Chu. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ αž˜αžΎαž›αž‘αŸ…αž–αž·αžαž‡αžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹ αžŠαŸ‚αž›αž‚αŸ†αž“αž·αžαž•αŸ’αžαž½αž…αž•αŸ’αžαžΎαž˜αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž OSS αž αžΎαž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αžΆαžšαž”αž“αŸ’αžαžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αž»αž‚αŸ’αž‚αž›αž“αŸ„αŸ‡αŸ” LumoSQL. αž“αŸ…αžαŸ‚αž˜αž€αžšαžΆαž†αŸ’αž“αžΆαŸ† 2020 αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž‚αžΊ Den Shearer αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰ αžœαžΆαž“αŸ… LinuxConfAu αŸ”

LMDB αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž…αž˜αŸ’αž”αž„αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž‡αŸ†αž–αžΆαž€αŸ‹αžšαžΌαž”αžšαžΆαž„αžšαž”αžŸαŸ‹αžœαžΆαž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ OpenLDAPαžŠαŸ‚αž›αž˜αž·αž“αž–αŸαž‰αž…αž·αžαŸ’αžαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž…αŸ†αž–αŸ„αŸ‡ BerkeleyDB αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαž·αž…αžαž½αž… btreeHoward Chu αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αžαž˜αž½αž™αž“αŸ…αžŸαž˜αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž‚αžΆαžαŸ‹αž”αžΆαž“αž§αž‘αŸ’αž‘αž·αžŸαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαŸαž›αŸ’αž’αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž…αŸ†αž–αŸ„αŸ‡αžšαžΏαž„αž“αŸαŸ‡ αž€αŸαžŠαžΌαž…αž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹ LMDB αŸ” "αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαž“αŸ’αž‘αŸ‡". αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸαž›αŸ’αž’αž“αŸƒαž€αžΆαžšαžŠαžŽαŸ’αžαžΎαž˜αž™αž€αž€αž“αŸ’αž›αŸ‚αž„αžŸαŸ’αžαž»αž€αž‘αž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžŠαŸ„αž™ 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. αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžαžΆαžŸ αž“αž·αž„αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž„αž€αŸ’αž“αž»αž„αŸ”
  2. B+-tree αž‡αžΆαž’αž„αŸ’αž‚αž€αžΆαžšαž“αŸƒαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ”
  3. Copy-on-write αž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš ACID αž“αž·αž„αž–αž αž»αž€αŸ†αžŽαŸ‚αŸ”

៣.៑. αžαŸ’αžšαžΈαž”αžΆαž‘αŸ‚αž“αž›αŸαž 3.1 αŸ” αž―αž€αžŸαžΆαžšβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž‚αžΌαžŸβ€‹αž•αŸ‚αž“αž‘αžΈβ€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†

αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‚αžΊαž‡αžΆαž’αžΆαžαž»αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™ αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ‚αž˜αž‘αžΆαŸ†αž„αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αž”αž‰αŸ’αž αžΆαž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž“αŸƒαž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž»αž€αž…αŸ„αž›αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž…αŸ†αž–αŸ„αŸ‡αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” LMDB αž˜αž·αž“αž˜αžΆαž“αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž›αž½αž“αžœαžΆαž‘αŸαŸ” αž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŠαŸ„αž™αž˜αž“αžŸαž·αž€αžΆαžšαžŠαŸ„αž™αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαžœαžΆαžŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αžΆαžαŸ‹αž‡αŸ’αžšαž»αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‚αžΊαž“αŸ…αž†αŸ’αž„αžΆαž™αž–αžΈαž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž–αž½αž€αž‚αŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

  1. αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž—αžΆαž–αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžœαžΆαž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžšαž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αž“αŸ…αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αž“αŸ’αžαž€αžΆαžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž›αž˜αŸ’αž’αž·αžαž“αž·αž„αž‡αžΆαž˜αž½αž™αžšαžΌαž”αž—αžΆαž–αŸ”
  2. αž’αžœαžαŸ’αžŠαž˜αžΆαž“αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹ LMDB αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž–αžΈαž€αžΆαžšαž…αŸ†αžŽαžΆαž™αž›αžΎαžŸαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαŸ” αž€αžΆαžšαž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž˜αžΆαž“αž“αŸαž™αžαžΆαž€αŸ†αžŽαžαŸ‹αž‘αŸ’αžšαž“αž·αž…αž‘αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αž αž αžΎαž™αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž‘αŸ€αžαž‘αŸαŸ” αžœαžΆαžŸαŸ’αžαžΆαž”αŸ‹αž‘αŸ…αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαžŒαž·αžαžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžšαŸ’αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž•αŸ’αž‘αž»αž€ αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹ calloc αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αž‘αž»αž€αŸ”
  3. αž’αžœαžαŸ’αžŠαž˜αžΆαž“αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αŸαž˜αžΆαž“αž“αŸαž™αžαžΆαž’αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž“αŸƒαž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž’αŸ’αž“αž€αž’αžΆαž“ αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΆαž“αž…αŸ†αž“αž½αž“αž’αŸ’αž“αž€αž’αžΆαž“αžαžΆαž˜αž…αž·αžαŸ’αžαž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ αž˜αž·αž“αžαŸ’αžšαžΌαžœαž‡αž½αž” mutex αžαŸ‚αž˜αž½αž™αž“αŸ…αž›αžΎαž•αŸ’αž›αžΌαžœαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‘αŸ…αž€αžΆαž“αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž“αŸαŸ‡ αž›αŸ’αž”αžΏαž“αž’αžΆαž“αž˜αžΆαž“αžœαž·αžŸαžΆαž›αž—αžΆαž–αž›αžΈαž“αŸαž’αŸŠαŸ‚αžšαžŠαŸαž›αŸ’αž’ αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž…αŸ†αž“αž½αž“αžŸαŸŠαžΈαž—αžΈαž™αžΌαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ LMDB αž˜αžΆαž“αžαŸ‚αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αŸ” αž’αžΆαž…β€‹αž˜αžΆαž“β€‹αž’αŸ’αž“αž€β€‹αž“αž·αž–αž“αŸ’αž’β€‹αžαŸ‚β€‹αž˜αŸ’αž“αžΆαž€αŸ‹β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αž€αŸ’αž“αž»αž„β€‹αž–αŸαž›β€‹αž˜αž½αž™αŸ”
  4. αž’αž”αŸ’αž”αžšαž˜αžΆαž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž–αž αž»αžαŸ’αžŸαŸ‚αŸ” αž˜αžΆαž“αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž…αŸ†αž“αž½αž“αž–αžΈαžšαž“αŸ…αž―αžŸαž“αŸ’αž“αž·αžŸαžΈαž‘ Usenix OSDI 2014αŸ– "αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŸαŸ’αž˜αžΎαŸ—αž‚αŸ’αž“αžΆαž‘αŸαŸ– αž“αŸ…αž›αžΎαž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„" ΠΈ "αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αžΆαžšαž»αžŽαž€αž˜αŸ’αž˜αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαž”αŸ’αž”αžΆαž™αž“αž·αž„αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸ†αžŽαŸαž‰". αž–αžΈαž–αž½αž€αž‚αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαž˜αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αžŠαŸ‚αž›αž˜αž·αž“αž’αŸ’αž›αžΆαž”αŸ‹αž˜αžΆαž“αž–αžΈαž˜αž»αž“αž˜αž€αžšαž”αžŸαŸ‹ LMDB αž“αž·αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž“αŸƒαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš ACID αžŠαŸ‚αž›αž›αŸ’αž’αž‡αžΆαž„ SQLite αŸ”
  5. αž—αžΆαž–αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαž“αŸƒ LMDB αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžαŸ†αžŽαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αŸƒαž€αžΌαžŠαžšαž”αžŸαŸ‹αžœαžΆαž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ L1 αž“αŸƒαžαž½αžšαž€αŸ’αž”αžΆαž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αž€αŸ’αžαžŽαŸˆαž›αŸ’αž”αžΏαž“αž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž‡αžΆαž’αž€αž»αžŸαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž˜αž·αž“αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž–αž–αž€αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαžαŸ’αžœαŸ‡αžαžΆαžαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž–αž½αž€αž‚αŸαž€αžΆαž“αŸ‹αžαŸ‚αžŠαžΉαž„αžαŸ’αž›αž½αž“αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‘αžΌαž‘αŸ…αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž™αž“αŸ’αžαž€αžΆαžšαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”

αž–αŸαžαŸŒαž˜αžΆαž“αž‘αžΌαž‘αŸ…αž’αŸ†αž–αžΈαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOSαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž’αž„αŸ’αž‚αž—αžΆαž–αž˜αž½αž™αž αŸ…αžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž’αžΆαžŸαŸαž™αžŠαŸ’αž‹αžΆαž“αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αžœαžΆαžŠαžΆαž€αŸ‹αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž“αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž‘αžΆαž”αž”αŸ†αž•αž»αž αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαžŠ αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαžŠαžšαžΉαž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αž€αžΎαž“β€‹αž‘αžΎαž„β€‹αž“αŸƒβ€‹αž‘αŸ†αž αŸ†β€‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“β€‹αžαžΆαž˜αžœαž“αŸ’αž αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αžŸαŸ’αž‚αžΆαž›αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž€αŸ’αžšαŸ„αž˜β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž αŸŠαž”αŸ” αžœαžΆαž˜αžΆαž“αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαŸ‚αž›αž›αŸαž…αž‘αžΎαž„αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎαž‚αžΊαž‡αžΆαžαŸ†αž”αž“αŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαŸ„αž™αž‡αž„αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αžœαžΆαž›αžΌαžαž›αžΆαžŸαŸ‹ αž¬αž…αž»αŸ‡αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆ αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž‘αŸ†αž αŸ†αžšαž”αžŸαŸ‹αžœαžΆαž€αŸαž˜αžΆαž“αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αžαžΆαž˜αžœαž“αŸ’αžαž•αž„αžŠαŸ‚αžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž‡αž„αŸ‹ αž“αž·αž„αž αŸŠαžΆαž–αžΈαž€αžΆαžšαžšαž»αž‰ αž“αž·αž„αž‡αŸ’αžšαŸ€αžαž‡αŸ’αžšαŸ‚αž€αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αž–αž½αž€αžœαžΆαž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž…αž»αž„αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸƒαž›αŸ†αž αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αŸ” αžœαžΆαž˜αžΆαž“αžšαž“αŸ’αž’αžšαžœαžΆαž„αž•αŸ’αž“αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎ αž“αž·αž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ’αžšαžΎαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž€αžŽαŸ’αžαžΆαž›αž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž’αž„αŸ’αž‚αž—αžΆαž–αž•αŸ’αžŸαŸαž„αŸ—αž‡αžΆαž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž‡αžΆαž–αž·αžŸαŸαžŸ αžœαžΆαž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αžŸαŸ†αžŽαž»αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž”αž“αŸ’αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸαŸ” αž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ memory-mapped.

αž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αžΊαž’αŸ†αžŽαžΆαžŸαŸ‹αŸ” αžαžΆαž˜αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈ αž…αŸ†αž“αž½αž“αž’αžΆαžŸαŸαž™αžŠαŸ’αž‹αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΉαž˜αž‘αŸ†αž αŸ†αž“αŸƒαž‘αŸ’αžšαž“αž·αž…αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžŸαž˜αžαŸ’αžαž—αžΆαž–αž”αŸŠαžΈαžαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαžΌαž”αžœαž“αŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΌαžŸαžœαžΆαžŸ 1-to-1 αž“αŸ„αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αž”αžΌαž„αž”αŸ†αž•αž»αžαž“αžΉαž„αž‚αžΆαžŸαŸ‹ RAM αž‘αžΆαŸ†αž„αž˜αžΌαž› αž αžΎαž™αžœαžΆαž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αž·αž…αŸ’αž…αž€αžΆαžšαž…αŸ’αžšαžΎαž“αž“αŸ„αŸ‡αž‘αŸαŸ”

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαžΆαž˜αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αžŠαžΉαž„αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αŸ†αž“αžΎαž”αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžαžΆαž˜αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αŸ” αž“αŸαŸ‡αž‚αžΊαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž–αž½αž€αž‚αŸαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αŸ‚αž„αž…αŸ‚αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž›αžΎαž€αŸ’αžšαžŠαžΆαžŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αžαž–αž½αž€αžœαžΆαž•αŸ’αž‘αž»αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαžΌαž”αžœαž“αŸ’αžαžŸαŸ†αžαžΆαž“αŸ‹αžαŸ‚αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αž·αž„αž₯αž‘αžΌαžœαž“αŸαŸ‡αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž“αž·αž˜αŸ’αž˜αž·αžαŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αž·αž˜αŸ’αž˜αž·αž αž“αž·αž„αžšαžΌαž”αžœαž“αŸ’αžαž‘αŸ…αž‡αžΆαž‘αŸ†αž–αŸαžšαž“αŸƒαž‘αŸ†αž αŸ†αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αžŠαžšαžΆαž”αžŽαžΆαž‘αŸ†αž–αŸαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αžαž˜αžΆαž“αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžš αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αžΉαž„αž•αŸ’αž‘αž»αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαžΌαž”αžœαž“αŸ’αž αž αžΎαž™αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž–αž½αž€αžœαžΆαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž–αž·αžŸαŸαžŸαž˜αž½αž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“αžšαž“αŸ’αž’αžŠαŸ„αžαž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαž‘αŸ αž“αŸ„αŸ‡αž‘αŸ†αž–αŸαžšαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αž»αž€αž–αžΈαž˜αž»αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„αž‘αŸ…αžŒαžΈαžŸ αž αžΎαž™αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αŸ†αž“αž½αžŸαŸ” αž“αžΈαžαž·αžœαž·αž’αžΈαž“αŸαŸ‡αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αžαŸ’αž›αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ swapping αžšαžΌαž”αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαŸ” αž“αŸ…αž›αžΎαžœαžΆ αž‘αŸ†αž–αŸαžš A αžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ 0 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€ αž“αž·αž„αžŠαžΆαž€αŸ‹αž“αŸ…αž›αžΎαž‘αŸ†αž–αŸαžšαž˜αŸαž˜αŸ‰αžΌαžšαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ 4αŸ” αž€αžΆαžšαž–αž·αžαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž†αŸ’αž›αž»αŸ‡αž”αž‰αŸ’αž…αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αžΆαžšαž†αŸ’αž›αžΎαž™αž†αŸ’αž›αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž‘αžΆαž›αŸαž 0αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžšαžΏαž„β€‹αž‚αžΊβ€‹αžŠαžΌαž…αž‚αŸ’αž“αžΆβ€‹αž“αžΉαž„β€‹αž―αž€αžŸαžΆαžšβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„β€‹αž‘αŸ…β€‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αžαžΆαž˜αž”αŸ‚αž”αž‘αžΌαž‡αžΈαžαž› αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž”αž“αŸ’αž αž“αž·αž„αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αž·αž˜αŸ’αž˜αž·αžαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž–αž½αž€αž‚αŸαž”αž‰αŸ’αž…αžΌαž›αž‘αŸ†αž–αŸαžšαžŸαžαž·αžšαžΌαž”αžœαž“αŸ’αžαžαžΆαž˜αž‘αŸ†αž–αŸαžš αž αžΎαž™αžαžΆαž˜αžŸαŸ†αžŽαžΎαžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž‘αŸ†αž–αŸαžšαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸαŸ” αžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž―αž€αžŸαžΆαžš I/O αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αŸƒαž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† - αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαŸ„αž™αžαžΊαžŽαŸ‚αž›αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αŸ…αž―αž€αžŸαžΆαžšαž”αŸ’αžšαž—αž–αŸ”
'' '"
αžšαžΌαž”αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› LMDB αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αžŸαŸαž„αŸ—αŸ” αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αžαž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž‘αŸ…αž‡αžΆαž―αž€αžŸαžΆαžšαžαŸ‚αž˜αž½αž™ αž™αžΎαž„αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸƒαž”αŸ’αž›αž»αž€αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž…αž“αŸ’αž›αŸ„αŸ‡αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ αžŠαŸ‚αž› LMDB αž˜αžΎαž›αž‘αŸ…αŸ”
'' '"

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž…αŸ†αž“αž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž‚αžΊαžαžΆ LMDB αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž€αŸ‚αž”αŸ’αžšαŸ‚αž―αž€αžŸαžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž˜αžšαž™αŸˆαž™αž“αŸ’αžαž€αžΆαžšαž αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαžšαžŸαŸαžš αž αžΎαž™αž”αž„αŸ’αž αžΆαž‰αž―αž€αžŸαžΆαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αžΆαž“αžαŸ‚αž’αžΆαž“αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž˜αžΆαž“αž•αž›αžœαž·αž”αžΆαž€αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαŸ”

αž•αž›αžœαž·αž”αžΆαž€αžŠαŸ†αž”αžΌαž„αž‚αžΊαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž€αžΆαžšαžαžΌαž…αžαžΆαžαžŠαŸ„αž™αž’αž…αŸαžαž“αžΆαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž›αŸαžαž€αžΌαžŠαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŠαžΉαž„ αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™αž‚αžΊαž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αžΆαž“αžŠαŸ„αž™αžŸαŸαžšαžΈαž–αžΈαž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„αž€αŸ’αž“αž»αž„αž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž‘αžΎαž”αžαŸ‚αž…αž„αž…αžΆαŸ† αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž―αž€αžŸαžΆαžšαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αžΆαž“-សរសេរ αž˜αžΆαž“αž“αŸαž™αžαžΆαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŽαžΆαž˜αž½αž™αž€αŸαž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αžœαžΆαž”αžΆαž“αžŠαŸ‚αžšαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αžΆαž„αž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αž€αŸ†αž αž»αžŸ αžŠαŸ„αž™αž–αŸ’αž™αžΆαž™αžΆαž˜αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαž’αžΆαžαž»αž’αžΆαžšαŸαž“αŸ…αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž“αŸ„αŸ‡ αž“αžΆαž„αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž‘αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αŸαŸ‡αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™ αžŠαŸ‚αž›αž“αžΉαž„αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž’αŸ†αž–αžΎαž–αž»αž€αžšαž›αž½αž™αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αžΆαž“αžαŸ‚αž’αžΆαž“ αž“αŸ„αŸ‡αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž”αž“αŸ’αž‘αžΆαž“αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž‰αŸ’αž‰αžΆαž˜αž½αž™αŸ” SIGSEGVαž αžΎαž™αž―αž€αžŸαžΆαžšαž“αžΉαž„αž“αŸ…αžŠαžŠαŸ‚αž›αŸ”

αž•αž›αžœαž·αž”αžΆαž€αž‘αžΈαž–αžΈαžšαž‚αžΊαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžšαž½αž…αž‘αŸ…αž αžΎαž™αž…αŸ†αž–αŸ„αŸ‡ iOS αŸ” αž‘αžΆαŸ†αž„αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž¬αž”αŸ’αžšαž—αž–αžŽαžΆαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαžœαžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αžΎαž‚αŸ’αž˜αžΆαž“αžœαžΆ LMDB αž“αžΉαž„αž˜αž·αž“αžŸαŸαž€αŸ’αžαž·αžŸαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘αž“αŸαŸ‡αž‘αŸαŸ” αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž›αž€αŸ’αžαžŽαŸˆβ€‹αž–αž·αžŸαŸαžŸβ€‹αž“αŸƒβ€‹αž―αž€αžŸαžΆαžšβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž‚αžΌαžŸβ€‹αž•αŸ‚αž“αž‘αžΈβ€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†β€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„ iOS

αž˜αžΆαž“αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž˜αž½αž™αž“αŸ…αž― WWDC αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2018 "iOS Memory Deep Dive". αžœαžΆαž”αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž‘αŸ†αž–αŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαžΆαž„αž€αžΆαž™αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜ 3 αž”αŸ’αžšαž—αŸαž‘αŸ– αž€αžαŸ’αžœαž€αŸ‹ αž”αž„αŸ’αž αžΆαž”αŸ‹ αž“αž·αž„αžŸαŸ’αž’αžΆαžαŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžŸαžαž·αžŸαŸ’αž’αžΆαžαž‚αžΊαž‡αžΆαž”αžŽαŸ’αžαž»αŸ†αž“αŸƒαž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžˆαžΊαž…αžΆαž”αŸ‹αž–αžΈαžŸαžαž·αžšαžΆαž„αž€αžΆαž™αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž•αŸ’αž‘αž»αž€αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αž‘αžΎαž„αžœαž·αž‰αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž–αžΈαž”αŸ’αžšαž—αž–αžŠαžΎαž˜αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž”αžΆαž“αžαŸ‚αž’αžΆαž“ αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αž”αŸ’αžšαž—αŸαž‘αž“αŸαŸ‡αŸ” αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž˜αž·αž“αž—αŸαž™αžαŸ’αž›αžΆαž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαž€αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαžœαžΆαžŸαž‘αŸ…αž‡αžΆαž―αž€αžŸαžΆαžšαž–αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‚αŸ’αžšαž”αŸ‹αž–αŸαž›αž“αŸ„αŸ‡αž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžαžΆαž“αžΉαž„αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸαŸ”
'' '"
αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž€αžαŸ’αžœαž€αŸ‹ αž˜αž·αž“αžαžΆαž–αž½αž€αž‚αŸαžŸαŸ’αžαž·αžαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž–αžΈαžŠαžΎαž˜αž‘αžΎαž™αŸ” αž‡αžΆαž–αž·αžŸαŸαžŸ αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαŸ„αž™αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‘αŸ…αž€αžΆαž“αŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž–αž½αž€αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αžαŸ’αž“αžΆαž€αŸ‹αžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡αŸ” αž”αžΎαž€ LMDB αž‡αžΆαž˜αž½αž™αž‘αž„αŸ‹ MDB_WRITEMAPαž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌβ€‹αžšβ€‹αž‘αŸ…β€‹αžœαžΆ αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹β€‹αžœαžΆβ€‹αž•αŸ’αž‘αžΆαž›αŸ‹β€‹αžαŸ’αž›αž½αž“.

β€‹αžŠαžšαžΆαž”αžŽαžΆβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž˜αž½αž™β€‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜β€‹αž™αž€β€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†β€‹αž…αŸ’αžšαžΎαž“β€‹αž–αŸαž€ αž”αŸ’αžšαž–αŸαž“αŸ’αž’β€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž“αžΉαž„β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžœαžΆβ€‹αž‘αŸ…β€‹αž“αžΉαž„β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž αžΆαž”αŸ‹β€‹αž‘αŸ†αž–αŸαžšβ€‹αž€αžαŸ’αžœαž€αŸ‹αŸ” αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŸαžšαž»αž”αžŠαŸ‚αž›αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αžŠαŸ„αž™αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž€αžαŸ’αžœαž€αŸ‹ αž“αž·αž„αž”αžΆαž“αž”αž„αŸ’αž αžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž”αžΆαž“αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž αŸ…αžαžΆ αžŠαžΆαž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαžˆαžΆαž“αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž€αž˜αŸ’αžšαž·αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αžŠαŸαž˜αž·αž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžƒαžΆαžαž€αžš OOM αž˜αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž”αž„αŸ’αžαŸ†αžœαžΆαž…αŸ„αž›αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹ iOS αž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž›αžΎαžαž»αŸ” αž•αŸ’αž‘αž»αž™β€‹αž‘αŸ…β€‹αžœαž·αž‰ αž€αžΆαžšβ€‹αž€αžΆαžαŸ‹β€‹αž”αž“αŸ’αžαž™β€‹αž‘αŸ†αž αŸ†β€‹αž˜αŸαž˜αŸ‰αžΌαžšαžΈβ€‹αžŠαŸ„αž™β€‹αž€αžΆαžšβ€‹αž”αŸ’αžαžΌαžšβ€‹αž‘αŸ†αž–αŸαžšβ€‹αž–αžΈβ€‹αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ†β€‹αžšαžΌαž”αžœαž“αŸ’αžβ€‹αž‘αŸ…β€‹αžαžΆαžŸβ€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž•αŸ’αžαž›αŸ‹β€‹αž±αŸ’αž™β€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„ iOS αž‘αŸαŸ” αž αŸαžαž»αž•αž›β€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αŸβ€‹αžŸαŸ’αž˜αžΆαž“β€‹αžαŸ‚β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αžΈαžαž·αžœαž·αž’αžΈαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž–αŸαžšαž‘αŸ…αžŒαžΈαžŸ αž“αž·αž„αžαž™αž€αŸ’αžšαŸ„αž™αž‚αžΊαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαžΆαž˜αž–αž›αžαŸ’αž›αžΆαŸ†αž„αž–αŸαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž…αž›αŸαž αž¬αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž’αž“αž’αžΆαž“αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αŸ’αžšαž‘αžΆαž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž›αžΎαžŠαŸ’αžšαžΆαž™ SSD αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αŸ’αž“αž€αžšαž…αž“αžΆαž˜αž·αž“αž–αŸαž‰αž…αž·αžαŸ’αžαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’ αžŠαŸ‚αž›αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊ αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž₯αžαžˆαž”αŸ‹αžˆαžšαŸ” αžαŸ’αžšαžΌαžœαžαžΆαžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αž€αžΆαžšαž–αž·αžαž“αŸ…αžαŸ‚αž‡αžΆαž€αžΆαžšαž–αž·αžαŸ”

αžŠαŸ†αžŽαžΉαž„β€‹αž›αŸ’αž’β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž“αž·αž™αžΆαž™β€‹αžšαž½αž…β€‹αž αžΎαž™β€‹αž˜αž»αž“β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αžαžΆ LMDB αžαžΆαž˜β€‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜β€‹αž˜αž·αž“β€‹αž”αŸ’αžšαžΎβ€‹αž™αž“αŸ’αžαž€αžΆαžš mmap αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αŸ’αžœαžΎβ€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–β€‹αž―αž€αžŸαžΆαžšβ€‹αž‘αŸαŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž‡αžΆαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŸαŸ’αž’αžΆαž αž“αž·αž„αž˜αž·αž“αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αžŠαž›αŸ‹αž€αžΆαžšαž…αžΆαž”αŸ‹αž™αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αŸ„αŸ‡αž‘αŸαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸ Xcode αžŠαŸ‚αž›αž αŸ…αžαžΆ VM TrackerαŸ” αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αž·αž˜αŸ’αž˜αž·αž iOS αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Cloud αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž€αžšαžŽαžΈ LMDB αž…αŸ†αž“αž½αž“ 2 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ” αž‘αžΈαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αž„αŸ’αž αžΆαž‰αž―αž€αžŸαžΆαžšαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž“αŸ…αž›αžΎ 1GiB αž“αŸƒαžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αž αž‘αžΈαž–αžΈαžš - 512MiB αŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αžΆαŸ†αž„αž–αžΈαžšαž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž…αŸ†αž“αž½αž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž’αŸ’αž“αž€αžšαžŸαŸ‹αž“αŸ…αž€αŸαžŠαŸ„αž™αž€αŸαž–αž½αž€αž‚αŸαž‘αžΆαŸ†αž„αž–αžΈαžšαž˜αž·αž“αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αž‘αŸ†αž αŸ†αž€αžαŸ’αžœαž€αŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαž‡αžΆαž–αŸαž›αžœαŸαž›αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΉαž„αž’αžΆαž€αŸ’αžšαž€αŸ‹αŸ” αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž™αž“αŸ’αžαž€αžΆαžš swap αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αž‘αŸƒαžαž» 64 αž”αŸŠαžΈαž αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ—αž’αžΆαž…αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž€αž“αŸ’αž›αŸ‚αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αž·αž˜αŸ’αž˜αž·αžαž”αžΆαž“αž…αŸ’αžšαžΎαž“ αžŠαžΌαž…αžŠαŸ‚αž›αž‘αŸ†αž αŸ†αžαžΆαžŸαžšαžΉαž„αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαž€αŸ’αžαžΆαž“αž»αž–αž›αžšαž”αžŸαŸ‹αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαŸ” αž€αžΆαžšαž‡αŸ†αž“αž½αžŸ swap αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž”αž„αŸ’αž αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ iOS αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αžΌαžœαž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈαž”αž‘αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαžŸαŸ‹αž“αŸ…αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αžŸαž˜αž“αžΉαž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž˜αŸ (αž’αžΆαž“ RAM) αž αžΎαž™αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αž·αž“αžŸαž˜αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αžαŸ†αž±αŸ’αž™αž”αž‰αŸ’αž…αž”αŸ‹αŸ” αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžŠαžΌαž…β€‹αž€αžΆαžšβ€‹αž›αžΎαž€β€‹αž‘αžΎαž„β€‹αžαžΆαž„β€‹αž›αžΎ αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž“αž·αž„αž€αŸ’αž“αž»αž„ αž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžš. αž‡αžΆαž›αž‘αŸ’αž’αž•αž› iOS αž€αŸ†αžŽαžαŸ‹αž™αŸ‰αžΆαž„αž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž“αžΌαžœαž…αŸ†αž“αž½αž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžšαž™αŸˆ mmap αŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒαž…αŸ†αž“αž½αž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ—αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž αŸ…αžαžΆαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸαŸ‡αŸ” αž“αŸ…αž›αžΎαž˜αŸ‰αžΌαžŠαŸ‚αž›αžŸαŸ’αž˜αžΆαžαž αŸ’αžœαžΌαž“αž‘αŸ†αž“αžΎαž”αž”αŸ†αž•αž»αž αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαžŸαž”αŸ’αž”αž»αžšαžŸαžŠαŸ„αž™ 2 αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒ αž“αž·αž„αž“αŸ…αž›αžΎαž€αŸ†αžŽαŸ‚αž€αŸ†αž–αžΌαž›αž“αŸƒ iPad - αžŠαŸ„αž™ 4. αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž•αŸ’αžαŸ„αžαž›αžΎαž˜αŸ‰αžΌαžŠαŸ‚αž›αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αžΆαž”αž”αŸ†αž•αž»αž αžŠαŸ‚αž›αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŸαŸ„αž€αžŸαŸ…αž”αŸ†αž•αž»αžαŸ” αž’αžΆαž€αŸ’αžšαž€αŸ‹αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžŠαŸ„αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ VM Tracker αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžαžΆ LMDB αž‚αžΊαž“αŸ…αž†αŸ’αž„αžΆαž™αž–αžΈαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž’αŸ‡αž’αžΆαž„αžαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αž€αŸ†αžŽαžΆαžαŸ‹αž›αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸŠαžΈαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ‚αž„αž…αŸ‚αž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αž―αž€αžŸαžΆαžšαž’αž“αž’αžΆαž“ αž€αŸ’αžšαž”αžαžŽαŸ’αžŒαžšαžΌαž”αž—αžΆαž– αž“αž·αž„αžŸαžαŸ’αžœαž˜αŸ†αžŸαžΆαžŸαžΈαžαžΌαž…αŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž“αŸ…αž€αŸ’αž“αž»αž„ Cloud αž™αžΎαž„αž”αžΆαž“αž˜αž€αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαžŸαž˜αŸ’αžšαž”αžŸαž˜αŸ’αžšαž½αž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αžŠαŸ„αž™ LMDB: 384 αž˜αŸαž€αžΆαž”αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸ 32 αž”αŸŠαžΈαž αž“αž·αž„ 768 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸ 64 αž”αŸŠαžΈαžαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αžšαž·αž˜αžΆαžŽαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž’αžŸαŸ‹αž αžΎαž™ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžŽαžΆαž˜αž½αž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž›αŸαžαž€αžΌαžŠ MDB_MAP_FULL. αž™αžΎαž„αžŸαž„αŸ’αž€αŸαžαžƒαžΎαž‰αž€αŸ†αž αž»αžŸαž”αŸ‚αž”αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžšαž”αžŸαŸ‹αž™αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αžΆαž“αžαž·αž…αžαž½αž…αžŠαŸ‚αž›αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡ αž–αž½αž€αž‚αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž˜αž·αž“αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αŸ”

αž αŸαžαž»αž•αž›αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž…αŸ’αžšαžΎαž“αž–αŸαž€αžŠαŸ„αž™αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž’αžΆαž…αž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž™αžΌαžšαž’αž„αŸ’αžœαŸ‚αž„αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž”αžΆαžαž»αž—αžΌαžαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αž™αžŠαŸ„αž™αž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαžŸαžŸαžšαžŸαŸ’αžαž˜αŸ’αž—αž–αžΈαžšαžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž“αŸƒ LMDB αŸ”

៣.្. αžαŸ’αžšαžΈαž”αžΆαž‘αŸ‚αž“ #3.2. ខ + - ដើមឈើ

αžŠαžΎαž˜αŸ’αž”αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžαžΆαžšαžΆαž„αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αž»αž€αžαž˜αŸ’αž›αŸƒαžŸαŸ„ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžœαžαŸ’αžαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ API αžšαž”αžŸαŸ‹αžœαžΆαŸ–

  1. αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžαž»αžαŸ’αž˜αžΈαŸ”
  2. αžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αžΆαžαž»αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ„αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ”
  3. αž€αžΆαžšαžŠαž€αž’αžΆαžαž»αž˜αž½αž™αŸ”
  4. αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαž›αžΎαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αž“αŸƒαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž”αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOSαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž”αž½αž“αž‚αžΊαž‡αžΆαž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαŸ” αžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αžšαž”αžŸαŸ‹αžœαžΆαžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž”αŸ‚αž„αž…αŸ‚αž€αžŸαŸ†αžŽαž»αŸ†αžšαž„αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸƒαž€αžΌαž“αžŸαŸ„αžšαž‘αŸ…αž‡αžΆαž˜αŸ‚αž€αž’αžΆαž„αžšαž„αž–αžΈαžšαŸ” αžαžΆαž„αž†αŸ’αžœαŸαž„αž˜αžΆαž“αžšαž”αžŸαŸ‹αžŠαŸ‚αž›αžαžΌαž…αž‡αžΆαž„αž˜αŸ αž αžΎαž™αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αž˜αžΆαž“αžšαž”αžŸαŸ‹αžŠαŸ‚αž›αž’αŸ†αž‡αžΆαž„αŸ” αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž‚αžΊαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžŠαžΎαž˜αžˆαžΎαž”αž»αžšαžΆαžŽαž˜αž½αž™αŸ”

αžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžšαž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž–αžΈαžšαžŠαŸ‚αž›αžšαžΆαžšαžΆαŸ†αž„αž–αž½αž€αž‚αŸαž˜αž·αž“αž±αŸ’αž™αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžαžΆαžŸαŸ” αž‘αžΈαž˜αž½αž™αž€αž˜αŸ’αžšαž·αžαž“αŸƒαžαž»αž›αŸ’αž™αž—αžΆαž–αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‚αžΊαž˜αž·αž“αž’αžΆαž…αž‘αžΆαž™αž‘αž»αž€αž‡αžΆαž˜αž»αž“αž”αžΆαž“αŸ” αž˜αžΆαž“αž αžΆαž“αž·αž—αŸαž™αžŸαž“αŸ’αž’αžΉαž€αžŸαž“αŸ’αž’αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αžŠαžΎαž˜αžˆαžΎ αžŠαŸ‚αž›αž€αž˜αŸ’αž–αžŸαŸ‹αž“αŸƒαž˜αŸ‚αž€αžˆαžΎαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž’αžΆαž…αžαž»αžŸαž‚αŸ’αž“αžΆαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„ αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž²αŸ’αž™αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸƒαž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαž“αŸ‹αžαŸ‚αž’αžΆαž€αŸ’αžšαž€αŸ‹αž‘αŸ…αŸ— αž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ” αž‘αžΈαž–αžΈαžš αž—αžΆαž–αžŸαž˜αŸ’αž”αžΌαžšαž”αŸ‚αž”αž“αŸƒαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž†αŸ’αž›αž„αžšαžœαžΆαž„αžαŸ’αž“αžΆαŸ†αž„αžŠαž€αž αžΌαžαžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αŸ” αžαŸ’αž“αžΆαŸ†αž„αž”αž·αž‘ (αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžšαžœαžΆαž„αž–αž½αž€αžœαžΆ) αž’αžΆαž…αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž›αžΎαž‘αŸ†αž–αŸαžšαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αžαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž‡αž·αžαžαžΆαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‚αž€αž’αžΆαž„αž˜αž½αž™αž’αžΆαž…αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž…αžΌαž›αž˜αžΎαž›αž…αŸ†αž“αž½αž“αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αžΆαž“αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžšαž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž€αŸαžŠαŸ„αž™ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž”αž„αŸ’αžœαž·αž›αž‘αŸ†αž–αŸαžšαž₯αžαžˆαž”αŸ‹αžˆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžšαž”αžŸαŸ‹αžαž½αžšαž€αŸ’αž”αžΆαž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžΆαžšαžšαžΈαž€αžšαžΆαž™αžαŸ„αž€αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž˜αž€αžŠαž›αŸ‹αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž‘αŸ…αž™αž€αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžαŸ’αž“αžΆαŸ†αž„αž–αžΈαžαžΆαžŸ αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ αž‚αž½αžšβ€‹αž²αŸ’αž™β€‹αž’αžΆαžŽαž·αžαŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOSB-trees αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒαžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžš αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αž€αžαžΆαžαžŽαŸ’αžŒαž˜αž»αž“αŸ” αž‘αžΈαž˜αž½αž™αž–αž½αž€αž‚αŸαž˜αžΆαž“αžαž»αž›αŸ’αž™αž—αžΆαž–αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ” αž‘αžΈαž–αžΈαžš αžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž”αŸ†αž”αŸ‚αž€αžŸαŸ†αžŽαž»αŸ†αž€αžΌαž“αžŸαŸ„αž˜αž·αž“αž‘αŸ…αž‡αžΆ 2 αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αŸ…αž‡αžΆαžŸαŸ†αžŽαž»αŸ†αžšαž„ M αž αžΎαž™αž›αŸαž M αž’αžΆαž…αž˜αžΆαž“αž‘αŸ†αž αŸ†αž’αŸ†αžŽαžΆαžŸαŸ‹ αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαžšαžΆαž”αŸ‹αžšαž™ αž¬αžšαžΆαž”αŸ‹αž–αžΆαž“αŸ‹αŸ”

αžŠαŸ„αž™αž αŸαžαž»αž“αŸαŸ‡αŸ–

  1. αžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αžšαž½αž…αž αžΎαž™αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ† αž αžΎαž™αžŠαžΎαž˜αžˆαžΎαžαŸ’αž›αžΈαžŽαžΆαžŸαŸ‹αŸ”
  2. αž˜αŸ‚αž€αž’αžΆαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž· αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž‡αž·αžαž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆ αž¬αž‡αž·αžαžαžΆαž„αŸ”
  3. αž…αŸ†αž“αž½αž“αžαŸ’αž“αžΆαŸ†αž„αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž–αŸαž›αž…αž»αŸ‡αžŠαžΎαž˜αžˆαžΎαž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αŸ”
  4. αž…αŸ†αž“αž½αž“αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž‚αŸ„αž›αžŠαŸ…αžŠαŸ‚αž›αž”αžΆαž“αž’αžΆαž“αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŸαŸ†αžŽαž½αžšαž‡αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™ αžŠαŸ„αž™αžŸαžΆαžšαž–αž½αž€αžœαžΆαž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αžšαž½αž…αž αžΎαž™αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

LMDB αž”αŸ’αžšαžΎαž”αŸ†αžšαŸ‚αž”αŸ†αžšαž½αž›αž“αŸƒ B-tree αžŠαŸ‚αž›αž αŸ…αžαžΆ B+ tree αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž›αžΎαž”αž„αŸ’αž αžΆαž‰αž–αžΈαžαŸ’αž“αžΆαŸ†αž„αž”αžΈαž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ–

  1. αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎαž‚αžΊαž‡αžΆαž«αžŸαŸ” αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž’αŸ’αžœαžΈαž›αžΎαžŸαž–αžΈαž‚αŸ†αž“αž·αžαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸ LMDB αž˜αž½αž™ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαŸ” αž–αž½αž€αžœαžΆαž“αžΈαž˜αž½αž™αŸ—αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž«αžŸαžšαž”αžŸαŸ‹αžœαžΆαŸ”
  2. αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αž”αŸ†αž•αž»αžαž‚αžΊαžŸαŸ’αž›αžΉαž€αŸ” αž–αž½αž€αžœαžΆ αž“αž·αž„αž˜αžΆαž“αžαŸ‚αž–αž½αž€αžœαžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž˜αžΆαž“αž‚αžΌαžαž˜αŸ’αž›αŸƒαžŸαŸ„αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž“αž·αž™αžΆαž™αž’αž‰αŸ’αž…αžΉαž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹ B+-trees αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αŸ‚αž€αž’αžΆαž„ B αž’αž˜αŸ’αž˜αžαžΆαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž€αž˜αŸ’αžšαž·αž αž“αŸ„αŸ‡αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž› B+ αž‚αžΊαžαŸ’αžšαžΉαž˜αžαŸ‚αž˜αž½αž™αž‘αžΆαž”αž”αŸ†αž•αž»αžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžŠαŸ„αž™αž”αžΆαž“αž‡αž½αžŸαž‡αž»αž›αž€αžΆαžšαž–αž·αžαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž αŸ…αž”αŸ’αžšαž—αŸαž‘αžšαž„αž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„ LMDB αžαžΆαž‡αžΆαž˜αŸ‚αž€αž’αžΆαž„ BαŸ”
  3. αž“αŸ…αž…αž“αŸ’αž›αŸ„αŸ‡αž«αžŸ αž“αž·αž„αžŸαŸ’αž›αžΉαž€αž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ 0 αž¬αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž“αŸαŸ‡ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαŸ’αž“αžΆαŸ†αž„αžšαž»αž€αžšαž€ (សអខអ)αŸ” αž—αžΆαžšαž€αž·αž…αŸ’αž…αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ‚αž„αž…αŸ‚αž€αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž”αžšαžœαžΆαž„αžŸαŸ’αž›αžΉαž€αŸ”

αžαžΆαž˜αžšαžΌαž”αžœαž·αž‘αŸ’αž™αžΆ αžαŸ’αž“αžΆαŸ†αž„αž‚αžΊαž‡αžΆαž”αŸ’αž›αž»αž€αž“αŸƒαž€αžΆαžšαž…αž„αž…αžΆαŸ†αž“αŸƒαž”αŸ’αžšαžœαŸ‚αž„αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αž»αž€αž‡αžΆαž˜αž»αž“αŸ” αž‘αŸ†αž αŸ†αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‚αžΊαž‡αžΆαž‘αŸ†αž αŸ†αž…αŸ’αžšαžΎαž“αž“αŸƒαž‘αŸ†αž–αŸαžšαžŸαžαž·αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžαžΆαž„αž›αžΎαŸ” αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž“αžΆαŸ†αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αž”αž‹αž˜αž€αžαžΆαž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αŸαžαžΆ β€‹β€‹αžŠαŸ‚αž›αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž‚αžΊ αž˜αžΌαž›αž”αŸ’αž”αž‘αžΆαž“αž”αŸαžαŸ’αžšαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž’αž»αž αŸ’αžœαžŸαž·αžαžŠαŸ‚αž›αž€αŸ„αžŸαž·αž€αžΆαžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžαž·αžαž“αŸ…αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžΆαž…αž‡αžΆαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž‘αžΆαŸ†αž„αž–αžΈαžš αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžαŸ’αž“αžΆαŸ†αž„αžšαž»αž€αžšαž€ αž¬αž‚αžΌαžαž˜αŸ’αž›αŸƒαžŸαŸ„αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαžŸαŸ’αž›αžΉαž€αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž‘αŸ†αž–αŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž„αžΆαžšαŸ” "αž€αžΆαžšαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž“αŸƒαž αžΆαž„αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž–αžŸαŸ‹".

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžŠαŸ„αž™αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž˜αžΆαžαž·αž€αžΆαžαžΆαž„αž€αŸ’αž“αž»αž„αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž‘αŸ†αž–αŸαžš αž™αžΎαž„αž“αžΉαž„αžαŸ†αžŽαžΆαž„αž±αŸ’αž™ LMDB B-tree αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžŽαŸˆαžŸαžΆαž˜αž‰αŸ’αž‰αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αžαŸ’αž“αžΆαŸ†αž„αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž“αŸ…αž›αžΎαžαžΆαžŸαŸ” αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αžαžΆαž„αž…αž»αž„αž―αž€αžŸαžΆαžšαŸ” αž‘αŸ†αž–αŸαžšαž˜αŸαžαžΆαžŠαŸ‚αž›αž‚αŸαž αŸ…αžαžΆαž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž’αž»αž αŸ’αžœαžŸαž·αžαžŠαŸ‚αž›αž«αžŸαž“αŸƒαžŠαžΎαž˜αžˆαžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αŸ” αž“αŸ…αž–αŸαž›αž”αžΎαž€αž―αž€αžŸαžΆαžš LMDB αžŸαŸ’αž€αŸαž“αž‘αŸ†αž–αŸαžšαž―αž€αžŸαžΆαžšαžŠαŸ„αž™αž‘αŸ†αž–αŸαžšαž–αžΈαž…αž»αž„αžŠαž›αŸ‹αžŠαžΎαž˜ αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž‘αŸ†αž–αŸαžšαž˜αŸαžαžΆαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž αžΎαž™αžαžΆαž˜αžšαž™αŸˆαžœαžΆαžšαž€αžƒαžΎαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŠαŸ„αž™αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž’αŸ†αž–αžΈαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΌαž‡αžΈαžαž› αž“αž·αž„αžšαžΌαž”αžœαž“αŸ’αžαž“αŸƒαž’αž„αŸ’αž‚αž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž™αžΎαž„αž’αžΆαž…αž”αž“αŸ’αžαž‘αŸ…αž–αž·αž…αžΆαžšαžŽαžΆαžŸαžŸαžšαžŸαŸ’αžαž˜αŸ’αž—αž‘αžΈαž”αžΈαž“αŸƒ LMDB αŸ” αžœαžΆαž‚αžΊαžŠαŸ„αž™αž˜αžΆαž“αž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αžœαžΆ αžŠαŸ‚αž›αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž“αŸ…αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αžŠαŸ„αž™αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αžΌαžœαž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαž–αž αž»αž€αŸ†αžŽαŸ‚αŸ”

៣.៣. αžαŸ’αžšαžΈαž”αžΆαž‘αŸ‚αž“ #3.3. αž…αž˜αŸ’αž›αž„αž›αžΎαž€αžΆαžšαžŸαžšαžŸαŸαžš

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš B-tree αž˜αž½αž™αž…αŸ†αž“αž½αž“αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž‚αžΊαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž€αžΌαž“αžŸαŸ„αžαŸ’αž˜αžΈαž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αžˆαžΆαž“αžŠαž›αŸ‹αžŸαž˜αžαŸ’αžαž—αžΆαž–αž’αžαž·αž”αžšαž˜αžΆαžšαž”αžŸαŸ‹αžœαžΆαžšαž½αž…αž αžΎαž™αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αžαŸ’αž“αžΆαŸ†αž„αž‡αžΆαž–αžΈαžš αž αžΎαž™αž‘αžΈαž–αžΈαžšαž‚αžΊαžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αžαŸ†αžŽαž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„αž€αžΌαž“αž”αž„αŸ’αž€αžΎαžαžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸαžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αžΈαžαž·αžœαž·αž’αžΈαž“αŸαŸ‡αž‚αžΊαž˜αžΆαž“αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“ (αž€αžΆαžšαž‚αžΆαŸ†αž„ αž€αžΆαžšαžŠαžΆαž…αŸ‹αž…αžšαž“αŸ’αžαž’αž‚αŸ’αž‚αž·αžŸαž“αžΈαŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αŸ‚αž”αž”αŸ’αžšαž–αŸƒαžŽαžΈαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΆαž“αž—αžΆαž–αž’αžαŸ‹αž’αŸ’αž˜αžαŸ‹αž‚αžΊαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαžŒαžΈαžŸαž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž‡αžΆαž”αŸ‹αž“αžΉαž„ B-tree - αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‡αžΆαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŸαžšαžŸαŸαžšαž‡αžΆαž˜αž»αž“ (WAL) αŸ” αžœαžΆαž‚αžΊαž‡αžΆαž―αž€αžŸαžΆαžšαž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ†αžŽαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž™αŸ‰αžΆαž„αžαžΉαž„αžšαŸ‰αžΉαž„αž˜αž»αž“αž–αŸαž›αž€αŸ‚αž”αŸ’αžšαŸ‚ B-tree αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αžαžΆαž˜αžΆαž“αž’αŸ†αž–αžΎαž–αž»αž€αžšαž›αž½αž™αž€αŸ†αž‘αž»αž„αž–αŸαž›αž’αŸ’αžœαžΎαžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž“αŸ„αŸ‡αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž›αžΎαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αžαŸ’αž›αž½αž“αžœαžΆαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”

LMDB αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαž’αžαŸ‹αž±αž“αž€αŸ†αž αž»αžŸαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“ αžŠαŸ‚αž›αž αŸ…αžαžΆαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž›αžΎαž€αžΆαžšαžŸαžšαžŸαŸαžšαŸ” αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαžαžΆ αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αžœαžΆαž…αž˜αŸ’αž›αž„αžœαžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ αž“αž·αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž’αžΆαž”αŸ‹αžŠαŸαžαž˜αžΆαž“ αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαŸ†αž„αž˜αŸαžšαž”αžŸαŸ‹αžœαžΆαŸ” αžŠαŸ„αž™αžŸαžΆαžšβ€‹αžœαžΆβ€‹αž€αŸβ€‹αžαŸ’αžšαžΌαžœβ€‹αž€αŸ‚αž”αŸ’αžšαŸ‚β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžœαžΆβ€‹αžŠαŸ‚αžš αžœαžΆβ€‹αž€αŸβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž…αž˜αŸ’αž›αž„β€‹αž‘αž»αž€β€‹αž‡αžΆαž˜αž»αž“β€‹αžŠαŸ‚αžšαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž“αŸ’αžαž€αžΎαžαž‘αžΎαž„αžŠαžŠαŸ‚αž›αŸ—αžšαž αžΌαžαžŠαž›αŸ‹αž«αžŸαŸ” αžšαžΏαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αžΊαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαž‘αŸ†αž–αŸαžšαž˜αŸαžαžΆ.

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αžΆαŸ†αž„αž€αŸ†αž‘αž»αž„αž–αŸαž›αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž“αŸ„αŸ‡αž‘αŸ†αž–αŸαžšαž˜αŸαžαžΆαžαŸ’αž˜αžΈαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αŸ αž¬αžœαžΆαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžŸαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ„αŸ‡αž‘αŸ αž αžΎαž™αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αžšαž”αžŸαŸ‹αžœαžΆαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡ αž‘αŸ†αž–αŸαžšαžαŸ’αž˜αžΈαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αŸ†αž–αŸαžšαž…αžΆαžŸαŸ‹αž“αžΉαž„αž˜αž·αž“αžšαž„αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αž‘αŸαŸ” αž“αŸαŸ‡αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ LMDB αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‡αžΆαž˜αž»αž“ αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž—αžΆαž–αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αžαžΆαž˜αž€αžΆαžšαž–αž·αž αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαžαžΆαžŸαžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž„αž›αžΎαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž»αžαž„αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαŸ” αž’αžœαžαŸ’αžŠαž˜αžΆαž“αž“αŸƒαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž‚αžΊαž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αž“αŸƒ LMDB αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž›αŸ’αž”αžΏαž“αž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž–αžŸαŸ‹αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž€αžΆαžšαžšαž…αž“αžΆαž›αž‘αŸ’αž’αž•αž› αžŠαŸ‚αž›αž αŸ…αžαžΆ append-only B-tree αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž—αžΆαž–αž―αž€αŸ„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž–αž αž»αž€αŸ†αžŽαŸ‚αžŠαŸ„αž™αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ LMDB αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αžΎαž€αž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž«αžŸαž˜αŸ‚αž€αž’αžΆαž„αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ” αžšαž αžΌαžαž‘αžΆαž›αŸ‹αžαŸ‚αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž‘αŸ†αž–αŸαžšαž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž¬αž”αŸ’αžšαžΎαž‘αžΎαž„αžœαž·αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž±αŸ’αž™αž”αžΆαž“αž™αžΌαžšαžαžΆαž˜αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαž»αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αŸ” αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αž“αŸ…αžαŸ‚αž”αž“αŸ’αžαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αž“αŸ…αž–αŸαž›αž“αŸαŸ‡αž€αŸαžŠαŸ„αž™αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αž…αŸ’αžšαžΎαž“ αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž²αŸ’αž™ LMDB αž‡αžΆαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž‘αžΈαžŸαŸ’αžšαž‘αžΆαž‰αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” UICollectionView. αžŠαŸ„αž™αž”αžΆαž“αž”αžΎαž€αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž„αŸ’αž€αžΎαž“αž‘αŸ†αž αŸ†αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž”αŸ’αžšαž‰αžΆαž”αŸ‹αž”αŸ’αžšαž‰αžΆαž›αŸ‹αž”αž‰αŸ’αž…αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž–αŸ’αžšαŸ„αŸ‡αžαŸ’αž›αžΆαž…αž˜αž·αž“αž‘αž»αž€αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αž”αŸ‚αž„αž…αŸ‚αž€ LMDB αž–αžΈ SQLite αžŠαžΌαž…αž‚αŸ’αž“αžΆ αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αž’αŸ†αž“αž½αžαž–αžΈαž—αžΆαž–αž―αž€αŸ„αžŸαžšαž»αž”αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αžŠαŸ„αž™αž”αžΆαž“αž”αžΎαž€αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαž›αž€αŸ’αžšαŸ„αž™ αž αžΎαž™αž”αžΆαž“αž›αž»αž”αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸ αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αžΈαž–αžΈαžšαžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ”

αž•αŸ’αž“αŸ‚αž€αžαŸ’αžšαž‘αž”αŸ‹αž“αŸƒαž€αžΆαž€αŸ‹αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž€αŸ’αžŠαžΆαž“αž»αž–αž›αžαŸ’αž–αžŸαŸ‹αž“αŸƒαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αž·αž˜αŸ’αž˜αž·αžαŸ” αžŸαŸ’αž›αžΆαž™αž”αž„αŸ’αž αžΆαž‰αžαžΆαžαžΎαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αžΉαž„αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž˜αŸ’αžŠαŸαž… αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αžΆαž“αž…αŸ†αž“αž½αž“ 3 αžŠαŸ‚αž›αž”αžΎαž€αž˜αžΎαž›αž€αŸ†αžŽαŸ‚αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αžŠαŸ„αž™αžŸαžΆαžš LMDB αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“αž–αžΈαž«αžŸαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΆαž„αž˜αž·αž“αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž’αŸ’αžœαžΈαž€αŸ’αžšαŸ…αž–αžΈαž”αŸ‚αž„αž…αŸ‚αž€αž«αžŸαž‘αžΈαž”αž½αž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž· αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž€αŸ’αž›αžΌαž“αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αž“αŸ…αž€αŸ’αžšαŸ„αž˜αžœαžΆαŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ†αž›αžΉαž€αž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž•αŸ’αž“αŸ‚αž€αž“αŸ…αž›αžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αžœαžΆαž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž“αŸƒαžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αžαž˜αž·αž“αž‚αž½αžšαž–αŸ’αžšαž½αž™αž”αžΆαžšαž˜αŸ’αž—αž™αžΎαž„αž…αŸ’αžšαžΎαž“αž“αŸ„αŸ‡αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž˜αž·αž“αž”αžΆαž“αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αžŠαž›αŸ‹αž€αžΆαžšαž…αž„αž…αžΆαŸ†αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ„αŸ‡αž‘αŸαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αž˜αžΆαž“αž—αžΆαž–αžαžΉαž„αžαŸ‚αž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžœαžΆ αž αžΎαž™αž™αžΎαž„αž˜αž·αž“αž’αžΆαž… αžŠαžΌαž…αž‡αžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž¬αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž›αžΎαžαž» αž•αŸ’αžαž›αŸ‹αžαŸ†αž”αž“αŸ‹ LMDB αž“αŸƒ 1 αžαŸαžšαŸ‰αžΆαž”αŸƒ αž αžΎαž™αž˜αž·αž“αž‚αž·αžαž–αžΈαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž”αžΎαž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž™αŸˆαž–αŸαž›αžαŸ’αž›αžΈαžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ”

4. αž€αžΆαžšαžšαž…αž“αžΆαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ key-value API

αž…αžΌαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžœαž·αž—αžΆαž‚ API αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ„αž™αž˜αžΎαž›αž€αžΆαžšαžŸαž„αŸ’αžαŸαž”αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ LMDB: αž”αžšαž·αžŸαŸ’αžαžΆαž“ αž“αž·αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž€αžΌαž“αžŸαŸ„ αž“αž·αž„αžαž˜αŸ’αž›αŸƒ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αŸ”

αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž’αŸ†αž–αžΈαž”αž‰αŸ’αž‡αžΈαž€αžΌαžŠ

αž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ LMDB API αžŸαžΆαž’αžΆαžšαžŽαŸˆαžαŸ’αžšαž‘αž”αŸ‹αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž€αžΌαžŠαž€αŸ†αž αž»αžŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αžΆαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž—αžΆαž–αžαŸ’αž›αžΈαŸ” សម αž€αž‰αŸ’αž…αž”αŸ‹ C++ lmdbxxαžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αž€αŸ†αž αž»αžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„ C ++ αŸ”

αž‡αžΆαžœαž·αž’αžΈαž›αžΏαž“αž”αŸ†αž•αž»αžαžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹ LMDB αž‘αŸ…αž“αžΉαž„αž‚αž˜αŸ’αžšαŸ„αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ iOS ឬ macOS αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ† CocoaPod αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† POSLMDB.

4.1. αž’αžšαžΌαž”αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“

αž”αžšαž·αžŸαŸ’αžαžΆαž“

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ MDB_env αž‚αžΊαž‡αžΆαžƒαŸ’αž›αžΆαŸ†αž„αž“αŸƒαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹ LMDB αŸ” αž‚αŸ’αžšαž½αžŸαžΆαžšαž˜αž»αžαž„αžΆαžšαž”αž»αž–αŸ’αžœαž”αž‘ mdb_env αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αž αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ”

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 αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžαŸ’αžšαžΉαž˜αžαŸ‚αž–αžΈαžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž‘αžΈαž˜αž½αž™αž‚αžΊαž‡αžΆαž‘αŸ†αž αŸ†αž“αŸƒαž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αž―αž€αžŸαžΆαžšαž•αŸ’αž‘αž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΌαžŸαžœαžΆαžŸαŸ” αž‡αžΆαž’αž€αž»αžŸαž› αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαžŠαžΌαž…αž‚αŸ’αž“αžΆ αžαž˜αŸ’αž›αŸƒαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž’αžΆαž…αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž–αžΈαž€αžΆαžšαžšαžαŸ‹αž‘αŸ…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž™αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹ iOS αž“αŸαŸ‡ αž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αž’αžαž·αž”αžšαž˜αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αžαžΆαž˜αžœαž“αŸ’αžαŸ” αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαžαž˜αŸ’αž›αŸƒαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžšαž αžΌαžαžŠαž›αŸ‹αž˜αž»αžαž„αžΆαžš mdb_env_open αž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαž‘αž”αŸ‹αž›αž‘αŸ’αž’αž•αž›αžαž»αžŸαž–αžΈ ENOMEM. αžαžΆαž˜αž‘αŸ’αžšαžΉαžŸαŸ’αžŠαžΈαž€αŸαž˜αžΆαž“αžœαž·αž’αžΈαž•αŸ’αž‘αž»αž™αžŠαŸ‚αžš - αžŠαŸ†αž”αžΌαž„αžαŸ’αžšαžΌαžœαž”αŸ‚αž„αž…αŸ‚αž€αž’αž”αŸ’αž”αžšαž˜αžΆαž“αŸƒαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αŸ…αž–αŸαž›αž‘αž‘αž½αž›αž€αŸ†αž αž»αžŸαŸ” MDB_MAP_FULL, αž”αž„αŸ’αž€αžΎαž“αžœαžΆαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αžœαžΆαž˜αžΆαž“αž”αž“αŸ’αž›αžΆαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αŸ” αž αŸαžαž»αž•αž›αž‚αžΊαžαžΆαž“αžΈαžαž·αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‘αžΎαž„αžœαž·αž‰ (remap) αžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžš mdb_env_set_map_size αž’αŸ’αžœαžΎαž±αŸ’αž™αž’αž„αŸ’αž‚αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αžΆαž“αžŸαž»αž–αž›αž—αžΆαž– (αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž… αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžŸαŸ„ αž“αž·αž„αžαž˜αŸ’αž›αŸƒ) αžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž›αž–αžΈαž˜αž»αž“αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αž€αžΆαžšαž‘αž‘αž½αž›αž™αž€αžœαŸαž“αž“αŸƒαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž“αžΉαž„αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž•αž›αžœαž·αž”αžΆαž€αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž”αžΎαž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆ αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αž·αž˜αŸ’αž˜αž·αžαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€ αž“αŸ„αŸ‡αž’αžΆαž…αž‡αžΆαž αŸαžαž»αž•αž›αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαžŸαž˜αžŠαŸ‚αž›αž”αžΆαž“αž‘αŸ…αž†αŸ’αž„αžΆαž™αŸ” MDBXαžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαž˜αžΆαž“ "αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœαž‘αŸ†αž αŸ†αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·" αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αžΈαž–αžΈαžšαžŠαŸ‚αž›αž‡αžΆαžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŠαŸ‚αž›αž˜αž·αž“αžŸαž˜αž“αžΉαž„αž™αžΎαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž™αž“αŸ’αžαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž’αžΆαž“αžΆαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αŸ” αž‡αžΆαž’αž€αž»αžŸαž› αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS 10 αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαžƒαŸ’αž›αžΆαŸ†αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αž‡αžΆαž˜αž½αž™αž‘αž„αŸ‹ MDB_NOTLS. αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž“αŸαŸ‡αžœαžΆαž€αŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž•αž„αžŠαŸ‚αžšαŸ” សម αžšαž»αŸ† C++ 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 αž‚αŸ†αžšαžΌαž‚αŸ„αž›αž‚αŸ†αž“αž·αžαž“αŸƒαž‚αž“αŸ’αž›αžΉαŸ‡ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαŸ” αžƒαŸ’αž›αžΆαŸ†αž„αž˜αž·αž“αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž’αŸ†αž–αžΈαž’αžαŸ’αžαž“αŸαž™αžšαž”αžŸαŸ‹αžœαžΆαž‘αŸαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžΆαž„ αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž’αžΆαžšαŸαž“αŸƒαž”αŸƒαž“αŸƒαž‘αŸ†αž αŸ†αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ” αž‘αŸ†αž αŸ†αž‚αž“αŸ’αž›αžΉαŸ‡αž’αžαž·αž”αžšαž˜αžΆαž‚αžΊ 512 αž”αŸƒαŸ”

typedef struct MDB_val {​
    size_t mv_size;​
    void *mv_data;​
} MDB_val;​​

αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž αžΆαž„αžαž˜αŸ’αžšαŸ€αž”αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž‘αžΎαž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž‡αŸ†αž“αž½αžŸαžœαžΆαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ αž“αŸ„αŸ‡αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžŠαŸ‚αž›αžαž˜αŸ’αžšαŸ€αž”αž–αž½αž€αžœαžΆαž‡αžΆαž”αŸƒαž”αŸƒαž”αŸƒαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”β€‹

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ αž‡αŸ†αž–αžΌαž€αž˜αž»αž“αŸ”αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ–

  1. αž‚αžΆαŸ†αž‘αŸ’αžšαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž‘αžΉαž€αž’αžΆαžŸαŸŠαžΈαžŠαŸ– αž’αžΆαžαžΌαž˜αž·αž… αž—αžΆαž–αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹ αž—αžΆαž–αž―αž€αŸ„ αž“αž·αž„αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž‡αž½αž™αž”αžΆαž“αž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αŸ†αžŽαžΆαŸ†αžαžΆαž˜αžΆαž“αž€αŸ†αž αž»αžŸαž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž—αžΆαž–αž’αž“αŸ‹αž“αŸ…αž›αžΎ macOS αž“αž·αž„ iOS αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αžŸαž‡αž»αž›αž“αŸ…αž€αŸ’αž“αž»αž„ MDBX αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αž‚αŸαŸ” README.
  2. αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸƒαž€αžΆαžšαž’αžΆαž“αž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžŠαŸ„αž™αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ "αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαžαŸ‚αž˜αž½αž™ / αž’αŸ’αž“αž€αž’αžΆαž“αž…αŸ’αžšαžΎαž“" αŸ” αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αžšαžΆαžšαžΆαŸ†αž„αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αž»αŸ†αžšαžΆαžšαžΆαŸ†αž„αž’αŸ’αž“αž€αž’αžΆαž“αŸ” αž’αŸ’αž“αž€αž’αžΆαž“αž˜αž·αž“αžšαžΆαžšαžΆαŸ†αž„αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž¬αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αž‘αŸαŸ”
  3. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž‡αžΆαž”αŸ‹αž‚αžΆαŸ†αž„αŸ”
  4. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž–αž αž»αž€αŸ†αžŽαŸ‚αŸ”

Multiversion αž“αŸ…αž€αŸ’αž“αž»αž„ LMDB αž‚αžΊαž›αŸ’αž’αžŽαžΆαžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž”αž„αŸ’αž αžΆαž‰αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ” αž–αžΈαž€αžΌαžŠαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžαžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸ…αž–αŸαž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€ αžŠαŸ„αž™αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž–αžΈαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž•αŸ’αž‘αž»αž€ αž“αž·αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŸαžΆαž€αž›αŸ’αž”αž„αž‘αŸ…αžœαžΆαž˜αž·αž“αžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αŸ„αŸ‡αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž–αž·αž’αžΈαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž»αž€αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž”αž„αŸ’αžαžΌαž…αŸ”

αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αžŸαžΆαž€αž›αŸ’αž”αž„

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);

αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž’αŸ’αž“αž€αžŸαžΆαž€αž›αŸ’αž”αž„αž›αŸ’αž”αž·αž…αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ SQLite αž αžΎαž™αž˜αžΎαž›αžαžΆαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αŸ”

Multiversion αž“αžΆαŸ†αž˜αž€αž“αžΌαžœαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŠαž›αŸ‹αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ iOS αŸ” αžŠαŸ„αž™αž”αŸ’αžšαžΎαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž’αžαŸ’αžšαžΆαž’αžΆαž”αŸ‹αžŠαŸαžαž“αŸƒαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αžŠαŸ„αž™αž’αž˜αŸ’αž˜αž‡αžΆαžαž· αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž…αžΌαžšαž™αžΎαž„αž™αž€αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Mail.ru Cloud αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž˜αžΆαžαž·αž€αžΆαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž–αžΈαžœαž·αž…αž·αžαŸ’αžšαžŸαžΆαž›αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸαž›αŸ’αž’ αž’αžαž·αžαž·αž‡αž“αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αžšαžΌαž”αžαžαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž‘αžΆαž‰αž™αž€αž“αžΈαž˜αž½αž™αŸ— UICollectionView αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αžΆαžαž·αž€αžΆαž˜αŸαžŒαŸ€αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž–αž€αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ αž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž›αŸαž…αž’αŸ†αž–αžΈ 60 fps αž“αž·αž„αž€αžΆαžšαžšαž˜αžΌαžšαžŠαŸ„αž™αžšαž›αžΌαž“αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž’αŸαž€αŸ’αžšαž„αŸ‹αž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžšαžΆαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ UICollectionViewDataSource.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αž…αŸ’αžšαžΎαž“ αž αžΎαž™αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαžαŸ‚αž‡αžΆαž˜αž½αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž“αŸ„αŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αžαžαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž–αŸαž›αžœαŸαž›αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αž˜αŸ’αž›αž„αžœαžΆαž‘αŸ…αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž¬αž‘αŸ…αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŽαžΆαž˜αž½αž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαžŽαžΆαžŸαŸ‹αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αž‘αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αžŠαŸ‚αž›αž”αžŽαŸ’αžαžΆαž›αž˜αž€αž–αžΈαž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹ αž“αž·αž„αž‘αžΆαž“αŸ‹αž–αŸαž›αžœαŸαž›αžΆ αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„ ORM αžŠαŸ‚αž›αž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαž‘αŸ…αž‘αŸ€αžαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžšαžΈαž€αžšαžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαž‡αžΆαž„αž“αŸαŸ‡ αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αž›αŸ‹αž”αžΆαž“αžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αž αž»αž”αŸ†αžšαŸ‚αž”αŸ†αžšαž½αž›αžšαž”αžŸαŸ‹ LMDB αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αž’αžΈαžŠαŸαž†αžΎαžαž†αžΆαž™αž”αŸ†αž•αž»αžαŸ” αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„ voila - αžšαž αžΌαžαžŠαž›αŸ‹αž™αžΎαž„αž”αž‰αŸ’αž…αž”αŸ‹αžœαžΆ αžŸαŸ†αžŽαž»αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αžŸαž‡αž»αž›αŸ” αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αŸ’αž”αžΏαž“αž’αžΆαž”αŸ‹αžŠαŸαžαžšαž”αžŸαŸ‹αžœαžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡αž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸƒαž“αŸƒαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž”αž‘αž”αž„αŸ’αž αžΆαž‰αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ αžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž’αž“αž’αžΆαž“αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž›αžΎαžŸαž›αž»αž”αž“αŸ„αŸ‡αž‘αŸαŸ”

αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…

αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αž•αŸ’αžαž›αŸ‹αž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αžΎαž„αžœαž·αž‰αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αžΎαž‚αžΌαžαž˜αŸ’αž›αŸƒαž‚αž“αŸ’αž›αžΉαŸ‡αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž˜αŸ‚αž€αž’αžΆαž„ B αŸ” αž”αžΎαž‚αŸ’αž˜αžΆαž“αž–αž½αž€αžœαžΆαž‘αŸ αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž‚αŸ†αžšαžΌαžαžΆαžšαžΆαž„αž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ‚αž›αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž„αžΆαž€αž‘αŸ…αžšαž€αŸ”

ៀ.្. αž‚αŸ†αžšαžΌαžαžΆαžšαžΆαž„

αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž‚αž“αŸ’αž›αžΉαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž’αžšαžΌαž”αžΈαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αžŠαžΌαž…αž‡αžΆαžαžΆαžšαžΆαž„αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ abstractions αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ” αž…αžΌαžšαž™αžΎαž„αž–αž·αž…αžΆαžšαžŽαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžαžΆαžšαžΆαž„αž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž–αž–αž€ αžŠαŸ‚αž›αž•αŸ’αž‘αž»αž€αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž―αž€αžŸαžΆαžš αž“αž·αž„αžαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„

αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž‘αžΌαž‘αŸ…αž˜αž½αž™ αžŠαŸ‚αž›αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αžαžΆαžšαžΆαž„αž‡αžΆαž˜αž½αž™αž˜αŸ‚αž€αž’αžΆαž„αžαžαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž‚αžΊαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αžΆαžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ” αž‚αŸ†αžšαžΌαž’αž„αŸ’αž‚αž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαž½αžšαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž“αŸαŸ‡αž‚αžΊ αž”αž‰αŸ’αž‡αžΈαž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆαŸ”. αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžœαžΆαž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αž»αž€αžαž˜αŸ’αž›αŸƒαžŸαŸ„αžš αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαž˜αŸ’αžšαŸ€αž”αžŸαŸ„αž“αŸƒαž―αž€αžŸαžΆαžš αž“αž·αž„αžαžαžαžΆαž˜αžšαž”αŸ€αž”αžŠαŸ‚αž›αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžŸαž˜αžΆαž‡αž·αž€αž—αžΆαž–αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž˜αŸαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαžαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹αž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαžΈαž“αžŠαžΌ (αžαžαžŠαŸ†αž”αžΌαž„ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž―αž€αžŸαžΆαžš αž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž”αžαžΆαž˜αž’αž€αŸ’αžαžšαž€αŸ’αžšαž˜) αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž…αžΌαž›αžœαžΆαž›αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ„αŸ”

αžšαžΌαž”αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž” αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸ…αžŠαŸƒ αžαŸ†αžŽαžΆαž„αž“αŸƒαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž’αžΆαžšαŸαž”αŸƒαž’αžΆαž…αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αŸ” αž”αŸƒβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž’αŸ’αž“αž€β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽβ€‹αž“αŸƒβ€‹αžαžβ€‹αž˜αŸ (αž€αŸ’αžšαž αž˜) αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŠαžΆαž€αŸ‹β€‹αž‡αžΆβ€‹αž˜αž»αž“ αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž‡αžΆαž˜αž½αž™β€‹αž”αŸ’αžšαž—αŸαž‘ (αž”αŸƒαžαž„) αž“αž·αž„β€‹αž“αŸ…β€‹αž€αž“αŸ’αž‘αž»αž™β€‹αž‡αžΆαž˜αž½αž™β€‹αžˆαŸ’αž˜αŸ„αŸ‡ (αžαŸ€αžœ)αŸ”β€‹ αžŠαŸ„αž™β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžαž˜αŸ’αžšαŸ€αž”β€‹αžαžΆαž˜β€‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαŸ€αž”αž’αŸ€αž” LMDB αžαžΆαž˜β€‹αž›αŸ†αžŠαžΆαž”αŸ‹ lexicographical αž–αž½αž€β€‹αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžαž˜αŸ’αžšαŸ€αž”β€‹αž€αŸ’αž“αž»αž„ αžšαž”αŸ€αž”αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αž»αž–αŸ’αžœαž”αž‘αž–αžŽαŸŒαž€αŸ’αžšαž αž˜αžŠαžΌαž…αž‚αŸ’αž“αžΆαž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ (αž“αŸ…αžαžΆαž„αžŸαŸ’αžαžΆαŸ†) αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αžšαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžŸαŸ€αžšαŸ€αž›αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž… αž“αž·αž„αžαž˜αŸ’αž›αŸƒ

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ€αžšαŸ€αž›αžœαžαŸ’αžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž›αžΎαž–αž·αž—αž–αž›αŸ„αž€αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž˜αž·αž“αž˜αžΆαž“αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž€αŸ’αžšαŸ…αž–αžΈαž›αŸ’αž”αžΏαž“ αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž›αžΏαž“αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž™αžΎαž„ - αž€αž“αŸ’αž›αŸ‚αž„αž…αŸ„αž›αž“αŸƒαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αžŠαŸ„αž™αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž—αžΆαžŸαžΆ 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
    };
}

αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž–αžΌαž€αž‘αžΈ 1 αžŸαŸ’αžαžΈαž–αžΈαž›αž€αŸ’αžαžŽαŸˆαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž“αŸƒαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž’αŸ†αž–αžΈαž€αžΆαžšαž”αž„αŸ’αžšαž½αž˜αž’αž”αŸ’αž”αž”αžšαž˜αžΆαž“αŸƒαž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš CRUD αž‡αžΆαž€αžαŸ’αžαžΆαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αŸ” αž›αŸαžαž€αžΌαžŠαž˜αž»αžαž„αžΆαžš serialize αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ LMDB αž–αž½αž€αž‚αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ€αžŸαžœαžΆαž„αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž…αžΌαž›αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžαŸ’αž˜αžΈαž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž’αžΆαžšαŸαž”αŸƒαž”αŸƒαžŠαŸ‚αž›αž…αžΌαž›αž˜αž€αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ†αž”αžΌαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αŸ…αž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αž„αŸ‹ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž…αŸ„αž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αŸ” αžŠαŸ„αž™αž–αž·αž…αžΆαžšαžŽαžΆαžαžΆαž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„ LMDB αž‘αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž˜αž½αž™αžŠαŸ„αž™αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS - αž”αŸ’αžšαžΎαžαŸ‚αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‡αž„αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž˜αž”αžŽαŸ’αžαŸ„αž™αž•αŸ’αž›αžΌαžœαž‘αžΆαŸ†αž„αž˜αžΌαž›αž–αžΈαž”αžŽαŸ’αžαžΆαž‰αž‘αŸ…αžŒαžΈαžŸ!

αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš

αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž‚αž“αŸ’αž›αžΉαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŠαŸ„αž™αž˜αž»αžαž„αžΆαžšαž–αž·αžŸαŸαžŸαž˜αž½αž™αž αŸ…αžαžΆ αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αž·αž“αžŠαžΉαž„αž’αŸ’αžœαžΈαž’αŸ†αž–αžΈαž’αžαŸ’αžαž“αŸαž™αž“αŸƒαž”αŸƒαžŠαŸ‚αž›αž–αž½αž€αžœαžΆαž˜αžΆαž“ αž’αŸ’αž“αž€αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αŸ’αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž’αŸ’αžœαžΈαž€αŸ’αžšαŸ…αž–αžΈαžšαŸ€αž”αž…αŸ†αžŸαŸ„αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αžŠαŸ„αž™αž„αžΆαž€αž‘αŸ…αžšαž€αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸƒαž”αŸƒαŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„αž€αŸ„αžšαžŸαž€αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΌαžαŸ…αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŸαžΆαž˜αž‰αŸ’αž‰αžαŸ’αž‰αž»αŸ†αž™αž›αŸ‹αžαžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αŸ” αž‡αž˜αŸ’αžšαžΎαžŸβ€‹αž“αŸαŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž–αž·αž–αžŽαŸŒαž“αžΆβ€‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαŸ’αž‰αž»αŸ†β€‹αž“αžΉαž„β€‹αž€αžαŸ‹β€‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹β€‹αž“αžΌαžœβ€‹αžαž»αž„αžšαž½αž…β€‹αž–αžΈαžšβ€‹αž”αžΈβ€‹αžŠαŸ‚αž›β€‹αžšαžΆαž™αž”αŸ‰αžΆαž™β€‹αžαžΆαž˜β€‹αž•αŸ’αž›αžΌαžœβ€‹αž“αŸαŸ‡αŸ”

αžšαžΏαž„αžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αž‚αžΊαž€αžΆαžšαžαŸ†αžŽαžΆαž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž‹αž˜αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸ Apple αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž’αžαŸαžšαž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹ αžαžΌαž…αž’αŸαž“αžŒαŸ€αž“. αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ αž”αŸƒαžŠαŸ‚αž›αžŸαŸ†αžαžΆαž“αŸ‹αžαž·αž…αž”αŸ†αž•αž»αžαž“αžΉαž„αž“αŸ…αžαžΆαž„αž†αŸ’αžœαŸαž„ αž αžΎαž™αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αžαž˜αŸ’αžšαŸ€αž”αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸƒαž”αŸƒαž”αŸƒαž“αŸ„αŸ‡αž‘αŸαŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž›αŸαžαž–αžΈ 0 αžŠαž›αŸ‹ 511 αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž•αž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

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

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž€αžΌαž“αžŸαŸ„αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αžŸαž˜αžšαž˜αŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸƒαž”αŸƒαŸ” αž˜αž»αžαž„αžΆαžšαž–αžΈαž‚αŸ’αžšαž½αžŸαžΆαžšαž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹ hton* (αž‡αžΆαž–αž·αžŸαŸαžŸ htons αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αŸαžαž–αžΈαžšαž”αŸƒαž–αžΈαž§αž‘αžΆαž αžšαžŽαŸ) αŸ”

αž‘αž˜αŸ’αžšαž„αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ†αžŽαžΆαž„αž±αŸ’αž™αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžŠαžΉαž„αž αžΎαž™αžαžΆαž‘αžΆαŸ†αž„αž˜αžΌαž› αž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαžΆαžŸαŸ’αžšαŸ’αž. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžαŸ’αžαž“αŸαž™αž“αŸƒαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž’αŸŠαž·αž“αž€αžΌαžŠαžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž–αž½αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž”αž„αŸ’αž αžΆαž‰αžαžΆαž’αžΆαž…αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αž½αž™αž”αŸƒαž€αŸ’αž“αž»αž„αž˜αž½αž™αžαž½αž’αž€αŸ’αžŸαžš αž“αŸ„αŸ‡αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αž—αŸ’αž›αžΆαž˜αŸ—αž“αžΌαžœαž‚αŸ†αž“αž·αžαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

αžšαžΏαž„αž‘αžΈαž–αžΈαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αž‚αžΊ αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαž˜αŸ’αžšαžΉαž˜ αž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„αžœαžΆαž›αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž–αž½αž€αž‚αŸ αž”αŸƒαžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžšαžΆαž˜αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαžœαžΆαž„αžœαžΆαž› αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαž–αž·αž αž”αŸ†αž”αŸ‚αž€αž€αžΆαžšαžαž˜αŸ’αžšαŸ€αž”αž”αŸƒαž”αŸƒαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αžŸαŸ†αžšαžΆαž˜ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαž€αžΆαžŸαžœαžΆαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž™αŸ‰αžΆαž„αžαžΉαž„αžšαŸ‰αžΉαž„ αžšαž€αŸ’αžŸαžΆαž…αŸ’αž”αžΆαž”αŸ‹αžαž˜αŸ’αžšαžΉαž˜αž€αŸ’αž“αž»αž„αž…αž·αžαŸ’αž αž¬αž”αŸ’αžšαžΎαž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ packed.

αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αžŸαŸ„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαžΆαž„αž€αŸ’αžšαŸ…

αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž’αžΆαž…αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž–αŸαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαŸ” αž αŸαžαž»αž•αž›αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž αŸαžαž»αž•αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž‚αžΊαžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαž•αŸ’αž“αŸ‚αž€αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž‚αž“αŸ’αž›αžΉαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžΆαžαž»αžαžαžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹αž™αžΎαž„αžšαž½αž…αž αžΎαž™

typedef struct NodeKey {​
    EntityId parentId;​
    uint8_t type;​
    uint8_t nameBuffer[256];​
} NodeKey;

αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰αžšαž”αžŸαŸ‹αžœαžΆαž€αŸαžŠαŸ„αž™ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαž…αž„αž…αžΆαŸ†αž…αŸ’αžšαžΎαž“αž–αŸαž€αŸ” αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αžšαžΌαžœαž€αžΆαžš 256 αž”αŸƒ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž‡αžΆαž˜αž’αŸ’αž™αž˜αž―αž€αžŸαžΆαžš αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αžαžαž€αž˜αŸ’αžšαž˜αžΆαž“αž›αžΎαžŸαž–αžΈ 20-30 αžαž½αž’αž€αŸ’αžŸαžšαŸ”

αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŸαŸ’αžŠαž„αŸ‹αžŠαžΆαžšαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‘αŸ†αž αŸ†αž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‚αžΊ "αž€αžΆαžαŸ‹" αžœαžΆαž‘αŸ…αž‘αŸ†αž αŸ†αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαžαžΆ αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžœαžΆαž›αž”αŸ’αžšαžœαŸ‚αž„αž’αžαŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž αžΎαž™αž”αŸ’αžšαžœαŸ‚αž„αžšαž”αžŸαŸ‹αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž’αžαŸαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž™αŸ„αž„αžαžΆαž˜αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡ αž‚αž“αŸ’αž›αžΉαŸ‡ NodeKey αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

typedef struct NodeKey {​
    EntityId parentId;​
    uint8_t type;​
    uint8_t nameLength;​
    uint8_t nameBuffer[256];​
} NodeKey;

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαžŸαŸ€αžšαŸ€αž› αž‘αŸ†αž αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αŸαŸ” sizeof αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž› αž“αž·αž„αž‘αŸ†αž αŸ†αž“αŸƒαžœαžΆαž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž‡αžΆαž”αŸ’αžšαžœαŸ‚αž„αžαŸαžš αž”αžΌαž€αž“αžΉαž„αž‘αŸ†αž αŸ†αž“αŸƒαž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸƒαžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αŸ”

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

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžš refactoring αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαžŸαž“αŸ’αžŸαŸ†αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αžŠαŸ‚αž›αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αžŠαŸ„αž™αžŸαŸ„αŸ” αž‘αŸ„αŸ‡β€‹αž‡αžΆβ€‹αž™αŸ‰αžΆαž„β€‹αžŽαžΆβ€‹αžŠαŸ„αž™β€‹αžŸαžΆαžšβ€‹αžαŸ‚β€‹αžœαž·αžŸαŸαž™β€‹αž”αž…αŸ’αž…αŸαž€β€‹αž‘αŸαžŸ 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 // ...
}​

αžŠαžšαžΆαž”αžŽαžΆαž€αžΌαž“αžŸαŸ„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αžŠαžΌαž…αž‚αŸ’αž“αžΆ αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αžαŸ†αžŽαžΆαž„αž”αŸƒαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αŸ…αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαžŸαŸ’αžšαž”αž…αŸ’αž”αžΆαž”αŸ‹αŸ” αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž”αŸ’αž›αŸ‚αž€αž‚αŸ’αž“αžΆαž˜αž½αž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžšαž„ "αž€αžΆαžšαž’αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ"αŸ”

αžŸαŸ€αžšαŸ€αž›αžαž˜αŸ’αž›αŸƒ

LMDB αž’αŸ’αžœαžΎαž€αžΆαžšαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ„αž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ” αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŽαžΆαž˜αž½αž™ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΆαŸ†αž„αž˜αžΌαž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž›αŸ’αž”αžΏαž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αžŠαŸαž›αŸ’αž’αž˜αž½αž™ αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αž½αžšαžαŸ‚αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžŸαŸ„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αŸ„αŸ‡αž“αžΈαžαž·αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ deserializing keys αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž‚αž½αžšαžαŸ‚αž›αžΏαž“αžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž·αž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž‡αžΆαž–αž·αžŸαŸαžŸαž…αŸ†αž–αŸ„αŸ‡αž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αžαž˜αŸ’αž›αŸƒ) αž‘αŸαŸ” αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžšαž”αžŸαŸ‹αžœαžΆαž–αžΈαžαŸ†αžŽαžΆαž„αž”αŸƒαž‘αŸ…αžœαžαŸ’αžαž»αž€αžΎαžαž‘αžΎαž„αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαžšαž½αž…αž αžΎαž™αžŠαŸ„αž™αž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αžœαžΆαž“αŸ…αž›αžΎαž’αŸαž€αŸ’αžšαž„αŸ‹αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžœαžΆαž€αžΎαžαž‘αžΎαž„αž€αž˜αŸ’αžšαžŽαžΆαžŸαŸ‹ αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž›αŸ’αž”αžΏαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžΈαžαž·αžœαž·αž’αžΈαž“αŸαŸ‡αž‚αžΊαž˜αž·αž“αžŸαžΌαžœαžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸ αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αžœαžΆ αž™αžΎαž„αž˜αžΆαž“αžŸαŸαžšαžΈαž—αžΆαž–αž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αžαŸ„αžαž›αžΎαž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαž‡αžΆαžŸαŸŠαŸαžšαžΈαž’αŸ†αž–αžΈαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž‘αžΆαž‰αž™αž€ αž™αžΎαž„αž”αŸ’αžšαžΎ NSKeyedArchiver.

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

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αžΆαž“αž–αŸαž›αžαŸ’αž›αŸ‡αžŠαŸ‚αž›αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸ…αžαŸ‚αžŸαŸ†αžαžΆαž“αŸ‹αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž–αŸαž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž―αž€αžŸαžΆαžš metainformation αž’αŸ†αž–αžΈαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž“αŸƒαž–αž–αž€αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž™αžΎαž„αž”αŸ’αžšαžΎαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒαžœαžαŸ’αžαž»αŸ” αž€αžΆαžšαž”αž“αŸ’αž›αž·αž…αž“αŸƒαž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžαŸ†αžŽαžΆαž„αžŸαŸ€αžšαŸ€αž›αž“αŸƒαž–αž½αž€αžœαžΆαž‚αžΊαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž’αžΆαžαž»αž“αŸƒαžαžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž€αž‚αŸ†αžšαžΌαžαžΆαž˜αž‹αžΆαž“αžΆαž“αž»αž€αŸ’αžšαž˜αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆ C αžœαžΆαž›αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž’αŸ’αž“αž€αž‘αž‘αž½αž›αž˜αžšαžαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž αžΎαž™αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαžΆαž˜αžšαž™αŸˆαžœαžΆαž›αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αžŸαž αž‡αžΈαž–αŸ” αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒαžŸαž αž‡αžΈαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαž—αŸαž‘αž›αž€αŸ’αžαžŽαŸˆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαŸ”

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

αž”αž“αŸ’αžαŸ‚αž˜αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ

αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžŸαŸ€αžšαŸ€αž› αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž αžΆαž„αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αžŸαžΌαž˜αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžš mdb_put.

// key ΠΈ value ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ MDB_val​
mdb_put(..., &key, &value, MDB_NOOVERWRITE);

αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαž αž¬αž αžΆαž˜αžƒαžΆαžαŸ‹αž˜αž·αž“αž±αŸ’αž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž…αŸ’αžšαžΎαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαŸ„αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž…αž˜αŸ’αž›αž„αžŸαŸ„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹ αž“αŸ„αŸ‡αž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž…αžΌαž›αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžαžΆαžαžΎαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž¬αž’αžαŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž”αŸ’αžšαŸαŸ‡αžŸαŸ’αžšαžΆαŸ†αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž€αžΆαžšαž–αžΆαžšαžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž–αžΈαžœαžΆαžŠαŸ„αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αž„αŸ‹αŸ” 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;​
}

αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžŸαŸ€αžšαŸ€αž›αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž”αŸ„αŸ‡αž…αŸ„αž›αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αž˜αŸ’αž…αžΆαžαŸ‹αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžαžΆαž˜αžœαž“αŸ’αžαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž”αžΆαž“αž˜αž€αž–αžΈαž˜αž»αžαž„αžΆαžš mdb_get αž‘αŸ’αžšαž“αž·αž…αž˜αžΎαž›αž‘αŸ…αž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŸαžαž·αž“αž·αž˜αŸ’αž˜αž·αž αžŠαŸ‚αž›αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ†αžŽαžΆαž„αž”αŸƒαž“αŸƒαžœαžαŸ’αžαž»αŸ” αžαžΆαž˜αž–αž·αžαž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž”αŸ’αžšαž—αŸαž‘ ORM αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž›αŸ’αž”αžΏαž“αž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž–αžŸαŸ‹αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž˜αž·αž“αž‚αž·αžαžαŸ’αž›αŸƒαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž€αŸαžŠαŸ„αž™αž€αŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αž“αžΌαžœαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αžœαžΆαŸ”

  1. αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αžΆαž“αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž‘αŸ’αžšαž“αž·αž…αž‘αŸ…αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžαžΆαž“αŸ…αžαŸ‚αž˜αžΆαž“αžŸαž»αž–αž›αž—αžΆαž–αžšαž αžΌαžαžŠαž›αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž–αžΈαž˜αž»αž“ αž‘αŸ†αž–αŸαžš B-tree αžŠαŸ‚αž›αžœαžαŸ’αžαž»αž˜αž½αž™αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ… αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž…αž˜αŸ’αž›αž„αž›αžΎαž€αžΆαžšαžŸαžšαžŸαŸαžš αž“αŸ…αžαŸ‚αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαžšαžΆαž”αžŽαžΆαž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αŸ„αž„αžŠαŸ„αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž˜αž½αž™αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžŠαžšαžΆαž”αžŽαžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž‘αŸ†αž–αŸαžšαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΎαž„αžœαž·αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžαŸ’αžαž»αžŠαžΎαž˜αŸ’αž”αžΈαžšαžŸαŸ‹αžšαžΆαž“αž˜αžΆαž“αž‡αžΈαžœαž·αžαž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž“αŸ„αŸ‡αž–αž½αž€αž‚αŸαž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž…αž˜αŸ’αž›αž„αŸ”
  2. β€‹β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšβ€‹αžŸαžšαžŸαŸαžšβ€‹αž’αžΆαž“ αž‘αŸ’αžšαž“αž·αž…β€‹αž‘αŸ…β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž“αžΉαž„β€‹αž˜αžΆαž“β€‹αžŸαž»αž–αž›αž—αžΆαž–β€‹αžšαž αžΌαžβ€‹αžŠαž›αŸ‹β€‹αž“αžΈαžαž·αžœαž·αž’αžΈβ€‹αž€αŸ‚αž”αŸ’αžšαŸ‚β€‹αžŠαŸ†αž”αžΌαž„β€‹ (αžŸαžšαžŸαŸαžšβ€‹αž¬β€‹αž›αž»αž”β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™)αŸ”
  3. αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ NodeValue αž˜αž·αž“αž–αŸαž‰αž›αŸαž‰αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžαŸ‹ (αžŸαžΌαž˜αž˜αžΎαž›αž•αŸ’αž“αŸ‚αž€αžšαž„ "αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αžŸαŸ„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαžΆαž„αž€αŸ’αžšαŸ…") αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαžœαžΆαž›αžšαž”αžŸαŸ‹αžœαžΆαžŠαŸ„αž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžαžΆαž˜αžšαž™αŸˆαž‘αŸ’αžšαž“αž·αž…αŸ” αžšαžΏαž„αž…αŸ†αž”αž„αž‚αžΊαž€αž»αŸ†αž”αž„αŸ’αž’αž„αŸ‹αž™αžΌαžš!
  4. αž˜αž·αž“αžŸαŸ’αžαž·αžαž€αŸ’αžšαŸ„αž˜αž€αžΆαž›αŸˆαž‘αŸαžŸαŸˆαžŽαžΆαž€αŸαžŠαŸ„αž™ αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αžαžΆαž˜αžšαž™αŸˆαž‘αŸ’αžšαž“αž·αž…αžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž›αŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž‘αžΎαž„αžαžΆαž˜αžšαž™αŸˆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” mdb_put. αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αž·αž“αžαžΆαž’αŸ’αž“αž€αž…αž„αŸ‹αž’αŸ’αžœαžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸαŸ‡αž›αŸ†αž”αžΆαž€αž”αŸ‰αž»αžŽαŸ’αžŽαžΆαž“αŸ„αŸ‡αž‘αŸ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž“αŸ„αŸ‡αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αžαžΆαžαŸ†αž”αž“αŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡αžŸαŸ’αžαž·αžαž“αŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αžΆαž“αžαŸ‚αž’αžΆαž“αŸ”
  5. αžšαŸ€αž”αž…αŸ†αž―αž€αžŸαžΆαžšαž‘αžΎαž„αžœαž·αž‰αž‘αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αž’αžαž·αž”αžšαž˜αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžš mdb_env_set_map_size αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΆαž“αžŸαž»αž–αž›αž—αžΆαž–αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αž’αž„αŸ’αž‚αž—αžΆαž–αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‡αžΆαž‘αžΌαž‘αŸ… αž“αž·αž„αž…αž„αŸ’αž’αž»αž›αž‘αŸ…αžœαžαŸ’αžαž»αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ”

αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αž‘αŸ€αžαž‚αžΊαž’αžΆαž€αŸ’αžšαž€αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹ αžŠαŸ‚αž›αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž˜αž·αž“αžŸαž˜αž“αžΉαž„αž€αžαžΆαžαžŽαŸ’αžŒαž˜αž½αž™αž‘αŸ€αžαž‘αŸαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž–αžΌαž€αž’αŸ†αž–αžΈαžŠαžΎαž˜αžˆαžΎ B αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž•αŸ’αžŠαž›αŸ‹αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž…αžΆαŸ†αŸ” αžœαžΆαž’αŸ’αžœαžΎαžαžΆαž˜αž–αžΈαž“αŸαŸ‡αžŠαŸ‚αž›αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸƒαžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ€αžšαŸ€αž›αž’αžΆαž…αž”αŸ†αž–αžΆαž“αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž“αŸαŸ‡αž‘αŸ’αžšαž“αž·αž…αž‘αŸ…αž–αž½αž€αž‚αŸαž”αžΆαž“αž‘αž‘αž½αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ MDB_val αž αžΎαž™αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž‘αŸ…αž‡αžΆαž‘αŸ’αžšαž“αž·αž…αž‘αŸ…αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™ αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž˜αž·αž“αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΌαž‘αŸ…αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡ αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž“αŸƒαž”αž“αŸ’αž‘αŸ‡αžˆαžΈαž”αž˜αž½αž™αž…αŸ†αž“αž½αž“ (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ iOS αž“αŸαŸ‡αž‚αžΊ armv7) αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŽαžΆαž˜αž½αž™αž‡αžΆαž–αž αž»αž‚αž»αžŽαž“αŸƒαž‘αŸ†αž αŸ†αž“αŸƒαž–αžΆαž€αŸ’αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž¬αž“αž·αž™αžΆαž™αž˜αŸ’αž™αŸ‰αžΆαž„αž‘αŸ€αž αž‘αŸ†αž αŸ†αž”αŸŠαžΈαžαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’ ( αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ armv7 αžœαžΆαž‚αžΊ 32 αž”αŸŠαžΈαž) αŸ” αž“αž·αž™αžΆαž™αž˜αŸ’αž™αŸ‰αžΆαž„αž‘αŸ€αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαžΌαž…αž‡αžΆ *(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 αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž’αžšαžΌαž”αžΈαž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαž›αžΎαž–αž–αž€αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹αž™αžΎαž„αžšαž½αž…αž αžΎαž™αŸ”

αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž”αž‰αŸ’αž‡αžΈαž―αž€αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž˜αž½αž™ αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΌαž“αžŸαŸ„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž―αž€αžŸαžΆαžš αž“αž·αž„αžαžαž―αž€αžŸαžΆαžšαž€αžΌαž“αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžšαž„αž˜αž»αž“ αž™αžΎαž„αž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž”αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž… NodeKey αž”αŸ‚αž”αž“αŸαŸ‡αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαžŠαŸ„αž™αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸƒαžαžαž˜αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžαžΆαž˜αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ αž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸƒαž€αžΆαžšαž‘αžΆαž‰αž™αž€αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαžαž˜αž½αž™αž…αž»αŸ‡αž˜αž€αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αž“αŸ…αž›αžΎαž–αŸ’αžšαŸ†αžŠαŸ‚αž“αžαžΆαž„αž›αžΎαž“αŸƒαž€αŸ’αžšαž»αž˜αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž˜αžΆαž“αž”αž»αž–αŸ’αžœαž”αž‘αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž“αŸ’αžαž‘αŸ…αž–αŸ’αžšαŸ†αžŠαŸ‚αž“αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž–αŸ’αžšαŸ†αžŠαŸ‚αž“αžαžΆαž„αž›αžΎαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžŠαŸ„αž™αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‘αžŸαŸ’αžŸαž“αŸαž‘αŸ’αžšαž“αž·αž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αžŠαžΎαž˜αž”αž‰αŸ’αž‡αžΈαž€αžΌαž“αžŸαŸ„αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžšαž αžΌαžαžŠαž›αŸ‹αž€αžΌαž“αžŸαŸ„αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸƒαžαžαž˜αŸαž›αŸαž…αž‘αžΎαž„αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžœαžΆαŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž˜αžΆαž“ 2 αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„:

  1. αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž›αžΈαž“αŸαž’αŸŠαŸ‚αžš αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαžΎαž˜αžˆαžΎαž‡αžΆαž‘αžΌαž‘αŸ… αž“αž·αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαžΎαž˜αžˆαžΎ B αž‡αžΆαž–αž·αžŸαŸαžŸαžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαž›αžœαŸαž›αžΆαž›αŸ„αž€αžΆαžšαžΈαžαŸ”
  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 αž™αžΎαž„β€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΉαž˜β€‹αžαŸ‚β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž‚αž“αŸ’αž›αžΉαŸ‡β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž€αŸβ€‹αžαž˜αŸ’αž›αŸƒβ€‹αž•αž„β€‹αžŠαŸ‚αžšαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž–αŸαž‰αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž‚αŸ†αžšαžΌ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž› αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžšαž”αžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžœαžΆαž›αž–αžΈαž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ αž“αŸ„αŸ‡αž–αž½αž€αžœαžΆαž’αžΆαž…αž…αžΌαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž€αžΆαž™αžœαž·αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αŸ”

ៀ.៣. αž‚αŸ†αžšαžΌαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αžαžΆαžšαžΆαž„

αž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž…αžΆαžšαžŽαžΆαž‚αŸ’αžšαž”αŸ‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž€αžΆαžšαžšαž…αž“αžΆ αž“αž·αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαžšαžΆαž„αžαŸ‚αž˜αž½αž™αŸ” αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž“αž·αž™αžΆαž™β€‹αž”αžΆαž“β€‹αžαžΆ αžαžΆαžšαžΆαž„β€‹αž˜αž½αž™β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αžŸαŸ†αžŽαž»αŸ†β€‹αž“αŸƒβ€‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αžαž˜αŸ’αžšαŸ€αž”β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž”αŸ’αžšαž—αŸαž‘β€‹αžŠαžΌαž…αž‚αŸ’αž“αžΆβ€‹αž“αŸƒβ€‹αž‚αžΌβ€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‚αž“αŸ’αž›αžΉαŸ‡αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αž„αŸ’αž αžΆαž‰αž€αžΌαž“αžŸαŸ„αž‡αžΆαž…αžαž»αž€αŸ„αžŽαž€αŸ‚αž„ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‡αžΆ parallelepiped αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžŠαŸ‚αž›αž˜αžΎαž›αžƒαžΎαž‰αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

'' '"

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αžΈαžœαž·αžαž–αž·αž αžœαžΆαž€αž˜αŸ’αžšαž“αžΉαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž€αžΆαžšαž”αž„αŸ’αž αžΌαžšαžˆαžΆαž˜αžαž·αž…αžαž½αž…αžŽαžΆαžŸαŸ‹αŸ” αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžš αž‘αžΈαž˜αž½αž™αž˜αžΆαž“αžαžΆαžšαžΆαž„αž‡αžΆαž…αŸ’αžšαžΎαž“ αž αžΎαž™αž‘αžΈαž–αžΈαžš αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αžαž»αžŸαž–αžΈαž‚αž“αŸ’αž›αžΉαŸ‡αž…αž˜αŸ’αž”αž„αŸ” αž•αŸ’αž“αŸ‚αž€αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ”

αžαžΆαžšαžΆαž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž–αž€αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€ "αžœαž·αž…αž·αžαŸ’αžšαžŸαžΆαž›" αŸ” αžœαžΆαž”αž„αŸ’αž αžΆαž‰αž˜αžΆαžαž·αž€αžΆαž˜αŸαžŒαŸ€αž–αžΈαž–αž–αž€αž‘αžΆαŸ†αž„αž˜αžΌαž› αžαž˜αŸ’αžšαŸ€αž”αžαžΆαž˜αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αŸ” αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αž‡αž˜αŸ’αžšαžΎαžŸβ€‹αž”αŸ‚αž”β€‹αž“αŸαŸ‡β€‹αž±αŸ’αž™β€‹αž”αžΆαž“β€‹αž›αŸ’αž’β€‹αž”αŸ’αžšαžŸαžΎαžš β€‹αž“αŸ…β€‹αž‡αžΆαž”αŸ‹β€‹αžαžΆαžšαžΆαž„β€‹αž˜αŸ αž’αŸ’αž“αž€β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž˜αž½αž™β€‹αž‘αŸ€αžβ€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΉαž„β€‹αž”αŸ’αžšαž—αŸαž‘β€‹αžŸαŸ„αžαŸ’αž˜αžΈαŸ” αž–αž½αž€αžœαžΆαž“αžΉαž„αž˜αžΆαž“αžœαžΆαž›αž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αžŠαŸ‚αž›αž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αžŠαŸ‚αž›αž“αžΉαž„αžŠαžΎαžšαžαž½αž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαž˜αŸ’αžšαŸ€αž”αž…αž˜αŸ’αž”αž„αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžαŸ’αž˜αžΈαž™αŸ„αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž˜αŸ αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ index keys αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αž›αž·αž…αž‡αžΆαž–αžŽαŸŒαž‘αžΉαž€αž€αŸ’αžšαžΌαž…αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αŸ‚αž€αžŸαŸ„αž“αŸƒαžαžΆαžšαžΆαž„αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž–αžΈαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ‚αž˜αž½αž™ αžαžΆαžšαžΆαž„αž‘αžΈαžœαžΆαž›αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž”αž“αŸ’αžαŸ‚αž˜αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžŠαŸ„αž™αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž‡αžΆαž’αžΆαž‘αž·αž—αžΆαž–αžαŸ’αž–αžŸαŸ‹αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž˜αŸ’αžšαŸ€αž” αž™αžΎαž„αž“αžΉαž„αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž€αžΆαžšαžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αž“αŸƒαž€αžΌαž“αžŸαŸ„αž‡αžΆαž˜αž»αž“αžŠαŸ„αž™αžαžΆαžšαžΆαž„ αž“αž·αž„αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ - αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αž…αŸ’αž”αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αž•αŸ’αž‘αžΆαž›αŸ‹αŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αž›αž·αž”αž·αž€αŸ’αžšαž˜αž™αŸ„αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž‚αž“αŸ’αž›αžΉαŸ‡αž…αž˜αŸ’αž”αž„αŸ” αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αžαŸ’αžšαž„αŸ‹αž“αŸƒαž’αž…αž›αž“αž‘αŸ’αžšαž–αŸ’αž™αž“αŸαŸ‡αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆαž“αžΌαžœαž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒαžŸαŸ„αž…αž˜αŸ’αž”αž„αž‚αžΊαž˜αž·αž“αž›αŸ’αž’αž”αŸ†αž•αž»αžαžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ–

  1. αž”αžΎαž“αž·αž™αžΆαž™αž–αžΈαž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαž’αžΆαž…αžŸαž˜αŸ’αž”αžΌαžšαž”αŸ‚αž”αŸ”
  2. αžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž–αŸαž›αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαž“αŸƒαžαŸ’αž“αžΆαŸ†αž„ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαžœαžΆαž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž–αžΈαžšαŸ”
  3. αžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΌαžŠ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž—αŸ’αž›αŸαž…αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ„αžŽαžΆαž˜αž½αž™αž“αŸ„αŸ‡ αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αž αž»αžŸαžŠαŸαž€αž˜αŸ’αžšαž“αŸƒαž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αž‘αž»αž€αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αžΎαž„αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαž–αžΈαžšαž”αŸ€αž”αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž…αŸ†αžŽαž»αž…αžαŸ’αžœαŸ‡αžαžΆαžαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αžαžΆαžšαžΆαž„

αž›αŸ†αž“αžΆαŸ†αž‚αžΊαžŸαž˜αž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαžšαžΆαž„αž›αž·αž”αž·αž€αŸ’αžšαž˜αž‡αžΆαž˜αž½αž™αžαžΆαžšαžΆαž„αž˜αŸ "αž‚αž“αŸ’αž›αžΉαŸ‡αž‡αžΆαžαž˜αŸ’αž›αŸƒ". αžŠαžΌαž…αžŠαŸ‚αž›αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αžœαžΆαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰ αž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž›αž·αž”αž·αž€αŸ’αžšαž˜αž‚αžΊαž‡αžΆαž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαžαž˜αŸ’αž›αŸƒαžŸαŸ„αž…αž˜αŸ’αž”αž„αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αžαžΆαž„αž›αžΎαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž”αž‹αž˜αŸ” αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαžαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αžαž˜αŸ’αž›αŸƒαžŠαŸ„αž™ index key αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎ 2 queries αž‘αŸ…αž€αžΆαž“αŸ‹ database αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž˜αž½αž™αŸ” αžαžΆαž˜αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αž‘αŸ’αž’αž•αž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž‚αŸ†αžšαžΌαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αžαžΆαžšαžΆαž„αž‚αžΊ "αžŸαŸ„β€‹αž˜αž·αž“β€‹αž”αŸ’αžšαžΎβ€‹αž”αŸ’αžšαžΆαžŸαŸ‹". αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž›αžΎαžŸαŸ„ αžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž˜αŸ’αžšαŸ€αž”αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸ„αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‘αžΎαž„αžœαž·αž‰αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Mail.ru Cloud αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž‡αŸ’αžšαŸ€αžαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ’αžšαŸ…αŸ” αž”αžšαž·αž”αž‘αž“αŸƒαž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒ iOS αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž”αŸ’αžšαžŒαž·αžαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž…αŸ’αž”αžΆαžŸαŸ‹αž‡αžΆαž„αŸ”

Cloud mobile clients αž˜αžΆαž“αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž―αž€αžŸαžΆαžš αž“αž·αž„αžαžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž‡αžΆαž˜αž½αž™αž˜αž“αž»αžŸαŸ’αžŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžŠαŸ„αž™αžŸαžΆαžšαž˜αžΆαž“αž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αžαž·αž…αžαž½αž… αž αžΎαž™αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž’αŸ†αž–αžΈαž€αžΆαžšαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž–αž½αž€αž‚αŸ (αž’αŸ’αž“αž€αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžŠαŸ„αž™αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž’αŸ’αžœαžΈαŸ”αž›αŸ”) αžœαžΆαž“αžΉαž„αž˜αž·αž“αžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αž»αž€αž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒ αž€αžαŸ‹αžαŸ’αžšαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž…αž˜αŸ’αž”αž„αž‡αžΆαž˜αž½αž™αžœαžΆαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž„αŸ’αž αžΆαž‰αž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αž€αŸ’αžšαŸ…αž”αžŽαŸ’αžαžΆαž‰ αž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžœαžΆαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αž‚αžΊαž”αž„αŸ’αž€αžΎαžαžαžΆαžšαžΆαž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž€αžΌαž“αžŸαŸ„αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αžŠαŸ„αž™αž’αž€αŸ’αžŸαžš "P" αž αžΎαž™αž€αž“αŸ’αž›αŸ‚αž„αžŠαžΆαž€αŸ‹ "propname" αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αžαž˜αŸ’αž›αŸƒαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‡αžΆαž„ "αž–αŸαžαŸŒαž˜αžΆαž“αžŸαžΆαž’αžΆαžšαžŽαŸˆ"αŸ”β€‹

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αžšαžΆαž›αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αžΆαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŠαŸ‚αž›αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αž˜αž·αž“αž…αž„αŸ‹αž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈαž―αž€αžŸαžΆαžš αž“αž·αž„αžαžαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž˜αŸαžšαž½αž…αž αžΎαž™αž“αŸ„αŸ‡αž‘αŸαŸ” αž‡αŸ†αž“αž½αžŸαž˜αž€αžœαž·αž‰ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαž‘αŸ…αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž… β€œP” αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαžœαžΆαž› β€œαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαŸ’αž“αžΆαŸ†αž„β€ αž“αž·αž„ β€œαžαŸ’αžšαžΆαž–αŸαž›αžœαŸαž›αžΆβ€αŸ” αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαžŠαž›αŸ‹αž–αž½αž€αž‚αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αžΌαž“αžŸαŸ„αž›αž·αž”αž·αž€αŸ’αžšαž˜αž˜αž½αž™ αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΌαž“αžŸαŸ„αž…αž˜αŸ’αž”αž„ αžŠαŸ‚αž›αž‘αžΈαž”αŸ†αž•αž»αžαž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαžšαž”αžŸαŸ‹αžαŸ’αž“αžΆαŸ†αž„αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž™αžΎαž„αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž LMDB αž‡αžΆαžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžœαžΆ αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžΆαž“αžαž™αž…αž»αŸ‡ 30%αŸ”

αž—αžΆαž–αžœαŸƒαž†αŸ’αž›αžΆαž αž“αž·αž„αž—αžΆαž–αž€αŸ’αžšαžΈαž€αŸ’αžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹ LMDB αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ iOS

αž›αž‘αŸ’αž’αž•αž›β€‹αž“αŸƒβ€‹αž€αžΆαžšαž„αžΆαžšβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΎβ€‹αž”αžΆαž“β€‹αžšαŸ†αž›αŸαž…β€‹αž‘αžΎαž„β€‹αž›αžΎαžŸβ€‹αž–αžΈβ€‹αž€αŸ’αžšαž»αž˜ iOSαŸ” αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸαŸ‡ αž•αŸ’αž“αŸ‚αž€ "αž―αž€αžŸαžΆαžš" αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Android αž€αŸαž”αžΆαž“αž”αŸ’αžαžΌαžšαž‘αŸ…αž”αŸ’αžšαžΎ LMDB αž αžΎαž™αž•αŸ’αž“αŸ‚αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž—αžΆαžŸαžΆ C αžŠαŸ‚αž›β€‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€β€‹αžαž˜αŸ’αž›αŸƒβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž’αž“αž»αžœαžαŸ’αž αž‚αžΊαž‡αžΆβ€‹αž‡αŸ†αž“αž½αž™β€‹αžŠαŸβ€‹αž›αŸ’αž’β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž€αŸ’αžšαž”αžαžŽαŸ’αžŒβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžŠαŸ†αž”αžΌαž„β€‹αž‡αž»αŸ†αžœαž·αž‰β€‹αžœαžΆβ€‹αž†αŸ’αž›αž„αžœαŸαž‘αž·αž€αžΆβ€‹αž€αŸ’αž“αž»αž„ C++αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ C++ αž›αž‘αŸ’αž’αž•αž›αž™αŸ‰αžΆαž„αžšαž›αžΌαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΌαžŠαžœαŸαž‘αž·αž€αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Objective-C αž“αž·αž„ Kotlin αžŒαžΈαž‡αžΈαž“αžΈ αž–αžΈ Dropbox αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ„αŸ‡αž‡αžΆαžšαžΏαž„αžαž»αžŸαž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹