ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื‘ืกืชื™ื• 2019, ืื™ืจื•ืข ื”ืžื™ื•ื—ืœ ื”ืชืจื—ืฉ ื‘ืฆื•ื•ืช Mail.ru Cloud iOS. ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืจืืฉื™ ืœืื—ืกื•ืŸ ืžืชืžืฉืš ืฉืœ ืžืฆื‘ ื™ื™ืฉื•ืžื™ื ื”ืคืš ืืงื–ื•ื˜ื™ ืžืื•ื“ ืขื‘ื•ืจ ื”ืขื•ืœื ื”ื ื™ื™ื“ ืžืกื“ ื ืชื•ื ื™ื ืžืžื•ืคื” ื–ื™ื›ืจื•ืŸ ื‘ืจืง (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 ืฉื ื™ ื—ื•ื˜ื™ื ื‘ื˜ื•ื•ื™ื˜ืจ ืงื•ืœืงื˜ื™ื‘ื™ ื• ืžืืžืจ ืขืœ Habrรฉ. ื›ื—ืœืง ืžื”ื ืจื˜ื™ื‘ ื”ื ื•ื›ื—ื™, ืื ื™ ืจื•ืฆื” ืœื”ื“ื’ื™ืฉ ืืช ื”ื”ื™ื‘ื˜ื™ื ืฉืœ ื”ื”ื—ืœื˜ื” ืฉื”ืฉืคื™ืขื• ืขืœ ื‘ื—ื™ืจืช ื”ืžืื’ืจ.

ืžื•ื“ืœ ื”ืฉื—ืงื ื™ื ืฉืœ ืืจื’ื•ืŸ ื”ืžืขืจื›ืช ืžื ื™ื— ืฉื”ืจื™ื‘ื•ื™ ื”ื”ืœื™ื›ื™ื ื”ื•ืคืš ืœื”ื™ื•ืช ื”ืžื”ื•ืช ื”ืฉื ื™ื™ื” ืฉืœื•. ื“ื’ืžื™ ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ื• ืื•ื”ื‘ื™ื ืœื—ืฆื•ืช ืืช ื’ื‘ื•ืœื•ืช ื”ื ื—ืœ. ื•ื”ื ืขื•ืฉื™ื ืืช ื–ื” ืœื ืœืคืขืžื™ื ื•ืคื” ื•ืฉื, ืืœื ื›ืžืขื˜ ื›ืœ ื”ื–ืžืŸ ื•ื‘ื›ืœ ืžืงื•ื...

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

โ€‹ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื”ื•ื ืื—ื“ ืžืžืจื›ื™ื‘ื™ ื”ื™ืกื•ื“ ื‘ืชืจืฉื™ื ื”ืžื•ืฆื’. ื”ืžืฉื™ืžื” ื”ืขื™ืงืจื™ืช ืฉืœื• ื”ื™ื ืœื™ื™ืฉื ืืช ืชื‘ื ื™ืช ื”ืžืืงืจื• ืžืกื“ ื ืชื•ื ื™ื ืžืฉื•ืชืฃ. ืื ื‘ืขื•ืœื ื”ืืจื’ื•ื ื™ ื”ื•ื ืžืฉืžืฉ ืœืืจื’ื•ืŸ ืกื ื›ืจื•ืŸ ื ืชื•ื ื™ื ื‘ื™ืŸ ืฉื™ืจื•ืชื™ื, ื”ืจื™ ืฉื‘ืžืงืจื” ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช ืฉื—ืงื ื™ื โ€“ ื ืชื•ื ื™ื ื‘ื™ืŸ ื—ื•ื˜ื™ื. ืœืคื™ื›ืš, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ื‘ืกื™ืก ื ืชื•ื ื™ื ืฉืœื ื™ื’ืจื•ื ืืคื™ืœื• ืœืงืฉื™ื™ื ืžื™ื ื™ืžืœื™ื™ื ื‘ืขื‘ื•ื“ื” ืื™ืชื• ื‘ืกื‘ื™ื‘ื” ืžืจื•ื‘ืช ื”ืœื™ื›ื™ ื”ืœื™ื›ื™. ื‘ืคืจื˜, ื–ื” ืื•ืžืจ ืฉืื•ื‘ื™ื™ืงื˜ื™ื ื”ืžืชืงื‘ืœื™ื ืžืžื ื• ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ืœืคื—ื•ืช ื‘ื˜ื•ื—ื™ื ืœื—ื•ื˜ื™ื, ื•ื‘ืื•ืคืŸ ืื™ื“ื™ืืœื™ ืœื—ืœื•ื˜ื™ืŸ ื‘ืœืชื™ ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™. ื›ืคื™ ืฉืืชื” ื™ื•ื“ืข, ื–ื” ื”ืื—ืจื•ืŸ ื™ื›ื•ืœ ืœืฉืžืฉ ื‘ื• ื–ืžื ื™ืช ืžื›ืžื” ื—ื•ื˜ื™ื ืžื‘ืœื™ ืœื”ื–ื“ืงืง ืœื›ืœ ื ืขื™ืœื”, ืฉื™ืฉ ืœื” ื”ืฉืคืขื” ืžื•ืขื™ืœื” ืขืœ ื”ื‘ื™ืฆื•ืขื™ื.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOSื”ื’ื•ืจื ื”ืžืฉืžืขื•ืชื™ ื”ืฉื ื™ ืฉื”ืฉืคื™ืข ืขืœ ื‘ื—ื™ืจืช ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื™ื” API ื‘ืขื ืŸ ืฉืœื ื•. ื”ื•ื ื ื•ืฆืจ ื‘ื”ืฉืจืืช ื’ื™ืฉืช ื”ืกื ื›ืจื•ืŸ ืฉืื™ืžืฆื” git. ื›ืžื•ื”ื•, ื›ื™ื•ื•ื ื• ืืœื™ื• ืžืžืฉืง API ืจืืฉื•ืŸ ื‘ืžืฆื‘ ืœื ืžืงื•ื•ืŸ, ืฉื ืจืื” ื™ื•ืชืจ ืžืžืชืื™ื ืขื‘ื•ืจ ืœืงื•ื—ื•ืช ืขื ืŸ. ื”ื”ื ื—ื” ื”ื™ื™ืชื” ืฉื”ื ื™ืฉืื‘ื• ืืช ื”ืžืฆื‘ ื”ืžืœื ืฉืœ ื”ืขื ืŸ ืจืง ืคืขื ืื—ืช, ื•ืื– ื”ืกื ื›ืจื•ืŸ ื‘ืจื•ื‘ ื”ืžื›ืจื™ืข ืฉืœ ื”ืžืงืจื™ื ื™ืชืจื—ืฉ ื‘ืืžืฆืขื•ืช ื”ืฉืงืช ืฉื™ื ื•ื™ื™ื. ืœืžืจื‘ื” ื”ืฆืขืจ, ื”ื”ื–ื“ืžื ื•ืช ื”ื–ื• ืขื“ื™ื™ืŸ ื ืžืฆืืช ืจืง ื‘ืชื—ื•ื ื”ืชื™ืื•ืจื˜ื™, ื•ื”ืœืงื•ื—ื•ืช ืœื ืœืžื“ื• ืื™ืš ืœืขื‘ื•ื“ ืขื ื˜ืœืื™ื ื‘ืคื•ืขืœ. ื™ืฉ ืœื›ืš ืžืกืคืจ ืกื™ื‘ื•ืช ืื•ื‘ื™ื™ืงื˜ื™ื‘ื™ื•ืช, ืฉื›ื“ื™ ืœื ืœืขื›ื‘ ืืช ื”ื”ืงื“ืžื” ื ืฉืื™ืจ ืžืื—ื•ืจื™ื”ืŸ ืกื•ื’ืจื™ื™ื. ืขื›ืฉื™ื•, ืžื” ืฉืžืขื ื™ื™ืŸ ื”ืจื‘ื” ื™ื•ืชืจ ื”ื•ื ื”ืžืกืงื ื•ืช ื”ืžืืœืคื•ืช ืฉืœ ื”ืฉื™ืขื•ืจ ืขืœ ืžื” ืฉืงื•ืจื” ื›ืฉืžืžืฉืง API ืื•ืžืจ "A" ื•ื”ืฆืจื›ืŸ ืฉืœื• ืœื ืื•ืžืจ "B".

ืื–, ืื ืืชื” ืžื“ืžื™ื™ืŸ ืืช git, ืฉื‘ื–ืžืŸ ื‘ื™ืฆื•ืข ืคืงื•ื“ืช pull, ื‘ืžืงื•ื ืœื”ื—ื™ืœ ืชื™ืงื•ื ื™ื ืขืœ ืชืžื•ื ืช ืžืฆื‘ ืžืงื•ืžื™ืช, ืžืฉื•ื•ื” ืืช ื”ืžืฆื‘ ื”ืžืœื ืฉืœื• ืขื ืžืฆื‘ ื”ืฉืจืช ื”ืžืœื, ืื– ื™ื”ื™ื” ืœืš ืžื•ืฉื’ ื“ื™ ืžื“ื•ื™ืง ื›ื™ืฆื“ ื”ืกื ื›ืจื•ืŸ ืžืชืจื—ืฉ ื‘ืขื ืŸ ืœืงื•ื—ื•ืช. ืงืœ ืœื ื—ืฉ ืฉื›ื“ื™ ืœื™ื™ืฉื ืืช ื–ื”, ืืชื” ืฆืจื™ืš ืœื”ืงืฆื•ืช ืฉื ื™ ืขืฆื™ DOM ื‘ื–ื™ื›ืจื•ืŸ ืขื ืžื˜ื-ืžื™ื“ืข ืขืœ ื›ืœ ื”ืฉืจืชื™ื ื•ื”ืงื‘ืฆื™ื ื”ืžืงื•ืžื™ื™ื. ืžืกืชื‘ืจ ืฉืื ืžืฉืชืžืฉ ืžืื—ืกืŸ 500 ืืœืฃ ืงื‘ืฆื™ื ื‘ืขื ืŸ, ืื– ื›ื“ื™ ืœืกื ื›ืจืŸ ืื•ืชื• ื™ืฉ ืฆื•ืจืš ืœื™ืฆื•ืจ ืžื—ื“ืฉ ื•ืœื”ืจื•ืก ืฉื ื™ ืขืฆื™ื ืขื ืžื™ืœื™ื•ืŸ ืฆืžืชื™ื. ืื‘ืœ ื›ืœ ืฆื•ืžืช ื”ื•ื ืžืฆืจืฃ ื”ืžื›ื™ืœ ื’ืจืฃ ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ ืžืฉื ื”. ืœืื•ืจ ื–ื”, ืชื•ืฆืื•ืช ื”ืคืจื•ืคื™ืœ ื”ื™ื• ืฆืคื•ื™ื•ืช. ื”ืชื‘ืจืจ ืฉื’ื ื‘ืœื™ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ืืœื’ื•ืจื™ืชื ื”ืžื™ื–ื•ื’, ืขืฆื ื”ืœื™ืš ื”ื™ืฆื™ืจื” ื•ื”ื”ืฉืžื“ื” ืฉืœ ืžืกืคืจ ืขืฆื•ื ืฉืœ ื—ืคืฆื™ื ืงื˜ื ื™ื ืขื•ืœื” ืื’ื•ืจื” ืœื ืงื˜ื ื”.ื”ืžืฆื‘ ืžื—ืžื™ืจ ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉืคืขื•ืœืช ื”ืกื ื›ืจื•ืŸ ื”ื‘ืกื™ืกื™ืช ื›ืœื•ืœื” ื‘ืžืกืคืจ ืจื‘. ืฉืœ ืกืงืจื™ืคื˜ื™ื ืฉืœ ืžืฉืชืžืฉื™ื. ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืชืงื ื™ื ืืช ื”ืงืจื™ื˜ืจื™ื•ืŸ ื”ื—ืฉื•ื‘ ื”ืฉื ื™ ื‘ื‘ื—ื™ืจืช ืžืกื“ ื ืชื•ื ื™ื - ื”ื™ื›ื•ืœืช ืœื™ื™ืฉื ืคืขื•ืœื•ืช CRUD ืœืœื ื”ืงืฆืื” ื“ื™ื ืžื™ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื.

ื“ืจื™ืฉื•ืช ืื—ืจื•ืช ืžืกื•ืจืชื™ื•ืช ื™ื•ืชืจ ื•ื›ืœ ื”ืจืฉื™ืžื” ืฉืœื”ืŸ ื”ื™ื ื›ื“ืœืงืžืŸ.

  1. ื‘ื˜ื™ื—ื•ืช ื—ื•ื˜ื™ื.
  2. ืจื™ื‘ื•ื™ ืขื™ื‘ื•ื“ื™ื. ืžื•ื›ืชื‘ ืขืœ ื™ื“ื™ ื”ืจืฆื•ืŸ ืœื”ืฉืชืžืฉ ื‘ืื•ืชื• ืžื•ืคืข ืžืกื“ ื ืชื•ื ื™ื ื›ื“ื™ ืœืกื ื›ืจืŸ ืžืฆื‘ ืœื ืจืง ื‘ื™ืŸ ืฉืจืฉื•ืจื™ื, ืืœื ื’ื ื‘ื™ืŸ ื”ืืคืœื™ืงืฆื™ื” ื”ืจืืฉื™ืช ื•ื”ืจื—ื‘ื•ืช iOS.
  3. ื”ื™ื›ื•ืœืช ืœื™ื™ืฆื’ ื™ืฉื•ื™ื•ืช ืžืื•ื—ืกื ื•ืช ื›ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืื™ื ื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™
  4. ืื™ืŸ ื”ืงืฆืื•ืช ื“ื™ื ืžื™ื•ืช ื‘ืชื•ืš ืคืขื•ืœื•ืช CRUD.
  5. ืชืžื™ื›ื” ื‘ืขืกืงืื•ืช ืขื‘ื•ืจ ื ื›ืกื™ื ื‘ืกื™ืกื™ื™ื ACID: ืื˜ื•ืžื™ื•ืช, ืขืงื‘ื™ื•ืช, ื‘ื™ื“ื•ื“ ื•ืืžื™ื ื•ืช.
  6. ืžื”ื™ืจื•ืช ืขืœ ื”ืžืงืจื™ื ื”ืคื•ืคื•ืœืจื™ื™ื ื‘ื™ื•ืชืจ.

ืขื ืกื˜ ื“ืจื™ืฉื•ืช ื–ื”, SQLite ื”ื™ื™ืชื” ื•ื ืฉืืจื” ื‘ื—ื™ืจื” ื˜ื•ื‘ื”. ืื•ืœื, ื‘ืžืกื’ืจืช ืžื—ืงืจ ื”ื—ืœื•ืคื•ืช, ื ืชืงืœืชื™ ื‘ืกืคืจ "ืชื—ื™ืœืช ื”ืขื‘ื•ื“ื” ืขื LevelDB". ื‘ื”ื ื”ื’ืชื”, ื ื›ืชื‘ ื‘ื ืฆ'ืžืจืง ื”ืžืฉื•ื•ื” ืืช ืžื”ื™ืจื•ืช ื”ืขื‘ื•ื“ื” ืขื ืžืกื“ื™ ื ืชื•ื ื™ื ืฉื•ื ื™ื ื‘ืชืจื—ื™ืฉื™ ืขื ืŸ ืืžื™ืชื™ื™ื. ื”ืชื•ืฆืื” ืขืœืชื” ืขืœ ื”ืฆื™ืคื™ื•ืช ื”ืคืจื•ืขื•ืช ื‘ื™ื•ืชืจ ืฉืœื ื•. ื‘ืžืงืจื™ื ื”ืคื•ืคื•ืœืจื™ื™ื ื‘ื™ื•ืชืจ - ืงื‘ืœืช ืกืžืŸ ืขืœ ืจืฉื™ืžื” ืžืžื•ื™ื ืช ืฉืœ ื›ืœ ื”ืงื‘ืฆื™ื ื•ืจืฉื™ืžื” ืžืžื•ื™ื ืช ืฉืœ ื›ืœ ื”ืงื‘ืฆื™ื ืขื‘ื•ืจ ืกืคืจื™ื™ื” ื ืชื•ื ื” - ื”ืชื‘ืจืจ ื›ื™ LMDB ืžื”ื™ืจ ืคื™ 10 ืž- SQLite. ื”ื‘ื—ื™ืจื” ื”ืคื›ื” ื‘ืจื•ืจื”.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

2. ืžื™ืฆื•ื‘ LMDB

LMDB ื”ื™ื ืกืคืจื™ื™ื” ืงื˜ื ื” ืžืื•ื“ (ืจืง 10K ืฉื•ืจื•ืช) ื”ืžื™ื™ืฉืžืช ืืช ื”ืฉื›ื‘ื” ื”ื‘ืกื™ืกื™ืช ื”ื ืžื•ื›ื” ื‘ื™ื•ืชืจ ืฉืœ ืžืกื“ื™ ื ืชื•ื ื™ื - ืื—ืกื•ืŸ.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื”ืชืจืฉื™ื ืฉืœืžืขืœื” ืžืจืื” ืฉื”ืฉื•ื•ืืช LMDB ืขื SQLite, ืฉื’ื ืžื™ื™ืฉืžืช ืจืžื•ืช ื’ื‘ื•ื”ื•ืช ื™ื•ืชืจ, ื‘ื“ืจืš ื›ืœืœ ืื™ื ื” ื ื›ื•ื ื” ื™ื•ืชืจ ืžืืฉืจ SQLite ืขื Core Data. ื–ื” ื™ื”ื™ื” ื”ื•ื’ืŸ ื™ื•ืชืจ ืœืฆื˜ื˜ ืืช ืื•ืชื ืžื ื•ืขื™ ืื—ืกื•ืŸ ื›ืžืชื—ืจื™ื ืฉื•ื•ื™ื - BerkeleyDB, LevelDB, Sophia, RocksDB ื•ื›ื•'. ื™ืฉื ื ืืคื™ืœื• ืคื™ืชื•ื—ื™ื ืฉื‘ื”ื LMDB ืคื•ืขืœ ื›ืจื›ื™ื‘ ืžื ื•ืข ืื—ืกื•ืŸ ืขื‘ื•ืจ SQLite. ื”ื ื™ืกื•ื™ ื”ืจืืฉื•ืŸ ื›ื–ื” ื”ื™ื” ื‘-2012 ื ืขืจืš ืžืืช LMDB ื”ื•ื•ืืจื“ ืฆ'ื•. ืžืžืฆืื™ื ื”ืชื‘ืจืจ ื›ืœ ื›ืš ืžืกืงืจืŸ ืฉื™ื•ื–ืžืชื• ื ืงืœื˜ื” ืขืœ ื™ื“ื™ ื—ื•ื‘ื‘ื™ OSS, ื•ืžืฆืื” ืืช ื”ืžืฉื›ื” ื‘ืื“ื LumoSQL. ื‘ื™ื ื•ืืจ 2020, ืžื—ื‘ืจ ื”ืคืจื•ื™ืงื˜ ื”ื–ื” ื”ื™ื” Den Shearer ื”ื•ืฆื’ ื–ื” ื‘- LinuxConfAu.

LMDB ืžืฉืžืฉ ื‘ืขื™ืงืจ ื›ืžื ื•ืข ืœื‘ืกื™ืกื™ ื ืชื•ื ื™ื ืฉืœ ื™ื™ืฉื•ืžื™ื. ื”ืกืคืจื™ื™ื” ื—ื™ื™ื‘ืช ืืช ื”ืžืจืื” ืฉืœื” ืœืžืคืชื—ื™ื OpenLDAP, ืฉื”ื™ื• ืžืื•ื“ ืœื ืžืจื•ืฆื™ื ืž-BerkeleyDB ื›ื‘ืกื™ืก ืœืคืจื•ื™ืงื˜ ืฉืœื”ื. ื”ื—ืœ ืžืกืคืจื™ื” ืฆื ื•ืขื” btree, ื”ื•ื•ืืจื“ ืฆ'ื• ื”ืฆืœื™ื— ืœื™ืฆื•ืจ ืืช ืื—ืช ื”ืืœื˜ืจื ื˜ื™ื‘ื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ื‘ื™ื•ืชืจ ืฉืœ ื–ืžื ื ื•. ื”ื•ื ื”ืงื“ื™ืฉ ืืช ื”ื“ื•ื— ื”ืžื’ื ื™ื‘ ืฉืœื• ืœืกื™ืคื•ืจ ื”ื–ื”, ื›ืžื• ื’ื ืœืžื‘ื ื” ื”ืคื ื™ืžื™ ืฉืœ LMDB. "ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืžืžื•ืคื•ืช ื‘ื–ื™ื›ืจื•ืŸ ื‘ืจืง". ื“ื•ื’ืžื” ื˜ื•ื‘ื” ืœื›ื™ื‘ื•ืฉ ืžืชืงืŸ ืื—ืกื•ืŸ ื”ื™ื™ืชื” ืžืฉื•ืชืคืช ืœืœื™ืื•ื ื™ื“ ื™ื•ืจื™ื‘ (aka yleo) ืž-Positive Technologies ื‘ื“ื•ื— ืฉืœื• ื‘-Highload 2015 "ืžื ื•ืข ื”-LMDB ื”ื•ื ืืœื•ืฃ ืžื™ื•ื—ื“". ื‘ื• ื”ื•ื ืžื“ื‘ืจ ืขืœ LMDB ื‘ื”ืงืฉืจ ืฉืœ ืžืฉื™ืžื” ื“ื•ืžื” ืฉืœ ื™ื™ืฉื•ื ReOpenLDAP, ื•-LevelDB ื›ื‘ืจ ื”ื™ื” ื ืชื•ืŸ ืœื‘ื™ืงื•ืจืช ื”ืฉื•ื•ืืชื™ืช. ื›ืชื•ืฆืื” ืžื”ื™ื™ืฉื•ื, ืœ-Positive Technologies ืืคื™ืœื• ื”ื™ื” ืžื–ืœื’ ื‘ืคื™ืชื•ื— ืคืขื™ืœ MDBX ืขื ืชื›ื•ื ื•ืช ื˜ืขื™ืžื•ืช ืžืื•ื“, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื• ืชื™ืงื•ื ื™ ื‘ืื’ื™ื.

LMDB ืžืฉืžืฉ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ืื—ืกื•ืŸ ื›ืคื™ ืฉื”ื•ื. ืœื“ื•ื’ืžื”, ื“ืคื“ืคืŸ Mozilla Firefox ื‘ื—ืจ ื–ื” ืขื‘ื•ืจ ืžืกืคืจ ืฆืจื›ื™ื, ื•ื”ื—ืœ ืžื’ืจืกื” 9, Xcode ืžื•ืขื“ืฃ SQLite ืฉืœื” ืœืื—ืกื•ืŸ ืื™ื ื“ืงืกื™ื.

ื”ืžื ื•ืข ื”ื˜ื‘ื™ืข ืืช ื—ื•ืชืžื• ื’ื ื‘ืขื•ืœื ืคื™ืชื•ื— ื”ืžื•ื‘ื™ื™ืœ. ืขืงื‘ื•ืช ื”ืฉื™ืžื•ืฉ ื‘ื• ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืœืžืฆื•ื ื‘ืœืงื•ื— iOS ืขื‘ื•ืจ ื˜ืœื’ืจื. ืœื™ื ืงื“ืื™ืŸ ื”ืจื—ื™ืงื” ืœื›ืช ืขื•ื“ ื™ื•ืชืจ ื•ื‘ื—ืจื” ื‘-LMDB ื›ืื—ืกื•ืŸ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืขื‘ื•ืจ ืžืกื’ืจืช ืžื˜ืžื•ืŸ ื”ื ืชื•ื ื™ื ืชื•ืฆืจืช ื”ื‘ื™ืช ืฉืœื” Rocket Data, ืฉืขืœื™ื” ืกื™ืคืจ ื‘ืžืืžืจื• ื‘-2016.

LMDB ื ืœื—ืžืช ื‘ื”ืฆืœื—ื” ืขืœ ืžืงื•ื ื‘ืฉืžืฉ ื‘ื ื™ืฉื” ืฉื”ืฉืื™ืจื” BerkeleyDB ืœืื—ืจ ืฉื”ื’ื™ืขื” ืœืฉืœื™ื˜ืชื” ืฉืœ ืื•ืจืงืœ. ื”ืกืคืจื™ื™ื” ืื”ื•ื‘ื” ืขืœ ื”ืžื”ื™ืจื•ืช ื•ื”ืืžื™ื ื•ืช ืฉืœื”, ืืคื™ืœื• ื‘ื”ืฉื•ื•ืื” ืœืขืžื™ืชื™ื”. ื›ื™ื“ื•ืข, ืื™ืŸ ืืจื•ื—ื•ืช ืฆื”ืจื™ื™ื ื—ื™ื ื, ื•ืื ื™ ืจื•ืฆื” ืœื”ื“ื’ื™ืฉ ืืช ื”ืคืฉืจื” ืฉืชืฆื˜ืจื›ื• ืœื”ืชืžื•ื“ื“ ืื™ืชื” ื‘ื‘ื—ื™ืจื” ื‘ื™ืŸ LMDB ืœ-SQLite. ื”ืชืจืฉื™ื ืœืขื™ืœ ืžื“ื’ื™ื ื‘ื‘ื™ืจื•ืจ ื›ื™ืฆื“ ืžื•ืฉื’ืช ืžื”ื™ืจื•ืช ืžื•ื’ื‘ืจืช. ืจืืฉื™ืช, ืื ื—ื ื• ืœื ืžืฉืœืžื™ื ืขื‘ื•ืจ ืฉื›ื‘ื•ืช ื ื•ืกืคื•ืช ืฉืœ ื”ืคืฉื˜ื” ืขืœ ื’ื‘ื™ ืื—ืกื•ืŸ ื”ื“ื™ืกืง. ื‘ืจื•ืจ ืฉืืจื›ื™ื˜ืงื˜ื•ืจื” ื˜ื•ื‘ื” ืขื“ื™ื™ืŸ ืœื ื™ื›ื•ืœื” ื‘ืœืขื“ื™ื”ื, ื•ื”ื ื™ื•ืคื™ืขื• ื‘ื”ื›ืจื— ื‘ืงื•ื“ ื”ื™ื™ืฉื•ื, ืื‘ืœ ื”ื ื™ื”ื™ื• ื”ืจื‘ื” ื™ื•ืชืจ ืขื“ื™ื ื™ื. ื”ื ืœื ื™ื›ื™ืœื• ืชื›ื•ื ื•ืช ืฉืื™ื ืŸ ื ื“ืจืฉื•ืช ืขืœ ื™ื“ื™ ื™ื™ืฉื•ื ืกืคืฆื™ืคื™, ืœืžืฉืœ, ืชืžื™ื›ื” ื‘ืฉืื™ืœืชื•ืช ื‘ืฉืคืช SQL. ืฉื ื™ืช, ื ื™ืชืŸ ืœื™ื™ืฉื ื‘ืฆื•ืจื” ืื•ืคื˜ื™ืžืœื™ืช ืžื™ืคื•ื™ ืฉืœ ืคืขื•ืœื•ืช ื™ื™ืฉื•ืžื™ื ื‘ื‘ืงืฉื•ืช ืœืื—ืกื•ืŸ ื“ื™ืกืง. ืื SQLite ื‘ืขื‘ื•ื“ืชื™ ืžื‘ื•ืกืก ืขืœ ื”ืฆืจื›ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื”ืžืžื•ืฆืขื™ื ืฉืœ ืืคืœื™ืงืฆื™ื” ืžืžื•ืฆืขืช, ืื– ืืชื”, ื›ืžืคืชื— ืืคืœื™ืงืฆื™ื•ืช, ืžื•ื“ืข ื”ื™ื˜ื‘ ืœืชืจื—ื™ืฉื™ ืขื•ืžืก ื”ืขื‘ื•ื“ื” ื”ืขื™ืงืจื™ื™ื. ืขื‘ื•ืจ ืคืชืจื•ืŸ ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ ื™ื•ืชืจ, ืชืฆื˜ืจืš ืœืฉืœื ืชื’ ืžื—ื™ืจ ืžื•ื’ื“ืœ ื”ืŸ ืขื‘ื•ืจ ืคื™ืชื•ื— ื”ืคืชืจื•ืŸ ื”ืจืืฉื•ื ื™ ื•ื”ืŸ ืขื‘ื•ืจ ื”ืชืžื™ื›ื” ืฉืœื• ืœืื—ืจ ืžื›ืŸ.

3. ืฉืœื•ืฉื” ืขืžื•ื“ื™ื ืฉืœ ืœืž.ื“.ื‘

ืœืื—ืจ ืฉื”ืกืชื›ืœื ื• ืขืœ ื”-LMDB ืžืžืขื•ืฃ ื”ืฆื™ืคื•ืจ, ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืขืžื™ืง. ืฉืœื•ืฉืช ื”ืกืขื™ืคื™ื ื”ื‘ืื™ื ื™ื•ืงื“ืฉื• ืœื ื™ืชื•ื— ื”ืขืžื•ื“ื™ื ื”ืขื™ืงืจื™ื™ื ืขืœื™ื”ื ื ืฉืขื ืช ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืื—ืกื•ืŸ:

  1. ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ ื›ืžื ื’ื ื•ืŸ ืœืขื‘ื•ื“ื” ืขื ื“ื™ืกืง ื•ืกื ื›ืจื•ืŸ ืžื‘ื ื™ ื ืชื•ื ื™ื ืคื ื™ืžื™ื™ื.
  2. B+-tree ื›ืืจื’ื•ืŸ ืฉืœ ืžื‘ื ื” ื”ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื.
  3. ื”ืขืชืง-ืขืœ-ื›ืชื™ื‘ื” ื›ื’ื™ืฉื” ืœืกืคืง ืžืืคื™ื™ื ื™ ืขืกืงืื•ืช ACID ื•-multiversion.

3.1. ืœื•ื•ื™ืชืŸ ืžืก' 1. ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ

ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ ื”ื ืืœืžื ื˜ ืืจื›ื™ื˜ืงื˜ื•ื ื™ ื—ืฉื•ื‘ ืขื“ ื›ื“ื™ ื›ืš ืฉื”ื ืืคื™ืœื• ืžื•ืคื™ืขื™ื ื‘ืฉื ื”ืžืื’ืจ. ื‘ืขื™ื•ืช ืฉืœ ืฉืžื™ืจื” ื‘ืžื˜ืžื•ืŸ ื•ืกื ื›ืจื•ืŸ ืฉืœ ื’ื™ืฉื” ืœืžื™ื“ืข ืžืื•ื—ืกืŸ ื ื•ืชืจื•ืช ืœื—ืœื•ื˜ื™ืŸ ืœืžืขืจื›ืช ื”ื”ืคืขืœื”. LMDB ืื™ื ื• ืžื›ื™ืœ ืžื˜ืžื•ื ื™ื ื‘ืชื•ืš ืขืฆืžื•. ื–ื•ื”ื™ ื”ื—ืœื˜ื” ืžื•ื“ืขืช ืฉืœ ื”ืžื—ื‘ืจ, ืฉื›ืŸ ืงืจื™ืืช ื ืชื•ื ื™ื ื™ืฉื™ืจื•ืช ืžืงื‘ืฆื™ื ืžืžื•ืคื™ื ืžืืคืฉืจืช ืœืš ืœื—ืชื•ืš ื”ืจื‘ื” ืคื™ื ื•ืช ื‘ื™ื™ืฉื•ื ื”ืžื ื•ืข. ืœื”ืœืŸ ืจืฉื™ืžื” ืจื—ื•ืงื” ืžืœื”ื™ื•ืช ืžืœืื” ืฉืœ ื›ืžื” ืžื”ื.

  1. ืฉืžื™ืจื” ืขืœ ืขืงื‘ื™ื•ืช ื”ื ืชื•ื ื™ื ื‘ืื—ืกื•ืŸ ื›ืืฉืจ ืขื•ื‘ื“ื™ื ืื™ืชื• ืžืžืกืคืจ ืชื”ืœื™ื›ื™ื ื”ื•ืคื›ืช ืœืื—ืจื™ื•ืช ืžืขืจื›ืช ื”ื”ืคืขืœื”. ื‘ืกืขื™ืฃ ื”ื‘ื, ืžื›ื ื™ืงื” ื–ื• ื ื™ื“ื•ื ื” ื‘ืคื™ืจื•ื˜ ื•ืขื ืชืžื•ื ื•ืช.
  2. ื”ื™ืขื“ืจ ืžื˜ืžื•ื ื™ื ืžื‘ื˜ืœ ืœื—ืœื•ื˜ื™ืŸ ืืช LMDB ืžื”ืชืงื•ืจื” ื”ืงืฉื•ืจื” ืœื”ืงืฆืื•ืช ื“ื™ื ืžื™ื•ืช. ืงืจื™ืืช ื ืชื•ื ื™ื ื‘ืคื•ืขืœ ืคื™ืจื•ืฉื” ื”ื’ื“ืจืช ืžืฆื‘ื™ืข ืœื›ืชื•ื‘ืช ื”ื ื›ื•ื ื” ื‘ื–ื™ื›ืจื•ืŸ ื”ื•ื™ืจื˜ื•ืืœื™ ื•ืชื• ืœื. ื–ื” ื ืฉืžืข ื›ืžื• ืžื“ืข ื‘ื“ื™ื•ื ื™, ืื‘ืœ ื‘ืงื•ื“ ืžืงื•ืจ ื”ืื—ืกื•ืŸ ื›ืœ ื”ืงืจื™ืื•ืช ืœ-calloc ืžืชืจื›ื–ื•ืช ื‘ืคื•ื ืงืฆื™ื™ืช ืชืฆื•ืจืช ื”ืื—ืกื•ืŸ.
  3. ื”ื™ืขื“ืจ ืžื˜ืžื•ื ื™ื ืคื™ืจื•ืฉื• ื’ื ื”ื™ืขื“ืจ ืžื ืขื•ืœื™ื ื”ืงืฉื•ืจื™ื ืœืกื ื›ืจื•ืŸ ื”ื’ื™ืฉื” ืฉืœื”ื. ืงื•ืจืื™ื, ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืกืคืจ ืฉืจื™ืจื•ืชื™ ืฉืœ ืงื•ืจืื™ื ื‘ื•-ื–ืžื ื™ืช, ืœื ื ืชืงืœื™ื ื‘ืืฃ ืžื•ื˜ืงืก ื‘ื“ืจื›ื ืืœ ื”ื ืชื•ื ื™ื. ื‘ืฉืœ ื›ืš, ืœืžื”ื™ืจื•ืช ื”ืงืจื™ืื” ื™ืฉ ืžื“ืจื’ื™ื•ืช ืœื™ื ื™ืืจื™ืช ืื™ื“ื™ืืœื™ืช ื”ืžื‘ื•ืกืกืช ืขืœ ืžืกืคืจ ื”ืžืขื‘ื“ื™ื. ื‘-LMDB, ืจืง ืคืขื•ืœื•ืช ืฉื™ื ื•ื™ ืžืกื•ื ื›ืจื ื•ืช. ื™ื›ื•ืœ ืœื”ื™ื•ืช ืจืง ื›ื•ืชื‘ ืื—ื“ ื‘ื›ืœ ืคืขื.
  4. ืžื™ื ื™ืžื•ื ืฉืœ ืœื•ื’ื™ืงื” ืฉืœ ืžื˜ืžื•ืŸ ื•ืกื ื›ืจื•ืŸ ืžื‘ื˜ืœ ืืช ื”ืกื•ื’ ื”ืžื•ืจื›ื‘ ื‘ื™ื•ืชืจ ืฉืœ ืฉื’ื™ืื•ืช ื”ืงืฉื•ืจื•ืช ืœืขื‘ื•ื“ื” ื‘ืกื‘ื™ื‘ื” ืžืจื•ื‘ื” ื”ืœื™ื›ื™. ื”ื™ื• ืฉื ื™ ืžื—ืงืจื™ ืžืกื“ ื ืชื•ื ื™ื ืžืขื ื™ื™ื ื™ื ื‘ื›ื ืก Usenix OSDI 2014: "ื›ืœ ืžืขืจื›ื•ืช ื”ืงื‘ืฆื™ื ืื™ื ืŸ ื ื•ืฆืจื•ืช ืฉื•ื•ืช: ืขืœ ื”ืžื•ืจื›ื‘ื•ืช ืฉืœ ื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ื ืขืงื‘ื™ื™ื ืœืงืจื•ืก" ะธ "ืขื™ื ื•ื™ ืžืื’ืจื™ ืžื™ื“ืข ื‘ืฉื‘ื™ืœ ื”ื›ื™ืฃ ื•ื”ืจื•ื•ื—". ืžื”ื ืชื•ื›ืœื• ืœืœืงื˜ ืžื™ื“ืข ื”ืŸ ืขืœ ื”ืืžื™ื ื•ืช ื—ืกืจืช ื”ืชืงื“ื™ื ืฉืœ LMDB ื•ื”ืŸ ืขืœ ื”ื”ื˜ืžืขื” ื”ื›ืžืขื˜ ืœืœื ืจื‘ื‘ ืฉืœ ืžืืคื™ื™ื ื™ ืขืกืงืื•ืช ACID, ืฉืขื“ื™ืคื” ืขืœ ื–ื• ืฉืœ SQLite.
  5. ื”ืžื™ื ื™ืžืœื™ื–ื ืฉืœ LMDB ืžืืคืฉืจ ืœื™ื™ืฆื•ื’ ื”ืžื›ื•ื ื” ืฉืœ ื”ืงื•ื“ ืฉืœื• ืœื”ื™ื•ืช ืžืžื•ืงื ืœื—ืœื•ื˜ื™ืŸ ื‘ืžื˜ืžื•ืŸ L1 ืฉืœ ื”ืžืขื‘ื“ ืขื ืžืืคื™ื™ื ื™ ื”ืžื”ื™ืจื•ืช ื”ื ื•ื‘ืขื™ื ืžื›ืš.

ืœืจื•ืข ื”ืžื–ืœ, ื‘-iOS, ืขื ืงื‘ืฆื™ื ืžืžื•ืคื™ื ืœื–ื™ื›ืจื•ืŸ, ื”ื›ืœ ืœื ื ื˜ื•ืœ ืขื ื ื™ื ื›ืžื• ืฉื”ื™ื™ื ื• ืจื•ืฆื™ื. ื›ื“ื™ ืœื“ื‘ืจ ืขืœ ื”ื—ืกืจื•ื ื•ืช ื”ืงืฉื•ืจื™ื ืืœื™ื”ื ื‘ืฆื•ืจื” ืžื•ื“ืขืช ื™ื•ืชืจ, ื™ืฉ ืฆื•ืจืš ืœื–ื›ื•ืจ ืืช ื”ืขืงืจื•ื ื•ืช ื”ื›ืœืœื™ื™ื ืฉืœ ื™ื™ืฉื•ื ืžื ื’ื ื•ืŸ ื–ื” ื‘ืžืขืจื›ื•ืช ื”ืคืขืœื”.

ืžื™ื“ืข ื›ืœืœื™ ืขืœ ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOSืขื ื›ืœ ืืคืœื™ืงืฆื™ื” ืฉืคื•ืขืœืช, ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžืฉื™ื™ื›ืช ื™ืฉื•ืช ื”ื ืงืจืืช ืชื”ืœื™ืš. ืœื›ืœ ืชื”ืœื™ืš ืžื•ืงืฆื” ืžื’ื•ื•ืŸ ืจืฆื™ืฃ ืฉืœ ื›ืชื•ื‘ื•ืช ื‘ื• ื”ื•ื ืžืฆื™ื‘ ืืช ื›ืœ ืžื” ืฉืฆืจื™ืš ื›ื“ื™ ืœืคืขื•ืœ. ื‘ื›ืชื•ื‘ื•ืช ื”ื ืžื•ื›ื•ืช ื‘ื™ื•ืชืจ ื™ืฉ ืงื˜ืขื™ื ืขื ืงื•ื“ ื•ื ืชื•ื ื™ื ื•ืžืฉืื‘ื™ื ืžืงื•ื“ื“ื™ื. ืœืื—ืจ ืžื›ืŸ ืžื’ื™ืข ื‘ืœื•ืง ื”ื•ืœืš ื•ื’ื“ืœ ืฉืœ ืžืจื—ื‘ ื›ืชื•ื‘ื•ืช ื“ื™ื ืžื™, ื”ืžื•ื›ืจ ืœื ื• ื”ื™ื˜ื‘ ืชื—ืช ื”ืฉื heap. ื”ื•ื ืžื›ื™ืœ ืืช ื”ื›ืชื•ื‘ื•ืช ืฉืœ ื™ืฉื•ื™ื•ืช ื”ืžื•ืคื™ืขื•ืช ื‘ืžื”ืœืš ื”ืคืขืœืช ื”ืชื•ื›ื ื™ืช. ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ื ืžืฆื ืื–ื•ืจ ื”ื–ื™ื›ืจื•ืŸ ื”ืžืฉืžืฉ ืืช ืžื—ืกื ื™ืช ื”ืืคืœื™ืงืฆื™ื•ืช. ื”ื•ื ื’ื“ืœ ืื• ืžืชื›ื•ื•ืฅ; ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืœื’ื•ื“ืœื• ื™ืฉ ื’ื ืื•ืคื™ ื“ื™ื ืžื™. ื›ื“ื™ ืœืžื ื•ืข ืžื”ืžื—ืกื ื™ืช ื•ื”ืขืจื™ืžื” ืœื“ื—ื•ืฃ ื•ืœื”ืคืจื™ืข ื–ื” ืœื–ื”, ื”ื ืžืžื•ืงืžื™ื ื‘ืงืฆื•ื•ืช ืฉื•ื ื™ื ืฉืœ ืžืจื—ื‘ ื”ื›ืชื•ื‘ื•ืช. ื™ืฉ ื—ื•ืจ ื‘ื™ืŸ ืฉื ื™ ื”ื—ืœืงื™ื ื”ื“ื™ื ืžื™ื™ื ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ื•ื”ืชื—ืชื•ืŸ. ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžืฉืชืžืฉืช ื‘ื›ืชื•ื‘ื•ืช ื‘ื—ืœืง ื”ืืžืฆืขื™ ื”ื–ื” ื›ื“ื™ ืœืฉื™ื™ืš ืžื’ื•ื•ืŸ ืฉืœ ื™ืฉื•ื™ื•ืช ืœืชื”ืœื™ืš. ื‘ืคืจื˜, ื”ื•ื ื™ื›ื•ืœ ืœืฉื™ื™ืš ืงื‘ื•ืฆื” ืจืฆื™ืคื” ืžืกื•ื™ืžืช ืฉืœ ื›ืชื•ื‘ื•ืช ืœืงื•ื‘ืฅ ื‘ื“ื™ืกืง. ืงื•ื‘ืฅ ื›ื–ื” ื ืงืจื Memory-mapped.โ€‹

ืฉื˜ื— ื”ื›ืชื•ื‘ื•ืช ื”ืžื•ืงืฆื” ืœืชื”ืœื™ืš ื”ื•ื ืขืฆื•ื. ืชื™ืื•ืจื˜ื™ืช, ืžืกืคืจ ื”ื›ืชื•ื‘ื•ืช ืžื•ื’ื‘ืœ ืจืง ืขืœ ื™ื“ื™ ื’ื•ื“ืœ ื”ืžืฆื‘ื™ืข, ืืฉืจ ื ืงื‘ืข ืขืœ ื™ื“ื™ ืงื™ื‘ื•ืœืช ื”ืกื™ื‘ื™ื•ืช ืฉืœ ื”ืžืขืจื›ืช. ืื ื”ื–ื™ื›ืจื•ืŸ ื”ืคื™ื–ื™ ื”ื™ื” ืžืžื•ืคื” ืืœื™ื• 1 ืœ-1, ืื– ื”ืชื”ืœื™ืš ื”ืจืืฉื•ืŸ ื”ื™ื” ื–ื•ืœืœ ืืช ื›ืœ ื–ื™ื›ืจื•ืŸ ื”-RAM, ื•ืœื ื”ื™ื” ื“ื™ื‘ื•ืจ ืขืœ ืจื™ื‘ื•ื™ ืžืฉื™ืžื•ืช.

ืขื ื–ืืช, ืžื ื™ืกื™ื•ื ื ื• ืื ื• ื™ื•ื“ืขื™ื ืฉืžืขืจื›ื•ืช ื”ืคืขืœื” ืžื•ื“ืจื ื™ื•ืช ื™ื›ื•ืœื•ืช ืœื‘ืฆืข ื‘ื• ื–ืžื ื™ืช ื›ืžื” ืชื”ืœื™ื›ื™ื ืฉืชืจืฆื”. ื–ื” ืืคืฉืจื™ ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื”ื ืจืง ืžืงืฆื™ื ื”ืจื‘ื” ื–ื™ื›ืจื•ืŸ ืœืชื”ืœื™ื›ื™ื ืขืœ ื”ื ื™ื™ืจ, ืื‘ืœ ืœืžืขืฉื” ื”ื ืžืขืžื™ืกื™ื ืœื–ื™ื›ืจื•ืŸ ื”ืคื™ื–ื™ ื”ืจืืฉื™ ืจืง ืืช ื”ื—ืœืง ื”ืžื‘ื•ืงืฉ ื›ืืŸ ื•ืขื›ืฉื™ื•. ืœื›ืŸ, ื”ื–ื™ื›ืจื•ืŸ ื”ืงืฉื•ืจ ืœืชื”ืœื™ืš ื ืงืจื ื•ื™ืจื˜ื•ืืœื™.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžืืจื’ื ืช ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™ ื•ืคื™ื–ื™ ืœื“ืคื™ื ื‘ื’ื•ื“ืœ ืžืกื•ื™ื. ื‘ืจื’ืข ืฉื“ืฃ ืžืกื•ื™ื ืฉืœ ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™ ืžื‘ื•ืงืฉ, ืžืขืจื›ืช ื”ื”ืคืขืœื” ื˜ื•ืขื ืช ืื•ืชื• ืœื–ื™ื›ืจื•ืŸ ื”ืคื™ื–ื™ ื•ืžืชืื™ืžื” ืื•ืชื ื‘ื˜ื‘ืœื” ืžื™ื•ื—ื“ืช. ืื ืื™ืŸ ื—ืจื™ืฆื™ื ืคื ื•ื™ื™ื, ืื—ื“ ืžื”ื“ืคื™ื ืฉื ื˜ืขื ื• ืงื•ื“ื ืœื›ืŸ ืžื•ืขืชืง ืœื“ื™ืกืง, ื•ื”ืžื‘ื•ืงืฉ ืชื•ืคืก ืืช ืžืงื•ืžื•. ื”ืœื™ืš ื–ื”, ืืœื™ื• ื ื—ื–ื•ืจ ืขื•ื“ ืžืขื˜, ื ืงืจื ื”ื—ืœืคื”. ื”ืื™ื•ืจ ืฉืœื”ืœืŸ ืžืžื—ื™ืฉ ืืช ื”ืชื”ืœื™ืš ื”ืžืชื•ืืจ. ืขืœื™ื• ื ื˜ืขืŸ ืขืžื•ื“ A ืขื ื›ืชื•ื‘ืช 0 ื•ื”ื•ืฆื‘ ื‘ื“ืฃ ื”ื–ื™ื›ืจื•ืŸ ื”ืจืืฉื™ ืขื ื›ืชื•ื‘ืช 4. ืขื•ื‘ื“ื” ื–ื• ื‘ืื” ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ื‘ื˜ื‘ืœืช ื”ื”ืชื›ืชื‘ื•ื™ื•ืช ื‘ืชื ืžืกืคืจ 0.โ€‹

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื”ืกื™ืคื•ืจ ื–ื”ื” ืœื—ืœื•ื˜ื™ืŸ ืขื ืงื‘ืฆื™ื ืฉืžื•ืคื• ืœื–ื™ื›ืจื•ืŸ. ื‘ืื•ืคืŸ ื”ื’ื™ื•ื ื™, ื”ื ื›ื‘ื™ื›ื•ืœ ืžืžื•ืงืžื™ื ื‘ืื•ืคืŸ ืจืฆื™ืฃ ื•ื›ืœ ื›ื•ืœื• ื‘ืžืจื—ื‘ ื”ื›ืชื•ื‘ื•ืช ื”ื•ื•ื™ืจื˜ื•ืืœื™. ืขื ื–ืืช, ื”ื ื ื›ื ืกื™ื ืœื–ื™ื›ืจื•ืŸ ื”ืคื™ื–ื™ ืขืžื•ื“ ืื—ืจ ืขืžื•ื“ ื•ืจืง ืœืคื™ ื‘ืงืฉื”. ืฉื™ื ื•ื™ ืฉืœ ื“ืคื™ื ื›ืืœื” ืžืกื•ื ื›ืจืŸ ืขื ื”ืงื•ื‘ืฅ ื‘ื“ื™ืกืง. ื‘ื“ืจืš ื–ื•, ื ื™ืชืŸ ืœื‘ืฆืข ืงืœื˜/ืคืœื˜ ืฉืœ ืงื‘ืฆื™ื ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ืขื‘ื•ื“ื” ืขื ื‘ืชื™ื ื‘ื–ื™ื›ืจื•ืŸ - ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ื™ื•ืขื‘ืจื• ืื•ื˜ื•ืžื˜ื™ืช ืขืœ ื™ื“ื™ ืœื™ื‘ืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืœืงื•ื‘ืฅ ื”ืžืงื•ืจ.โ€‹
โ€‹
ื”ืชืžื•ื ื” ืœืžื˜ื” ืžื“ื’ื™ืžื” ื›ื™ืฆื“ LMDB ืžืกื ื›ืจืŸ ืืช ืžืฆื‘ื• ื‘ืขืช ืขื‘ื•ื“ื” ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ืžืชื”ืœื™ื›ื™ื ืฉื•ื ื™ื. ืขืœ ื™ื“ื™ ืžื™ืคื•ื™ ื”ื–ื™ื›ืจื•ืŸ ื”ื•ื™ืจื˜ื•ืืœื™ ืฉืœ ืชื”ืœื™ื›ื™ื ืฉื•ื ื™ื ืœืื•ืชื• ืงื•ื‘ืฅ, ืื ื• ืžื—ื™ื™ื‘ื™ื ืœืžืขืฉื” ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืœืกื ื›ืจืŸ ื‘ืื•ืคืŸ ื˜ืจื ื–ื™ื˜ื™ื‘ื™ ื‘ืœื•ืงื™ื ืžืกื•ื™ืžื™ื ืฉืœ ืžืจื—ื‘ื™ ื”ื›ืชื•ื‘ื•ืช ืฉืœื”ื ื–ื” ืขื ื–ื”, ื”ื™ื›ืŸ ืฉืžืกืชื›ืœืช LMDB.โ€‹
โ€‹

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื ื™ื•ืื ืก ื—ืฉื•ื‘ ื”ื•ื ืฉ-LMDB, ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžืฉื ื” ืืช ืงื•ื‘ืฅ ื”ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ ืงืจื™ืืช ื”ืžืขืจื›ืช ืœื›ืชื™ื‘ื”, ื•ืžืฆื™ื’ ืืช ื”ืงื•ื‘ืฅ ืขืฆืžื• ื‘ืžืฆื‘ ืงืจื™ืื” ื‘ืœื‘ื“. ืœื’ื™ืฉื” ื–ื• ืฉืชื™ ื”ืฉืœื›ื•ืช ื—ืฉื•ื‘ื•ืช.

ื”ืชื•ืฆืื” ื”ืจืืฉื•ื ื” ืžืฉื•ืชืคืช ืœื›ืœ ืžืขืจื›ื•ืช ื”ื”ืคืขืœื”. ื”ืžื”ื•ืช ืฉืœื• ื”ื™ื ืœื”ื•ืกื™ืฃ ื”ื’ื ื” ืžืคื ื™ ื ื–ืง ืœื ืžื›ื•ื•ืŸ ืœืžืกื“ ื”ื ืชื•ื ื™ื ืขืœ ื™ื“ื™ ืงื•ื“ ืฉื’ื•ื™. ื›ืคื™ ืฉืืชื” ื™ื•ื“ืข, ื”ื•ืจืื•ืช ื”ื”ืคืขืœื” ืฉืœ ืชื”ืœื™ืš ื—ื•ืคืฉื™ื•ืช ืœื’ืฉืช ืœื ืชื•ื ื™ื ืžื›ืœ ืžืงื•ื ื‘ืžืจื—ื‘ ื”ื›ืชื•ื‘ื•ืช ืฉืœื•. ื™ื—ื“ ืขื ื–ืืช, ื›ืคื™ ืฉืจืง ื–ื›ืจื ื•, ื”ืฆื’ืช ืงื•ื‘ืฅ ื‘ืžืฆื‘ ืงืจื™ืื”-ื›ืชื™ื‘ื” ืคื™ืจื•ืฉื” ืฉื›ืœ ื”ื•ืจืื” ื™ื›ื•ืœื” ื’ื ืœืฉื ื•ืช ืื•ืชื•. ืื ื”ื™ื ืขื•ืฉื” ื–ืืช ื‘ื˜ืขื•ืช, ืžื ืกื”, ืœืžืฉืœ, ืœืžืขืฉื” ืœื”ื—ืœื™ืฃ ืืœืžื ื˜ ืžืขืจืš ื‘ืื™ื ื“ืงืก ืœื ืงื™ื™ื, ืื– ื”ื™ื ื™ื›ื•ืœื” ืœืฉื ื•ืช ื‘ื˜ืขื•ืช ืืช ื”ืงื•ื‘ืฅ ื”ืžืžื•ืคื” ืœื›ืชื•ื‘ืช ื–ื•, ืžื” ืฉื™ื•ื‘ื™ืœ ืœืคื’ื™ืขื” ื‘ืžืกื“ ื”ื ืชื•ื ื™ื. ืื ื”ืงื•ื‘ืฅ ืžื•ืฆื’ ื‘ืžืฆื‘ ืงืจื™ืื” ื‘ืœื‘ื“, ืื– ื ื™ืกื™ื•ืŸ ืœืฉื ื•ืช ืืช ืžืจื—ื‘ ื”ื›ืชื•ื‘ื•ืช ื”ืžืชืื™ื ื™ื•ื‘ื™ืœ ืœืกื™ื•ื ื—ื™ืจื•ื ืฉืœ ื”ืชื•ื›ื ื™ืช ืขื ืื•ืช SIGSEGV, ื•ื”ืงื•ื‘ืฅ ื™ื™ืฉืืจ ืฉืœื.

ื”ืชื•ืฆืื” ื”ืฉื ื™ื™ื” ื›ื‘ืจ ืกืคืฆื™ืคื™ืช ืœ-iOS. ืœื ื”ืžื—ื‘ืจ ื•ืœื ื›ืœ ืžืงื•ืจื•ืช ืื—ืจื™ื ืžื–ื›ื™ืจื™ื ืืช ื–ื” ื‘ืžืคื•ืจืฉ, ืื‘ืœ ื‘ืœืขื“ื™ื• LMDB ืœื ื™ืชืื™ื ืœื”ืคืขืœื” ืขืœ ืžืขืจื›ืช ื”ืคืขืœื” ื ื™ื™ื“ืช ื–ื•. ื”ืกืขื™ืฃ ื”ื‘ื ืžื•ืงื“ืฉ ืœืฉื™ืงื•ืœื•.

ืคืจื˜ื™ื ืกืคืฆื™ืคื™ื™ื ืฉืœ ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ ื‘-iOS

ื”ื™ื” ื“ื™ื•ื•ื— ื ืคืœื ื‘-WWDC ื‘-2018 "ืฆืœื™ืœื” ืขืžื•ืงื” ื‘ื–ื™ื›ืจื•ืŸ iOS". ื–ื” ืื•ืžืจ ืœื ื• ืฉื‘-iOS, ื›ืœ ื”ื“ืคื™ื ืฉื ืžืฆืื™ื ื‘ื–ื™ื›ืจื•ืŸ ื”ืคื™ื–ื™ ื”ื ืื—ื“ ืž-3 ืกื•ื’ื™ื: ืžืœื•ื›ืœืš, ื“ื—ื•ืก ื•ื ืงื™.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื–ื™ื›ืจื•ืŸ ื ืงื™ ื”ื•ื ืื•ืกืฃ ืฉืœ ื“ืคื™ื ืฉื ื™ืชืŸ ืœืคืจื•ืง ืœืœื ื›ืื‘ ืžื”ื–ื™ื›ืจื•ืŸ ื”ืคื™ื–ื™. ื ื™ืชืŸ ืœื˜ืขื•ืŸ ืžื—ื“ืฉ ืืช ื”ื ืชื•ื ื™ื ืฉื”ื ืžื›ื™ืœื™ื ืœืคื™ ื”ืฆื•ืจืš ืžื”ืžืงื•ืจื•ืช ื”ืžืงื•ืจื™ื™ื ืฉืœื•. ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ ืœืงืจื™ืื” ื‘ืœื‘ื“ ื ื›ื ืกื™ื ืœืงื˜ื’ื•ืจื™ื” ื–ื•. iOS ืœื ื—ื•ืฉืฉืช ืœืคืจื•ืง ืืช ื”ื“ืคื™ื ื”ืžืžื•ืคื™ื ืœืงื•ื‘ืฅ ืžื”ื–ื™ื›ืจื•ืŸ ื‘ื›ืœ ืขืช, ืžื›ื™ื•ื•ืŸ ืฉื”ื ืžื•ื‘ื˜ื—ื™ื ืœื”ื™ื•ืช ืžืกื•ื ื›ืจื ื™ื ืขื ื”ืงื•ื‘ืฅ ื‘ื“ื™ืกืง.
โ€‹
ื›ืœ ื”ื“ืคื™ื ืฉื”ืฉืชื ื• ืžื’ื™ืขื™ื ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืœื–ื™ื›ืจื•ืŸ ืžืœื•ื›ืœืš, ืœื ืžืฉื ื” ื”ื™ื›ืŸ ื”ื ื”ื™ื• ืžืžื•ืงืžื™ื ื‘ืžืงื•ืจ. ื‘ืคืจื˜, ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ ืฉืฉื•ื ื• ืขืœ ื™ื“ื™ ื›ืชื™ื‘ื” ืœื–ื™ื›ืจื•ืŸ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ื”ืžืฉื•ื™ืš ืืœื™ื”ื ื™ืกื•ื•ื’ื• ื‘ืฆื•ืจื” ื–ื•. ืคืชื™ื—ืช LMDB ืขื ื“ื’ืœ MDB_WRITEMAP, ืœืื—ืจ ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ื‘ื•, ืชื•ื›ืœ ืœืืžืช ื–ืืช ื‘ืื•ืคืŸ ืื™ืฉื™.โ€‹

ื‘ืจื’ืข ืฉืืคืœื™ืงืฆื™ื” ืžืชื—ื™ืœื” ืœืชืคื•ืก ื™ื•ืชืจ ืžื“ื™ ื–ื™ื›ืจื•ืŸ ืคื™ื–ื™, iOS ืžืขื‘ื™ืจ ืื•ืชื” ืœื“ื—ื™ืกืช ื“ืคื™ื ืžืœื•ื›ืœื›ืช. ื”ื–ื™ื›ืจื•ืŸ ื”ื›ื•ืœืœ ืฉื ื›ื‘ืฉ ืขืœ ื™ื“ื™ ื“ืคื™ื ืžืœื•ื›ืœื›ื™ื ื•ื“ื—ื•ืกื™ื ืžื”ื•ื•ื” ืืช ืžื” ืฉืžื›ื•ื ื” ื˜ื‘ื™ืขืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ื”ืืคืœื™ืงืฆื™ื”. ื‘ืจื’ืข ืฉื”ื•ื ืžื’ื™ืข ืœืขืจืš ืกืฃ ืžืกื•ื™ื, ื”ื“ืžื•ืŸ ืฉืœ ืžืขืจื›ืช ื”ืจื•ืฆื— OOM ืžื’ื™ืข ืื—ืจื™ ื”ืชื”ืœื™ืš ื•ืžืกื™ื™ื ืื•ืชื• ื‘ื›ื•ื—. ื–ื•ื”ื™ ื”ืžื•ื–ืจื•ืช ืฉืœ iOS ื‘ื”ืฉื•ื•ืื” ืœืžืขืจื›ื•ืช ื”ืคืขืœื” ืฉื•ืœื—ื ื™ื•ืช. ืœืขื•ืžืช ื–ืืช, ืฆืžืฆื•ื ื˜ื‘ื™ืขืช ื”ืจื’ืœ ืฉืœ ื”ื–ื™ื›ืจื•ืŸ ืขืœ ื™ื“ื™ ื”ื—ืœืคืช ืขืžื•ื“ื™ื ืžื–ื™ื›ืจื•ืŸ ืคื™ื–ื™ ืœื“ื™ืกืง ืื™ื ื• ืžืกื•ืคืง ื‘-iOS. ื ื™ืชืŸ ืจืง ืœื ื—ืฉ ืืช ื”ืกื™ื‘ื•ืช. ืื•ืœื™ ื”ื”ืœื™ืš ืฉืœ ื”ืขื‘ืจื” ืื™ื ื˜ื ืกื™ื‘ื™ืช ืฉืœ ื“ืคื™ื ืœื“ื™ืกืง ื•ื‘ื—ื–ืจื” ื’ื•ื–ืœ ืžื“ื™ ืื ืจื’ื™ื” ืขื‘ื•ืจ ืžื›ืฉื™ืจื™ื ื ื™ื™ื“ื™ื, ืื• ืฉ-iOS ื—ื•ืกืš ืืช ื”ืžืฉืื‘ ืฉืœ ืฉื›ืชื•ื‘ ืชืื™ื ืขืœ ื›ื•ื ื ื™ SSD, ืื• ืฉืื•ืœื™ ื”ืžืขืฆื‘ื™ื ืœื ื”ื™ื• ืžืจื•ืฆื™ื ืžื”ื‘ื™ืฆื•ืขื™ื ื”ื›ื•ืœืœื™ื ืฉืœ ื”ืžืขืจื›ืช, ืฉื‘ื” ื”ื›ืœ ื ืžืฆื ืžื—ืœื™ืคื™ื ื›ืœ ื”ื–ืžืŸ. ื›ืš ืื• ื›ืš, ื”ืขื•ื‘ื“ื” ื ืฉืืจืช ืขื•ื‘ื“ื”.

ื”ื—ื“ืฉื•ืช ื”ื˜ื•ื‘ื•ืช, ืฉื›ื‘ืจ ื”ื•ื–ื›ืจื• ืงื•ื“ื ืœื›ืŸ, ื”ืŸ ืฉ-LMDB ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืื™ื ื” ืžืฉืชืžืฉืช ื‘ืžื ื’ื ื•ืŸ mmap ืœืขื“ื›ื•ืŸ ืงื‘ืฆื™ื. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉื”ื ืชื•ื ื™ื ื”ืžื•ืฆื’ื™ื ืžืกื•ื•ื’ื™ื ืขืœ ื™ื“ื™ iOS ื›ื–ื™ื›ืจื•ืŸ ื ืงื™ ื•ืื™ื ื ืชื•ืจืžื™ื ืœื˜ื‘ื™ืขืช ื”ืจื’ืœ ืฉืœ ื”ื–ื™ื›ืจื•ืŸ. ืืชื” ื™ื›ื•ืœ ืœืืžืช ื–ืืช ื‘ืืžืฆืขื•ืช ื›ืœื™ Xcode ื‘ืฉื VM Tracker. ืฆื™ืœื•ื ื”ืžืกืš ืœืžื˜ื” ืžืฆื™ื’ ืืช ืžืฆื‘ ื”ื–ื™ื›ืจื•ืŸ ื”ื•ื™ืจื˜ื•ืืœื™ ืฉืœ iOS ืฉืœ ืืคืœื™ืงืฆื™ื™ืช ื”ืขื ืŸ ื‘ืžื”ืœืš ื”ืคืขื•ืœื”. ื‘ื”ืชื—ืœื”, 2 ืžื•ืคืขื™ LMDB ืื•ืชื—ืœื• ื‘ื•. ื”ืจืืฉื•ืŸ ื”ื•ืจืฉื” ืœื”ืฆื™ื’ ืืช ื”ืงื•ื‘ืฅ ืฉืœื• ืขืœ 1GiB ืฉืœ ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™, ื”ืฉื ื™ - 512MiB. ืœืžืจื•ืช ื”ืขื•ื‘ื“ื” ืฉืฉื ื™ ื”ืžืื’ืจื™ื ืชื•ืคืกื™ื ื›ืžื•ืช ืžืกื•ื™ืžืช ืฉืœ ื–ื™ื›ืจื•ืŸ ืชื•ืฉื‘, ืืฃ ืื—ื“ ืžื”ื ืœื ืชื•ืจื ื’ื•ื“ืœ ืžืœื•ื›ืœืš.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื•ืขื›ืฉื™ื• ื”ื’ื™ืข ื”ื–ืžืŸ ืœื—ื“ืฉื•ืช ืจืขื•ืช. ื”ื•ื“ื•ืช ืœืžื ื’ื ื•ืŸ ื”ื”ื—ืœืคื” ื‘ืžืขืจื›ื•ืช ื”ืคืขืœื” ืฉื•ืœื—ื ื™ื•ืช ืฉืœ 64 ืกื™ื‘ื™ื•ืช, ื›ืœ ืชื”ืœื™ืš ื™ื›ื•ืœ ืœืชืคื•ืก ืฉื˜ื— ื›ืชื•ื‘ื•ืช ื•ื™ืจื˜ื•ืืœื™ ื›ื›ืœ ืฉื”ืฉื˜ื— ื”ืคื ื•ื™ ื‘ื“ื™ืกืง ื”ืงืฉื™ื— ืœื”ื—ืœืคื” ื”ืคื•ื˜ื ืฆื™ืืœื™ืช ืฉืœื• ืžืืคืฉืจ. ื”ื—ืœืคืช ื”ื—ืœืคื” ื‘ื“ื—ื™ืกื” ื‘-iOS ืžืคื—ื™ืชื” ื‘ืื•ืคืŸ ืงื™ืฆื•ื ื™ ืืช ื”ืžืงืกื™ืžื•ื ื”ืชื™ืื•ืจื˜ื™. ื›ืขืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื”ื—ื™ื™ื ื—ื™ื™ื‘ื™ื ืœื”ืฉืชืœื‘ ื‘ื–ื™ื›ืจื•ืŸ ื”ืจืืฉื™ (ืœืงืจื•ื RAM), ื•ื›ืœ ืืœื” ืฉืื™ื ื ืžืชืื™ืžื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ืืœืฅ ืœื”ืกืชื™ื™ื. ื–ื” ืžืฆื•ื™ืŸ ื›ืžื• ื‘ืืžื•ืจ ืœืขื™ืœ ืœื”ื’ื™ืฉ ืชืœื•ื ื”, ื• ื‘ ืชื™ืขื•ื“ ืจืฉืžื™. ื›ืชื•ืฆืื” ืžื›ืš, iOS ืžื’ื‘ื™ืœื” ืžืื•ื“ ืืช ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ื–ืžื™ื ื” ืœื”ืงืฆืื” ื‘ืืžืฆืขื•ืช mmap. ื›ืืŸ ื›ืืŸ ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ื”ื’ื‘ื•ืœื•ืช ื”ืืžืคื™ืจื™ื™ื ืฉืœ ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ืฉื ื™ืชืŸ ืœื”ืงืฆื•ืช ืœืžื›ืฉื™ืจื™ื ืฉื•ื ื™ื ื‘ืืžืฆืขื•ืช ืฉื™ื—ืช ืžืขืจื›ืช ื–ื•. ื‘ื“ื’ืžื™ ื”ืกืžืืจื˜ืคื•ื ื™ื ื”ืžื•ื“ืจื ื™ื™ื ื‘ื™ื•ืชืจ, iOS ื”ืคื›ื” ืœื ื“ื™ื‘ื” ื‘-2 ื’ื™ื’ื”-ื‘ื™ื™ื˜, ื•ื‘ื’ืจืกืื•ืช ืžื•ื‘ื™ืœื•ืช ืฉืœ ื”ืื™ื™ืคื“ - ื‘-4. ื‘ืคื•ืขืœ, ื›ืžื•ื‘ืŸ, ืฆืจื™ืš ืœื”ืชืžืงื“ ื‘ื“ื’ืžื™ ื”ืžื›ืฉื™ืจื™ื ื”ื ืชืžื›ื™ื ื”ื ืžื•ื›ื™ื ื‘ื™ื•ืชืจ, ืฉื ื”ื›ืœ ืขืฆื•ื‘ ืžืื•ื“. ื’ืจื•ืข ืžื›ืš, ืขืœ ื™ื“ื™ ื”ืชื‘ื•ื ื ื•ืช ื‘ืžืฆื‘ ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื‘-VM Tracker, ืชื’ืœื• ืฉ-LMDB ืจื—ื•ืงื” ืžืœื”ื™ื•ืช ื”ื™ื—ื™ื“ื” ืฉื˜ื•ืขื ืช ืฉื”ื™ื ืžืžื•ืคื” ื–ื™ื›ืจื•ืŸ. ื ืชื—ื™ื ื˜ื•ื‘ื™ื ื ืื›ืœื™ื ืขืœ ื™ื“ื™ ืžืงืฆื™ ืžืขืจื›ืช, ืงื‘ืฆื™ ืžืฉืื‘ื™ื, ืžืกื’ืจื•ืช ืชืžื•ื ื” ื•ื˜ื•ืจืคื™ื ืงื˜ื ื™ื ืื—ืจื™ื.

ื‘ื”ืชื‘ืกืก ืขืœ ืชื•ืฆืื•ืช ื ื™ืกื•ื™ื™ื ื‘ืขื ืŸ, ื”ื’ืขื ื• ืœืขืจื›ื™ ื”ืคืฉืจื” ื”ื‘ืื™ื ืขื‘ื•ืจ ื”ื–ื™ื›ืจื•ืŸ ืฉื”ื•ืงืฆื” ืขืœ ื™ื“ื™ LMDB: 384 ืžื’ื” ื‘ื™ื™ื˜ ืœืžื›ืฉื™ืจื™ 32 ืกื™ื‘ื™ื•ืช ื•-768 ืขื‘ื•ืจ ื”ืชืงื ื™ 64 ืกื™ื‘ื™ื•ืช. ืœืื—ืจ ืฉื ืคื— ื–ื” ืžื ื•ืฆืœ, ื›ืœ ืคืขื•ืœื•ืช ื”ืฉื™ื ื•ื™ ืžืชื—ื™ืœื•ืช ืœื”ืกืชื™ื™ื ื‘ืงื•ื“ MDB_MAP_FULL. ืื ื• ืจื•ืื™ื ื˜ืขื•ื™ื•ืช ื›ืืœื” ื‘ืžืขืงื‘ ืฉืœื ื•, ืื‘ืœ ื”ืŸ ืงื˜ื ื•ืช ืžืกืคื™ืง ื›ื“ื™ ืฉื‘ืฉืœื‘ ื–ื” ื ื™ืชืŸ ืœื”ื–ื ื™ื— ืื•ืชืŸ.

ืกื™ื‘ื” ืœื ื‘ืจื•ืจื” ืœืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ ืžื•ื’ื–ืžืช ืขืœ ื™ื“ื™ ื”ืื—ืกื•ืŸ ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืขืกืงืื•ืช ืืจื•ื›ื•ืช ื—ื™ื™ื. ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืฉืชื™ ื”ืชื•ืคืขื•ืช ื”ืœืœื• ืงืฉื•ืจื•ืช, ื ื™ืขื–ืจ ื‘ื”ืชื—ืฉื‘ ื‘ืฉื ื™ ืขืžื•ื“ื™ ื”ืชื•ื•ืš ื”ื ื•ืชืจื™ื ืฉืœ LMDB.

3.2. ืœื•ื•ื™ืชืŸ ืžืก' 2. B+-ืขืฅ

ื›ื“ื™ ืœื—ืงื•ืช ื˜ื‘ืœืื•ืช ืขืœ ื’ื‘ื™ ืื—ืกื•ืŸ ืขืจืš ืžืคืชื—, ื”ืคืขื•ืœื•ืช ื”ื‘ืื•ืช ื—ื™ื™ื‘ื•ืช ืœื”ื™ื•ืช ื ื•ื›ื—ื•ืช ื‘-API ืฉืœื•:

  1. ื”ื›ื ืกืช ืืœืžื ื˜ ื—ื“ืฉ.
  2. ื—ืคืฉ ืืœืžื ื˜ ืขื ืžืคืชื— ื ืชื•ืŸ.
  3. ื”ืกืจืช ืืœืžื ื˜.
  4. ื—ื–ื•ืจ ืขืœ ืžืจื•ื•ื—ื™ ืžืคืชื—ื•ืช ืœืคื™ ืกื“ืจ ืžื™ื•ืŸ.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOSืžื‘ื ื” ื”ื ืชื•ื ื™ื ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ ืฉื™ื›ื•ืœ ืœื™ื™ืฉื ื‘ืงืœื•ืช ืืช ื›ืœ ืืจื‘ืข ื”ืคืขื•ืœื•ืช ื”ื•ื ืขืฅ ื—ื™ืคื•ืฉ ื‘ื™ื ืืจื™. ื›ืœ ืื—ื“ ืžื”ืฆืžืชื™ื ืฉืœื• ืžื™ื™ืฆื’ ืžืคืชื— ื”ืžื—ืœืง ืืช ื›ืœ ื”ืžืฉื ื” ืฉืœ ืžืคืชื—ื•ืช ื”ืฆืืฆื ืœืฉื ื™ ืชืชื™ ืขืฆื™ื. ื”ืฉืžืืœื™ ืžื›ื™ืœ ืืช ืืœื” ืฉืงื˜ื ื™ื ืžื”ื”ื•ืจื”, ื•ื”ื™ืžื™ืŸ ืžื›ื™ืœ ืืช ืืœื” ืฉื’ื“ื•ืœื™ื ื™ื•ืชืจ. ื”ืฉื’ืช ืขืจื›ืช ืžืคืชื—ื•ืช ืžืกื•ื“ืจืช ืžื•ืฉื’ืช ื‘ืืžืฆืขื•ืช ืื—ืช ืžืžืขื‘ืจื™ ื”ืขืฆื™ื ื”ืงืœืืกื™ื™ื

ืœืขืฆื™ื ื‘ื™ื ืืจื™ื™ื ื™ืฉ ืฉื ื™ ืคื’ืžื™ื ื‘ืกื™ืกื™ื™ื ืฉืžื•ื ืขื™ื ืžื”ื ืœื”ื™ื•ืช ื™ืขื™ืœื™ื ื›ืžื‘ื ื” ื ืชื•ื ื™ื ืžื‘ื•ืกืก ื“ื™ืกืง. ืจืืฉื™ืช, ืžื™ื“ืช ื”ืื™ื–ื•ืŸ ืฉืœื”ื ืื™ื ื” ื ื™ืชื ืช ืœื—ื™ื–ื•ื™. ืงื™ื™ื ืกื™ื›ื•ืŸ ื ื™ื›ืจ ื‘ื”ืฉื’ืช ืขืฆื™ื ื‘ื”ื ื’ื‘ื”ื™ื ืฉืœ ืขื ืคื™ื ืฉื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืฉื•ื ื™ื ืžืื•ื“, ืžื” ืฉืžื—ืžื™ืจ ืžืฉืžืขื•ืชื™ืช ืืช ื”ืžื•ืจื›ื‘ื•ืช ื”ืืœื’ื•ืจื™ืชืžื™ืช ืฉืœ ื”ื—ื™ืคื•ืฉ ืœืขื•ืžืช ื”ืฆืคื•ื™. ืฉื ื™ืช, ืฉืคืข ื”ืงื™ืฉื•ืจื™ื ื”ืฆื•ืœื‘ื™ื ื‘ื™ืŸ ืฆืžืชื™ื ืžื•ื ืข ืžืขืฆื™ื ื‘ื™ื ืืจื™ื™ื ืžืงื•ืžื™ื•ืช ื‘ื–ื™ื›ืจื•ืŸ, ืฆืžืชื™ื ืงืจื•ื‘ื™ื (ืžื‘ื—ื™ื ืช ื”ืงืฉืจื™ื ื‘ื™ื ื™ื”ื) ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžืžื•ืงืžื™ื ื‘ื“ืคื™ื ืฉื•ื ื™ื ืœื—ืœื•ื˜ื™ืŸ ื‘ื–ื™ื›ืจื•ืŸ ื”ื•ื™ืจื˜ื•ืืœื™. ื›ืชื•ืฆืื” ืžื›ืš, ืืคื™ืœื• ืžืขื‘ืจ ืคืฉื•ื˜ ืฉืœ ืžืกืคืจ ืฆืžืชื™ื ืกืžื•ื›ื™ื ื‘ืขืฅ ืขืฉื•ื™ื” ืœื“ืจื•ืฉ ื‘ื™ืงื•ืจ ื‘ืžืกืคืจ ื“ื•ืžื” ืฉืœ ื“ืคื™ื. ื–ื• ื‘ืขื™ื” ื’ื ื›ืฉืžื“ื‘ืจื™ื ืขืœ ื”ืืคืงื˜ื™ื‘ื™ื•ืช ืฉืœ ืขืฆื™ื ื‘ื™ื ืืจื™ื™ื ื›ืžื‘ื ื” ื ืชื•ื ื™ื ื‘ื–ื™ื›ืจื•ืŸ, ืฉื›ืŸ ืกื™ื‘ื•ื‘ ืžืชืžื™ื“ ืฉืœ ื“ืคื™ื ื‘ืžื˜ืžื•ืŸ ื”ืžืขื‘ื“ ืื™ื ื• ืชืขื ื•ื’ ื–ื•ืœ. ื›ืืฉืจ ืžื“ื•ื‘ืจ ื‘ืื—ื–ื•ืจ ืชื›ื•ืฃ ืฉืœ ื“ืคื™ื ื”ืงืฉื•ืจื™ื ืœืฆืžืชื™ื ืžื”ื“ื™ืกืง, ื”ืžืฆื‘ ื”ื•ืคืš ืœื—ืœื•ื˜ื™ืŸ ืžึฐืฆึทืขึตืจ.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOSืขืฆื™ B, ื‘ื”ื™ื•ืชื ืื‘ื•ืœื•ืฆื™ื” ืฉืœ ืขืฆื™ื ื‘ื™ื ืืจื™ื™ื, ืคื•ืชืจื™ื ืืช ื”ื‘ืขื™ื•ืช ืฉื–ื•ื”ื• ื‘ืคืกืงื” ื”ืงื•ื“ืžืช. ืจืืฉื™ืช, ื”ื ืžืื•ื–ื ื™ื ื‘ืขืฆืžื. ืฉื ื™ืช, ื›ืœ ืื—ื“ ืžื”ืฆืžืชื™ื ืฉืœื”ื ืžืคืฆืœ ืืช ืงื‘ื•ืฆืช ืžืคืชื—ื•ืช ื”ืฆืืฆื ืœื ืœ-2, ืืœื ืœืงื‘ื•ืฆื•ืช ืžืฉื ื” ืžืกื•ื“ืจื•ืช, ื•ื”ืžืกืคืจ M ื™ื›ื•ืœ ืœื”ื™ื•ืช ื’ื“ื•ืœ ืœืžื“ื™, ื‘ืกื“ืจ ื’ื•ื“ืœ ืฉืœ ื›ืžื” ืžืื•ืช, ืื• ืืคื™ืœื• ืืœืคื™ื.

ื‘ึผึฐื›ึธืš:

  1. ื›ืœ ืฆื•ืžืช ืžื›ื™ืœ ืžืกืคืจ ืจื‘ ืฉืœ ืžืคืชื—ื•ืช ืฉื›ื‘ืจ ื”ื•ื–ืžื ื• ื•ื”ืขืฆื™ื ืงืฆืจื™ื ืžืื•ื“.
  2. ื”ืขืฅ ืจื•ื›ืฉ ืืช ื”ืžืืคื™ื™ืŸ ืฉืœ ืžื™ืงื•ื ื”ืžื™ืงื•ื ื‘ื–ื™ื›ืจื•ืŸ, ืžื›ื™ื•ื•ืŸ ืฉืžืคืชื—ื•ืช ืงืจื•ื‘ื™ื ื‘ืขืจื›ื ืžืžื•ืงืžื™ื ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ื–ื” ืœื™ื“ ื–ื” ื‘ืื•ืชื ืฆืžืชื™ื ืื• ืฆืžืชื™ื ืฉื›ื ื™ื.
  3. ืžืกืคืจ ืฆืžืชื™ ื”ืžืขื‘ืจ ื‘ืขืช ื™ืจื™ื“ื” ืžืขืฅ ื‘ืžื”ืœืš ืคืขื•ืœืช ื—ื™ืคื•ืฉ ืžืฆื˜ืžืฆื.
  4. ืžืกืคืจ ืฆืžืชื™ ื”ื™ืขื“ ื”ื ืงืจืื™ื ื‘ืžื”ืœืš ืฉืื™ืœืชื•ืช ื˜ื•ื•ื— ืžืฆื˜ืžืฆื, ืžื›ื™ื•ื•ืŸ ืฉื›ืœ ืื—ื“ ืžื”ื ื›ื‘ืจ ืžื›ื™ืœ ืžืกืคืจ ืจื‘ ืฉืœ ืžืคืชื—ื•ืช ืžืกื•ื“ืจื™ื.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

LMDB ืžืฉืชืžืฉ ื‘ื•ื•ืจื™ืืฆื™ื” ืฉืœ ืขืฅ B ื”ืžื›ื•ื ื” ืขืฅ B+ ื›ื“ื™ ืœืื—ืกืŸ ื ืชื•ื ื™ื. ื”ืชืจืฉื™ื ืฉืœืžืขืœื” ืžืฆื™ื’ ืืช ืฉืœื•ืฉืช ืกื•ื’ื™ ื”ืฆืžืชื™ื ื”ืงื™ื™ืžื™ื ื‘ื•:

  1. ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ื ืžืฆื ื”ืฉื•ืจืฉ. ื–ื” ืžืžืžืฉ ืœื ื™ื•ืชืจ ืžืืฉืจ ื”ืจืขื™ื•ืŸ ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ื‘ืชื•ืš ืžื—ืกืŸ. ื‘ืชื•ืš ืžื•ืคืข LMDB ืื—ื“, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืกืคืจ ืžืกื“ื™ ื ืชื•ื ื™ื ืฉื—ื•ืœืงื™ื ืžืจื—ื‘ ื›ืชื•ื‘ื•ืช ื•ื™ืจื˜ื•ืืœื™ ืžืžื•ืคื”. ื›ืœ ืื—ื“ ืžื”ื ืžืชื—ื™ืœ ืžื”ืฉื•ืจืฉ ืฉืœื•.
  2. ื‘ืจืžื” ื”ื ืžื•ื›ื” ื‘ื™ื•ืชืจ ื ืžืฆืื™ื ื”ืขืœื™ื. ื”ื ื•ืจืง ื”ื ืžื›ื™ืœื™ื ืืช ืฆืžื“ื™ ื”ืžืคืชื—-ืขืจืš ื”ืžืื•ื—ืกื ื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื. ืื’ื‘, ื–ื• ื”ืžื•ื–ืจื•ืช ืฉืœ ืขืฆื™ B+. ืื ืขืฅ B ืจื’ื™ืœ ืžืื—ืกืŸ ื—ืœืงื™ ืขืจืš ื‘ืฆืžืชื™ื ื‘ื›ืœ ื”ืจืžื•ืช, ืื–ื™ ื”ื•ื•ืจื™ืืฆื™ื” B+ ื ืžืฆืืช ืจืง ื‘ื ืžื•ื›ื” ื‘ื™ื•ืชืจ. ืœืื—ืจ ืฉืชื™ืงื ื• ืขื•ื‘ื“ื” ื–ื•, ืขื•ื“ ื ืงืจื ืœืชืช-ื”ืกื•ื’ ืฉืœ ื”ืขืฅ ื”ืžืฉืžืฉ ื‘-LMDB ืคืฉื•ื˜ B-ืขืฅ.
  3. ื‘ื™ืŸ ื”ืฉื•ืจืฉ ื•ื”ืขืœื™ื ื™ืฉ 0 ืจืžื•ืช ื˜ื›ื ื™ื•ืช ืื• ื™ื•ืชืจ ืขื ืฆืžืชื™ ื ื™ื•ื•ื˜ (ืขื ืฃ). ื”ืžืฉื™ืžื” ืฉืœื”ื ื”ื™ื ืœื—ืœืง ืืช ืกื˜ ื”ืžืคืชื—ื•ืช ื”ืžืžื•ื™ืŸ ื‘ื™ืŸ ื”ืขืœื™ื.

ืžื‘ื—ื™ื ื” ืคื™ื–ื™ืช, ืฆืžืชื™ื ื”ื ื’ื•ืฉื™ ื–ื™ื›ืจื•ืŸ ื‘ืื•ืจืš ืงื‘ื•ืข ืžืจืืฉ. ื”ื’ื•ื“ืœ ืฉืœื”ื ื”ื•ื ื›ืคื•ืœ ืžื’ื•ื“ืœื ืฉืœ ื“ืคื™ ื–ื™ื›ืจื•ืŸ ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืฉืขืœื™ื” ื“ื ื• ืœืžืขืœื”. ืžื‘ื ื” ื”ืฆื•ืžืช ืžื•ืฆื’ ืœื”ืœืŸ. ื”ื›ื•ืชืจืช ืžื›ื™ืœื” ืžื˜ื ืžื™ื“ืข, ืฉื”ื‘ืจื•ืจ ืฉื‘ื”ื ื”ื•ื ืœืžืฉืœ ื”-checksum. ืœืื—ืจ ืžื›ืŸ ืžื’ื™ืข ืžื™ื“ืข ืขืœ ื”ื”ื™ืกื˜ื™ื ืฉื‘ื”ื ื ืžืฆืื™ื ื”ืชืื™ื ืขื ื”ื ืชื•ื ื™ื. ื”ื ืชื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžืคืชื—ื•ืช, ืื ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืฆืžืชื™ ื ื™ื•ื•ื˜, ืื• ืฆืžื“ื™ ืžืคืชื—-ืขืจืš ืฉืœืžื™ื ื‘ืžืงืจื” ืฉืœ ืขืœื™ื.โ€‹ ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ืžื‘ื ื” ื”ื“ืคื™ื ื‘ืขื‘ื•ื“ื” "ื”ืขืจื›ื” ืฉืœ ื—ื ื•ื™ื•ืช ืžืคืชื—-ืขืจืš ืขื ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื".

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืœืื—ืจ ืฉืขืกืงื ื• ื‘ืชื•ื›ืŸ ื”ืคื ื™ืžื™ ืฉืœ ืฆืžืชื™ ืขืžื•ื“ื™ื, ื ืฆื™ื’ ืขื•ื“ ื™ื•ืชืจ ืืช ืขืฅ B-LMDB ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื‘ื˜ื•ืคืก ื”ื‘ื.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื“ืคื™ื ืขื ืฆืžืชื™ื ืžืžื•ืงืžื™ื ื‘ืจืฆืฃ ื‘ื“ื™ืกืง. ืขืžื•ื“ื™ื ื‘ืขืœื™ ืžืกืคืจ ื’ื‘ื•ื” ื™ื•ืชืจ ืžืžื•ืงืžื™ื ืœืงืจืืช ืกื•ืฃ ื”ืงื•ื‘ืฅ. ืžื” ืฉื ืงืจื ืžื˜ื ื“ืฃ ืžื›ื™ืœ ืžื™ื“ืข ืขืœ ื”ืงื™ื–ื•ื–ื™ื ืฉื‘ืืžืฆืขื•ืชื ื ื™ืชืŸ ืœืžืฆื•ื ืืช ื”ืฉื•ืจืฉื™ื ืฉืœ ื›ืœ ื”ืขืฆื™ื. ื‘ืขืช ืคืชื™ื—ืช ืงื•ื‘ืฅ, LMDB ืกื•ืจืงืช ืืช ื”ืงื•ื‘ืฅ ืขืžื•ื“ ืื—ืจ ืขืžื•ื“ ืžืงืฆื” ืœื”ืชื—ืœื” ื‘ื—ื™ืคื•ืฉ ืื—ืจ ืžื˜ื ืขืžื•ื“ ื—ื•ืงื™ ื•ื“ืจื›ื• ืžื•ืฆืืช ืžืกื“ื™ ื ืชื•ื ื™ื ืงื™ื™ืžื™ื.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื›ืขืช, ืœืื—ืจ ืฉื™ืฉ ืœื ื• ืžื•ืฉื’ ืขืœ ื”ืžื‘ื ื” ื”ื”ื’ื™ื•ื ื™ ื•ื”ืคื™ื–ื™ ืฉืœ ืืจื’ื•ืŸ ื”ื ืชื•ื ื™ื, ืื ื• ื™ื›ื•ืœื™ื ืœืขื‘ื•ืจ ืœืฉืงื•ืœ ืืช ื”ืขืžื•ื“ ื”ืฉืœื™ืฉื™ ืฉืœ LMDB. ื‘ืขื–ืจืชื• ื›ืœ ืฉื™ื ื•ื™ื™ ื”ืื—ืกื•ืŸ ืžืชืจื—ืฉื™ื ื‘ืขืกืงืื•ืช ื•ื‘ืžื ื•ืชืง ื–ื” ืžื–ื”, ืžื” ืฉืžืขื ื™ืง ืœืžืกื“ ื”ื ืชื•ื ื™ื ื‘ื›ืœืœื•ืชื• ืืช ื”ืžืืคื™ื™ืŸ ืฉืœ ืจื™ื‘ื•ื™ ื’ืจืกืื•ืช.

3.3. ืœื•ื•ื™ืชืŸ ืžืก' 3. ื”ืขืชืง-ืขืœ-ื›ืชื™ื‘ื”

ื—ืœืง ืžืคืขื•ืœื•ืช ืขืฅ B ื›ื•ืœืœื•ืช ื‘ื™ืฆื•ืข ืกื“ืจื” ืฉืœ ืฉื™ื ื•ื™ื™ื ื‘ืฆืžืชื™ื ืฉืœื•. ื“ื•ื’ืžื” ืื—ืช ื”ื™ื ื”ื•ืกืคืช ืžืคืชื— ื—ื“ืฉ ืœืฆื•ืžืช ืฉื›ื‘ืจ ื”ื’ื™ืข ืœืงื™ื‘ื•ืœืช ื”ืžืงืกื™ืžืœื™ืช ืฉืœื•. ื‘ืžืงืจื” ื–ื”, ื™ืฉ ืฆื•ืจืš, ืจืืฉื™ืช, ืœืคืฆืœ ืืช ื”ืฆื•ืžืช ืœืฉื ื™ื™ื, ื•ืฉื ื™ืช, ืœื”ื•ืกื™ืฃ ืงื™ืฉื•ืจ ืœืฆื•ืžืช ื”ืฆืืฆื ื”ื—ื“ืฉ ื‘ื”ื•ืจื” ืฉืœื•. ื”ืœื™ืš ื–ื” ืขืœื•ืœ ืœื”ื™ื•ืช ืžืกื•ื›ืŸ ืžืื•ื“. ืื ืžืกื™ื‘ื” ื›ืœืฉื”ื™ (ื”ืชืจืกืงื•ืช, ื”ืคืกืงืช ื—ืฉืžืœ ื•ื›ื•') ื™ืชืจื—ืฉื• ืจืง ื—ืœืง ืžื”ืฉื™ื ื•ื™ื™ื ืžื”ืกื“ืจื”, ืื– ื”ืขืฅ ื™ื™ืฉืืจ ื‘ืžืฆื‘ ืœื ืขืงื‘ื™.

ืื—ื“ ื”ืคืชืจื•ื ื•ืช ื”ืžืกื•ืจืชื™ื™ื ืœื”ืคื™ื›ืช ืžืกื“ ื ืชื•ื ื™ื ืกื•ื‘ืœื ื™ ืœืชืงืœื•ืช ื”ื•ื ื”ื•ืกืคืช ืžื‘ื ื” ื ืชื•ื ื™ื ื ื•ืกืฃ ื‘ื“ื™ืกืง ืœื™ื“ ืขืฅ B - ื™ื•ืžืŸ ื˜ืจื ื–ืงืฆื™ื•ืช, ื”ื™ื“ื•ืข ื’ื ื‘ืฉื ื™ื•ืžืŸ ื›ืชื™ื‘ื” ืงื“ื™ืžื” (WAL). ื–ื”ื• ืงื•ื‘ืฅ ืฉื‘ืกื•ืคื• ื”ืคืขื•ืœื” ื”ืžื™ื•ืขื“ืช ื ื›ืชื‘ืช ื‘ืงืคื“ื ื•ืช ืœืคื ื™ ืฉื™ื ื•ื™ ื”-B-tree ืขืฆืžื•. ืœืคื™ื›ืš, ืื ืžื–ื•ื”ื” ืคื’ื™ืขื” ื‘ื ืชื•ื ื™ื ื‘ืžื”ืœืš ืื‘ื—ื•ืŸ ืขืฆืžื™, ืžืกื“ ื”ื ืชื•ื ื™ื ืžืชื™ื™ืขืฅ ื‘ื™ื•ืžืŸ ื›ื“ื™ ืœืขืฉื•ืช ืกื“ืจ.

LMDB ื‘ื—ืจื” ื‘ืฉื™ื˜ื” ืื—ืจืช ื›ืžื ื’ื ื•ืŸ ืกื•ื‘ืœื ื•ืช ืชืงืœื•ืช, ื”ื ืงืจืืช ื”ืขืชืงื”-ืขืœ-ื›ืชื™ื‘ื”. ื”ืžื”ื•ืช ืฉืœื• ื”ื™ื ืฉื‘ืžืงื•ื ืœืขื“ื›ืŸ ื ืชื•ื ื™ื ื‘ืขืžื•ื“ ืงื™ื™ื, ื”ื•ื ืงื•ื“ื ื›ืœ ืžืขืชื™ืง ืื•ืชื• ื‘ืžืœื•ืื• ื•ืžื‘ืฆืข ืืช ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ื‘ืขื•ืชืง.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืœืื—ืจ ืžื›ืŸ, ืขืœ ืžื ืช ืฉื”ื ืชื•ื ื™ื ื”ืžืขื•ื“ื›ื ื™ื ื™ื”ื™ื• ื–ืžื™ื ื™ื, ื™ืฉ ืฆื•ืจืš ืœืฉื ื•ืช ืืช ื”ืงื™ืฉื•ืจ ืœืฆื•ืžืช ืฉื”ืคืš ืœืขื“ื›ื ื™ ื‘ืฆื•ืžืช ื”ืื‘ ืฉืœื•. ืžื›ื™ื•ื•ืŸ ืฉื’ื ื–ื” ืฆืจื™ืš ืœื”ื™ื•ืช ืฉื•ื ื” ื‘ืฉื‘ื™ืœ ื–ื”, ื–ื” ื’ื ืžื•ืขืชืง ืžืจืืฉ. ื”ืชื”ืœื™ืš ืžืžืฉื™ืš ื‘ืื•ืคืŸ ืจืงื•ืจืกื™ื‘ื™ ืขื“ ืœืฉื•ืจืฉ. ื”ื“ื‘ืจ ื”ืื—ืจื•ืŸ ืฉื™ืฉ ืœืฉื ื•ืช ื”ื•ื ื”ื ืชื•ื ื™ื ื‘ื“ืฃ ื”ืžื˜ื.โ€‹

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืื ืœืคืชืข ื‘ืžื”ืœืš ื”ืœื™ืš ื”ืขื“ื›ื•ืŸ ื”ืชื”ืœื™ืš ืงื•ืจืก, ืื• ืฉื“ืฃ ืžื˜ื ื—ื“ืฉ ืœื ื™ื™ื•ื•ืฆืจ, ืื• ืฉื”ื•ื ืœื ื™ื™ื›ืชื‘ ืœื“ื™ืกืง ืœื—ืœื•ื˜ื™ืŸ, ื•ืกื›ื•ื ื”ื‘ื“ื™ืงื” ืฉืœื• ื™ื”ื™ื” ืฉื’ื•ื™. ื‘ื›ืœ ืื—ื“ ืžืฉื ื™ ื”ืžืงืจื™ื ื”ืœืœื•, ืœื ื™ื”ื™ื” ื ื™ืชืŸ ืœื”ื’ื™ืข ืœื“ืคื™ื ื—ื“ืฉื™ื, ืืš ื™ืฉื ื™ื ืœื ื™ื•ืฉืคืขื•. ื–ื” ืžื‘ื˜ืœ ืืช ื”ืฆื•ืจืš ืฉืœ LMDB ืœื›ืชื•ื‘ ื™ื•ืžืŸ ืงื“ื™ืžื” ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ืขืงื‘ื™ื•ืช ื”ื ืชื•ื ื™ื. ื“ื” ืคืงื˜ื•, ืžื‘ื ื” ืื—ืกื•ืŸ ื”ื ืชื•ื ื™ื ื‘ื“ื™ืกืง ืฉืชื•ืืจ ืœืขื™ืœ ืžืงื‘ืœ ื‘ื• ื–ืžื ื™ืช ืืช ืชืคืงื™ื“ื•. ื”ื™ืขื“ืจ ื™ื•ืžืŸ ืขืกืงืื•ืช ืžืคื•ืจืฉ ื”ื•ื ืื—ืช ื”ืชื›ื•ื ื•ืช ืฉืœ LMDB ื”ืžืกืคืง ืžื”ื™ืจื•ืช ืงืจื™ืืช ื ืชื•ื ื™ื ื’ื‘ื•ื”ื”

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื”ืขื™ืฆื•ื‘ ื”ืžืชืงื‘ืœ, ื”ื ืงืจื append-only B-tree, ืžืกืคืง ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ื‘ื™ื“ื•ื“ ืขืกืงืื•ืช ื•ื ื™ื”ื•ืœ ืจื™ื‘ื•ื™ ื’ืจืกืื•ืช. ื‘-LMDB, ื›ืœ ืขืกืงื” ืคืชื•ื—ื” ืžืฉื•ื™ื›ืช ืœืฉื•ืจืฉ ื”ืขืฅ ื”ืจืœื•ื•ื ื˜ื™ ื›ืจื’ืข. ืขื“ ื”ืฉืœืžืช ื”ืขืกืงื”, ื“ืคื™ ื”ืขืฅ ื”ืžืฉื•ื™ื›ื™ื ืืœื™ื” ืœืขื•ืœื ืœื ื™ืฉื•ื ื• ืื• ื™ืขืฉื• ื‘ื”ื ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ืขื‘ื•ืจ ื’ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ ื”ื ืชื•ื ื™ื, ื›ืš ืชื•ื›ืœื• ืœืขื‘ื•ื“ ื›ืžื” ื–ืžืŸ ืฉืชืจืฆื• ื‘ื“ื™ื•ืง ืขื ืกื˜ ื”ื ืชื•ื ื™ื ืฉื”ื™ื” ืจืœื•ื•ื ื˜ื™ ื‘ืื•ืชื” ืขืช ื”ืขืกืงื” ื ืคืชื—ื”, ื’ื ืื ื”ืื—ืกื•ืŸ ืžืžืฉื™ืš ืœื”ืชืขื“ื›ืŸ ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืฉืœื‘ ื–ื”. ื–ื•ื”ื™ ื”ืžื”ื•ืช ืฉืœ multiversion, ืžื” ืฉื”ื•ืคืš ืืช LMDB ืœืžืงื•ืจ ื ืชื•ื ื™ื ืื™ื“ื™ืืœื™ ืขื‘ื•ืจ ืื”ื•ื‘ื ื• UICollectionView. ืœืื—ืจ ืคืชื™ื—ืช ืขืกืงื”, ืื™ืŸ ืฆื•ืจืš ืœื”ื’ื“ื™ืœ ืืช ื˜ื‘ื™ืขืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืขืœ ื™ื“ื™ ืฉืื™ื‘ืช ื ืชื•ื ื™ื ื ื•ื›ื—ื™ื™ื ื‘ื—ื™ืคื–ื•ืŸ ืœืžื‘ื ื” ื›ืœืฉื”ื• ื‘ื–ื™ื›ืจื•ืŸ, ืžื—ืฉืฉ ืœื”ื™ืฉืืจ ื‘ืœื™ ื›ืœื•ื. ืชื›ื•ื ื” ื–ื• ืžื‘ื“ื™ืœื” ืืช LMDB ืžืื•ืชื• SQLite, ืฉืื™ื ื• ื™ื›ื•ืœ ืœื”ืชื”ื“ืจ ื‘ื‘ื™ื“ื•ื“ ืžื•ื—ืœื˜ ืฉื›ื–ื”. ืœืื—ืจ ืคืชื™ื—ืช ืฉืชื™ ืขืกืงืื•ืช ื‘ืื—ืจื•ื ื” ื•ืžื—ืงืช ืจืฉื•ืžื” ืžืกื•ื™ืžืช ื‘ืชื•ืš ืื—ืช ืžื”ืŸ, ืœื ื ื™ืชืŸ ื™ื”ื™ื” ืขื•ื“ ืœืงื‘ืœ ืืช ืื•ืชื” ืจืฉื•ืžื” ื‘ืชื•ืš ื”ืจืฉื•ืžื” ื”ืฉื ื™ื™ื” ืฉื ื•ืชืจื”.

ื”ืฆื“ ื”ืฉื ื™ ืฉืœ ื”ืžื˜ื‘ืข ื”ื•ื ื”ืฆืจื™ื›ื” ื”ืคื•ื˜ื ืฆื™ืืœื™ืช ื”ื’ื‘ื•ื”ื” ื™ื•ืชืจ ืฉืœ ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™. ื”ืฉืงืฃ ืžืจืื” ื›ื™ืฆื“ ื™ื™ืจืื” ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื ืื ื”ื•ื ื™ืฉื•ื ื” ื‘ื•-ื–ืžื ื™ืช ืขื 3 ื˜ืจื ื–ืงืฆื™ื•ืช ืงืจื™ืื” ืคืชื•ื—ื•ืช ื”ืžื‘ื™ื˜ื•ืช ื‘ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื. ืžื›ื™ื•ื•ืŸ ืฉ-LMDB ืœื ื™ื›ื•ืœ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืฆืžืชื™ื ื”ื ื’ื™ืฉื™ื ืžืฉื•ืจืฉื™ื ื”ืžืฉื•ื™ื›ื™ื ืœืขืกืงืื•ืช ื ื•ื›ื—ื™ื•ืช, ืœื—ื ื•ืช ืื™ืŸ ื‘ืจื™ืจื” ืืœื ืœื”ืงืฆื•ืช ืขื•ื“ ืฉื•ืจืฉ ืจื‘ื™ืขื™ ื‘ื–ื™ื›ืจื•ืŸ ื•ืฉื•ื‘ ืœืฉื›ืคืœ ืืช ื”ื“ืคื™ื ืฉืฉื•ื ื• ืชื—ืชื™ื•.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื›ืืŸ ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืœื”ื™ื–ื›ืจ ื‘ืงื˜ืข ืขืœ ืงื‘ืฆื™ื ืžืžื•ืคื™ ื–ื™ื›ืจื•ืŸ. ื ืจืื” ืฉื”ืฆืจื™ื›ื” ื”ื ื•ืกืคืช ืฉืœ ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™ ืœื ืฆืจื™ื›ื” ืœื”ื“ืื™ื’ ืื•ืชื ื• ื”ืจื‘ื”, ืฉื›ืŸ ื”ื™ื ืœื ืชื•ืจืžืช ืœื˜ื‘ื™ืขืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ื”ืืคืœื™ืงืฆื™ื”. ืขื ื–ืืช, ื™ื—ื“ ืขื ื–ืืช, ืฆื•ื™ืŸ ืฉ-iOS ืงืžืฆืŸ ืžืื•ื“ ื‘ื”ืงืฆืืชื•, ื•ืื™ื ื ื• ื™ื›ื•ืœื™ื, ื›ืžื• ื‘ืฉืจืช ืื• ืฉื•ืœื—ืŸ ืขื‘ื•ื“ื”, ืœืกืคืง ืื–ื•ืจ LMDB ืฉืœ 1 ื˜ืจื”-ื‘ื™ื™ื˜ ื•ืœื ืœื—ืฉื•ื‘ ืขืœ ืชื›ื•ื ื” ื–ื• ื›ืœืœ. ื‘ืžื™ื“ืช ื”ืืคืฉืจ, ื›ื“ืื™ ืœื ืกื•ืช ืœืงืฆืจ ื›ื›ืœ ื”ืืคืฉืจ ืืช ืžืฉืš ื”ื—ื™ื™ื ืฉืœ ื”ืขืกืงืื•ืช.

4. ืขื™ืฆื•ื‘ ืกื›ื™ืžืช ื ืชื•ื ื™ื ืขืœ ื’ื‘ื™ ื”-API ืฉืœ ืžืคืชื—-ืขืจืš

ื‘ื•ืื• ื ืชื—ื™ืœ ืืช ื ื™ืชื•ื— ื”-API ืฉืœื ื• ื‘ื”ืกืชื›ืœื•ืช ืขืœ ื”ื”ืคืฉื˜ื•ืช ื”ื‘ืกื™ืกื™ื•ืช ืฉืžืกืคืง LMDB: ืกื‘ื™ื‘ื” ื•ืžืกื“ื™ ื ืชื•ื ื™ื, ืžืคืชื—ื•ืช ื•ืขืจื›ื™ื, ืขืกืงืื•ืช ื•ืกืžื ื™ื.

ื”ืขืจื” ืœื’ื‘ื™ ืจื™ืฉื•ืžื™ ืงื•ื“

ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ื‘ืžืžืฉืง ื”-API ื”ืฆื™ื‘ื•ืจื™ ืฉืœ LMDB ืžื—ื–ื™ืจื•ืช ืืช ืชื•ืฆืืช ืขื‘ื•ื“ืชืŸ ื‘ืฆื•ืจื” ืฉืœ ืงื•ื“ ืฉื’ื™ืื”, ืืš ื‘ื›ืœ ื”ืจื™ืฉื•ืžื™ื ื”ื‘ืื™ื ื”ืื™ืžื•ืช ืฉืœื” ืžื•ืฉืžื˜ ืžื˜ืขืžื™ ืงื™ืฆื•ืจ.โ€‹ ื‘ืคื•ืขืœ, ืืคื™ืœื• ื”ืฉืชืžืฉื ื• ื‘ืขืฆืžื ื• ื›ื“ื™ ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืžืื’ืจ ืžื–ืœื’ ืขื˜ื™ืคื•ืช 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, ืœื”ื’ื“ื™ืœ ืื•ืชื•. ืขื ื–ืืช, ื–ื” ื”ืจื‘ื” ื™ื•ืชืจ ืงื•ืฆื ื™. ื”ืกื™ื‘ื” ื”ื™ื ืฉื”ื”ืœื™ืš ืœื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ ืžื—ื“ืฉ (ืžืคื” ืžื—ื“ืฉ) ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” 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;โ€‹โ€‹

ื‘ืืžืฆืขื•ืช ื”ืฉื•ื•ืื”, ื”ื—ื ื•ืช ืžืžื™ื™ื ืช ืืช ื”ืžืคืชื—ื•ืช ื‘ืกื“ืจ ืขื•ืœื”. ืื ืœื ืชื—ืœื™ืฃ ืื•ืชื• ื‘ืขืฆืžืš, ื™ื™ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ, ื”ืžืžื™ื™ืŸ ืื•ืชื ื‘ื™ื™ื˜-byte ืœืคื™ ืกื“ืจ ืœืงืกื™ืงื•ื’ืจืคื™.โ€‹

ืขืกืงื•ืช

ืžื‘ื ื” ื”ืขืกืงื” ืžืชื•ืืจ ื‘ืคื™ืจื•ื˜ ื‘ ื”ืคืจืง ื”ืงื•ื“ื, ืื– ื›ืืŸ ืื—ื–ื•ืจ ื‘ืงืฆืจื” ืขืœ ื”ืžืืคื™ื™ื ื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœื”ื:

  1. ืชื•ืžืš ื‘ื›ืœ ื”ืžืืคื™ื™ื ื™ื ื”ื‘ืกื™ืกื™ื™ื ACID: ืื˜ื•ืžื™ื•ืช, ืขืงื‘ื™ื•ืช, ื‘ื™ื“ื•ื“ ื•ืืžื™ื ื•ืช. ืื ื™ ืœื ื™ื›ื•ืœ ืฉืœื ืœืฆื™ื™ืŸ ืฉื™ืฉ ื‘ืื’ ืžื‘ื—ื™ื ืช ืขืžื™ื“ื•ืช ื‘-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 ืคืจื™ื™ืžื™ื ืœืฉื ื™ื™ื” ื•ื’ืœื™ืœื” ื—ืœืงื” ื‘ืžื”ืœืš ืชื”ืœื™ืš ื–ื”. ื›ื“ื™ ืœืžื ื•ืข ืขื“ื›ื•ื ื™ ืžืกืš ืชื›ื•ืคื™ื, ืืชื” ืฆืจื™ืš ืื™ื›ืฉื”ื• ืœื”ื’ื‘ื™ืœ ืืช ื”ืงืฆื‘ ืฉื‘ื• ื”ื ืชื•ื ื™ื ืžืฉืชื ื™ื ื‘ื‘ืกื™ืก UICollectionViewDataSource.

ืื ืžืกื“ ื”ื ืชื•ื ื™ื ืื™ื ื• ืชื•ืžืš ื‘ืจื™ื‘ื•ื™ ื’ืจืกืื•ืช ื•ืžืืคืฉืจ ืœืš ืœืขื‘ื•ื“ ืจืง ืขื ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™, ืื– ื›ื“ื™ ืœื™ืฆื•ืจ ืชืžื•ื ืช ืžืฆื‘ ื™ืฆื™ื‘ื” ื‘ื–ืžืŸ ืฉืœ ื”ื ืชื•ื ื™ื, ืขืœื™ืš ืœื”ืขืชื™ืง ืื•ืชื• ืœืžื‘ื ื” ื ืชื•ื ื™ื ื‘ื–ื™ื›ืจื•ืŸ ื›ืœืฉื”ื• ืื• ืœื˜ื‘ืœื” ื–ืžื ื™ืช. ื›ืœ ืื—ืช ืžื”ื’ื™ืฉื•ืช ื”ืœืœื• ื”ื™ื ื™ืงืจื” ืžืื•ื“. ื‘ืžืงืจื” ืฉืœ ืื—ืกื•ืŸ ื‘ื–ื™ื›ืจื•ืŸ, ืื ื• ืžืงื‘ืœื™ื ืขืœื•ื™ื•ืช ื”ืŸ ื‘ื–ื™ื›ืจื•ืŸ, ื”ื ื’ืจืžื•ืช ืžืื—ืกื•ืŸ ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ื ื•ื™ื™ื, ื•ื”ืŸ ื‘ื–ืžืŸ, ื”ืงืฉื•ืจื•ืช ืœื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช ORM ืžื™ื•ืชืจื•ืช. ื‘ืืฉืจ ืœืฉื•ืœื—ืŸ ื”ื–ืžื ื™, ื–ื”ื• ืชืขื ื•ื’ ื™ืงืจ ืขื•ื“ ื™ื•ืชืจ, ื”ื’ื™ื•ื ื™ ืจืง ื‘ืžืงืจื™ื ืœื ื˜ืจื™ื•ื•ื™ืืœื™ื™ื.

ืคืชืจื•ืŸ ื”ืžื•ืœื˜ื™ื•ืจืกื™ื” ืฉืœ LMDB ืคื•ืชืจ ืืช ื”ื‘ืขื™ื” ืฉืœ ืฉืžื™ืจื” ืขืœ ืžืงื•ืจ ื ืชื•ื ื™ื ื™ืฆื™ื‘ ื‘ืฆื•ืจื” ืžืื•ื“ ืืœื’ื ื˜ื™ืช. ืžืกืคื™ืง ืจืง ืœืคืชื•ื— ืขืกืงื” ื•ื”ืจื™ - ืขื“ ืฉื ืฉืœื™ื ืื•ืชื”, ืขืจื›ืช ื”ื ืชื•ื ื™ื ืžื•ื‘ื˜ื—ืช ืžืชื•ืงื ืช. ื”ื”ื™ื’ื™ื•ืŸ ืœืžื”ื™ืจื•ืช ื”ืขื“ื›ื•ืŸ ืฉืœื• ื ืžืฆื ื›ืขืช ืœื—ืœื•ื˜ื™ืŸ ื‘ื™ื“ื™ ืฉื›ื‘ืช ื”ืžืฆื’ืช, ืœืœื ืชืงื•ืจื” ืฉืœ ืžืฉืื‘ื™ื ืžืฉืžืขื•ืชื™ื™ื.

ืกืžื ื™ื

ืกืžื ื™ื ืžืกืคืงื™ื ืžื ื’ื ื•ืŸ ืœืื™ื˜ืจืฆื™ื” ืžืกื•ื“ืจืช ืขืœ ืฆืžื“ื™ ืžืคืชื—-ืขืจืš ื‘ืืžืฆืขื•ืช ื—ืฆื™ื™ืช ืขืฅ B. ื‘ืœืขื“ื™ื”ื, ืื™ ืืคืฉืจ ื™ื”ื™ื” ืœื™ืฆื•ืจ ืžื•ื“ืœ ื™ืขื™ืœ ืฉืœ ื”ื˜ื‘ืœืื•ืช ื‘ืžืกื“ ื”ื ืชื•ื ื™ื, ืืœื™ื• ืื ื• ืคื•ื ื™ื ื›ืขืช.

4.2. ื“ื•ื’ืžื ื•ืช ืฉื•ืœื—ืŸ

ื”ืžืืคื™ื™ืŸ ืฉืœ ืกื“ืจ ืžืคืชื— ืžืืคืฉืจ ืœืš ืœื‘ื ื•ืช ื”ืคืฉื˜ื” ื‘ืจืžื” ื’ื‘ื•ื”ื” ื›ื’ื•ืŸ ื˜ื‘ืœื” ืขืœ ื’ื‘ื™ ื”ืคืฉื˜ื•ืช ื‘ืกื™ืกื™ื•ืช. ื”ื‘ื” ื ืฉืงื•ืœ ืชื”ืœื™ืš ื–ื” ื‘ืืžืฆืขื•ืช ื”ื“ื•ื’ืžื” ืฉืœ ื”ื˜ื‘ืœื” ื”ืจืืฉื™ืช ืฉืœ ืœืงื•ื— ืขื ืŸ, ื”ืฉื•ืžืจ ืžื™ื“ืข ืขืœ ื›ืœ ื”ืงื‘ืฆื™ื ื•ื”ืชื™ืงื™ื•ืช ืฉืœ ื”ืžืฉืชืžืฉ.

ืกื›ื™ืžืช ื˜ื‘ืœื”

ืื—ื“ ื”ืชืจื—ื™ืฉื™ื ื”ื ืคื•ืฆื™ื ืฉืขื‘ื•ืจื ื™ืฉ ืœื”ืชืื™ื ืžื‘ื ื” ื˜ื‘ืœื” ืขื ืขืฅ ืชื™ืงื™ื•ืช ื”ื•ื ื”ื‘ื—ื™ืจื” ืฉืœ ื›ืœ ื”ืืœืžื ื˜ื™ื ื”ื ืžืฆืื™ื ื‘ืชื•ืš ืกืคืจื™ื™ื” ื ืชื•ื ื”. ืžื•ื“ืœ ืืจื’ื•ืŸ ื ืชื•ื ื™ื ื˜ื•ื‘ ืœืฉืื™ืœืชื•ืช ื™ืขื™ืœื•ืช ืžืกื•ื’ ื–ื” ื”ื•ื ืจืฉื™ืžืช ืกืžื™ื›ื•ืช. ื›ื“ื™ ืœื™ื™ืฉื ืื•ืชื• ืขืœ ื’ื‘ื™ ืื—ืกื•ืŸ ืขืจืš ืžืคืชื—, ื™ืฉ ืฆื•ืจืš ืœืžื™ื™ืŸ ืืช ื”ืžืคืชื—ื•ืช ืฉืœ ื”ืงื‘ืฆื™ื ื•ื”ืชื™ืงื™ื•ืช ื‘ืฆื•ืจื” ื›ื–ื• ืฉื”ื ืžืงื•ื‘ืฆื™ื ืขืœ ืกืžืš ื”ื—ื‘ืจื•ืช ืฉืœื”ื ื‘ืกืคืจื™ื™ืช ื”ืื‘. ื‘ื ื•ืกืฃ, ืขืœ ืžื ืช ืœื”ืฆื™ื’ ืืช ืชื•ื›ืŸ ื”ืกืคืจื™ื™ื” ื‘ืฆื•ืจื” ื”ืžื•ื›ืจืช ืœืžืฉืชืžืฉ Windows (ืชื—ื™ืœื” ืชื™ืงื™ื•ืช, ื•ืœืื—ืจ ืžื›ืŸ ืงื‘ืฆื™ื, ืฉื ื™ื”ื ืžืžื•ื™ื ื™ื ื‘ืกื“ืจ ืืœืคื‘ื™ืชื™), ื™ืฉ ืฆื•ืจืš ืœื›ืœื•ืœ ืืช ื”ืฉื“ื•ืช ื”ื ื•ืกืคื™ื ื”ืžืชืื™ืžื™ื ื‘ืžืคืชื—.

ื”ืชืžื•ื ื” ืœืžื˜ื” ืžืจืื” ื›ื™ืฆื“, ื‘ื”ืชื‘ืกืก ืขืœ ื”ืžืฉื™ืžื” ืฉืขืœ ื”ืคืจืง, ื™ื™ืฆื•ื’ ืฉืœ ืžืคืชื—ื•ืช ื‘ืฆื•ืจื” ืฉืœ ืžืขืจืš ื‘ืชื™ื ืขืฉื•ื™ ืœื”ื™ืจืื•ืช. ื”ื‘ืชื™ื ืขื ื”ืžื–ื”ื” ืฉืœ ืกืคืจื™ื™ืช ื”ืื‘ (ืื“ื•ื) ืžืžื•ืงืžื™ื ืชื—ื™ืœื”, ืœืื—ืจ ืžื›ืŸ ืขื ื”ืกื•ื’ (ื™ืจื•ืง) ื•ื‘ื–ื ื‘ ืขื ื”ืฉื (ื›ื—ื•ืœ). ื‘ื”ื™ื•ืชื ืžืžื•ื™ื ื™ื ืœืคื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ืฉื•ื•ืืช LMDB ื‘ืกื“ืจ ืœืงืกื™ืงื•ื’ืจืคื™, ื”ื ืžืกื•ื“ืจื™ื ื‘- ืื•ืคืŸ ื ื“ืจืฉ. ืžืขื‘ืจ ืžืคืชื—ื•ืช ื‘ืจืฆืฃ ืขื ืื•ืชื” ืงื™ื“ื•ืžืช ืื“ื•ืžื” ื ื•ืชื ืช ืœื ื• ืืช ื”ืขืจื›ื™ื ื”ืžืฉื•ื™ื›ื™ื ืœื”ื ื‘ืกื“ืจ ืฉื‘ื• ื”ื ืืžื•ืจื™ื ืœื”ื™ื•ืช ืžื•ืฆื’ื™ื ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ (ื‘ืฆื“ ื™ืžื™ืŸ), ืœืœื ืฆื•ืจืš ื‘ืขื™ื‘ื•ื“ ื ื•ืกืฃ ื ื•ืกืฃ.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืกื™ื“ื•ืจ ืžืคืชื—ื•ืช ื•ืขืจื›ื™ื

ื‘ืขื•ืœื ื”ื•ืžืฆืื• ืฉื™ื˜ื•ืช ืจื‘ื•ืช ืœื”ืกื“ืจืช ื—ืคืฆื™ื. ืžื›ื™ื•ื•ืŸ ืฉืœื ื”ื™ื™ืชื” ืœื ื• ื“ืจื™ืฉื” ืื—ืจืช ืžืœื‘ื“ ืžื”ื™ืจื•ืช, ื‘ื—ืจื ื• ืœืขืฆืžื ื• ืืช ื”ืžื”ื™ืจ ื‘ื™ื•ืชืจ ื”ืืคืฉืจื™ - dump ืฉืœ ื”ื–ื™ื›ืจื•ืŸ ืฉื ื›ื‘ืฉ ืขืœ ื™ื“ื™ ืžื•ืคืข ืฉืœ ืžื‘ื ื” ืฉืคืช C. ื›ืš, ื ื™ืชืŸ ืœืขืฆื‘ ืืช ื”ืžืคืชื— ืฉืœ ืจื›ื™ื‘ ืกืคืจื™ื™ื” ืขื ื”ืžื‘ื ื” ื”ื‘ื NodeKey.

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

ืœืฉืžื•ืจ NodeKey ื‘ืื—ืกื•ืŸ ื”ื“ืจื•ืฉ ื‘ืื•ื‘ื™ื™ืงื˜ MDB_val ืžืงืžื• ืืช ืžืฆื‘ื™ืข ื”ื ืชื•ื ื™ื ืœื›ืชื•ื‘ืช ืฉืœ ืชื—ื™ืœืช ื”ืžื‘ื ื”, ื•ื—ืฉื‘ื• ืืช ื’ื•ื“ืœื ืขื ื”ืคื•ื ืงืฆื™ื” sizeof.

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

ื‘ืคืจืง ื”ืจืืฉื•ืŸ ืขืœ ืงืจื™ื˜ืจื™ื•ื ื™ื ืœื‘ื—ื™ืจืช ืžืกื“ ื ืชื•ื ื™ื, ื”ื–ื›ืจืชื™ ืืช ืžื–ืขื•ืจ ื”ืงืฆืื•ืช ื“ื™ื ืžื™ื•ืช ื‘ืชื•ืš ืคืขื•ืœื•ืช CRUD ื›ื’ื•ืจื ื‘ื—ื™ืจื” ื—ืฉื•ื‘. ืงื•ื“ ืคื•ื ืงืฆื™ื” serialize ืžืจืื” ื›ื™ืฆื“ ื‘ืžืงืจื” ืฉืœ LMDB ื ื™ืชืŸ ืœื”ื™ืžื ืข ืžื”ื ืœื—ืœื•ื˜ื™ืŸ ื‘ืขืช โ€‹โ€‹ื”ื›ื ืกืช ืจืฉื•ืžื•ืช ื—ื“ืฉื•ืช ืœืžืกื“ ื”ื ืชื•ื ื™ื. ืžืขืจืš ื”ื‘ืชื™ื ื”ื ื›ื ืก ืžื”ืฉืจืช ื”ื•ืคืš ืชื—ื™ืœื” ืœืžื‘ื ื™ ืžื—ืกื ื™ืช, ื•ืœืื—ืจ ืžื›ืŸ ื”ื ืžื•ืฉืœื›ื™ื ื‘ืื•ืคืŸ ื˜ืจื™ื•ื•ื™ืืœื™ ืœืื—ืกื•ืŸ. ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉืื™ืŸ ื’ื ื”ืงืฆืื•ืช ื“ื™ื ืžื™ื•ืช ื‘ืชื•ืš LMDB, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืžืฆื‘ ืคื ื˜ืกื˜ื™ ืœืคื™ ืชืงื ื™ iOS - ื”ืฉืชืžืฉ ืจืง ื‘ื–ื™ื›ืจื•ืŸ ืžื—ืกื ื™ืช ื›ื“ื™ ืœืขื‘ื•ื“ ืขื ื ืชื•ื ื™ื ืœืื•ืจืš ื›ืœ ื”ื ืชื™ื‘ ืžื”ืจืฉืช ืœื“ื™ืกืง!

ื”ื–ืžื ืช ืžืคืชื—ื•ืช ืขื ื”ืฉื•ื•ืื” ื‘ื™ื ืืจื™ืช

ืงืฉืจ ืกื“ืจ ื”ืžืคืชื— ืžื•ื’ื“ืจ ืขืœ ื™ื“ื™ ืคื•ื ืงืฆื™ื” ืžื™ื•ื—ื“ืช ื”ื ืงืจืืช ื”ืฉื•ื•ืืช. ืžื›ื™ื•ื•ืŸ ืฉื”ืžื ื•ืข ืื™ื ื• ื™ื•ื“ืข ื“ื‘ืจ ืขืœ ื”ืกืžื ื˜ื™ืงื” ืฉืœ ื”ื‘ืชื™ื ืฉื”ื ืžื›ื™ืœื™ื, ืœืžืฉื•ื•ืื” ื”ืžื•ื’ื“ืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืื™ืŸ ื‘ืจื™ืจื” ืืœื ืœืกื“ืจ ืืช ื”ืžืคืชื—ื•ืช ื‘ืกื“ืจ ืœืงืกื™ืงื•ื’ืจืคื™, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื”ืฉื•ื•ืื” ื‘ืชื™ื-ื‘ืชื™ื. ื”ืฉื™ืžื•ืฉ ื‘ื• ืœืืจื’ื•ืŸ ืžื‘ื ื™ื ื“ื•ืžื” ืœื’ื™ืœื•ื— ืขื ื’ืจื–ืŸ ื›ื•ืจืš. ืขื ื–ืืช, ื‘ืžืงืจื™ื ืคืฉื•ื˜ื™ื ืื ื™ ืžื•ืฆื ืฉื™ื˜ื” ื–ื• ืžืงื•ื‘ืœืช. ื”ื—ืœื•ืคื” ืžืชื•ืืจืช ืœื”ืœืŸ, ืื‘ืœ ื›ืืŸ ืืฆื™ื™ืŸ ื›ืžื” ืžื’ืจืคื•ืช ื”ืคื–ื•ืจื•ืช ืœืื•ืจืš ื”ืฉื‘ื™ืœ ื”ื–ื”.

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉื™ืฉ ืœื–ื›ื•ืจ ื”ื•ื ื™ื™ืฆื•ื’ ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืกื•ื’ื™ ื ืชื•ื ื™ื ืคืจื™ืžื™ื˜ื™ื‘ื™ื™ื. ืœืคื™ื›ืš, ื‘ื›ืœ ืžื›ืฉื™ืจื™ ืืคืœ, ืžืฉืชื ื™ื ืฉืœืžื™ื ืžืื•ื—ืกื ื™ื ื‘ืคื•ืจืžื˜ ืื ื“ื™ืืŸ ื”ืงื˜ืŸ. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉื”ื‘ื™ื™ื˜ ื”ื›ื™ ืคื—ื•ืช ืžืฉืžืขื•ืชื™ ื™ื”ื™ื” ื‘ืฆื“ ืฉืžืืœ, ื•ืœื ื ื™ืชืŸ ื™ื”ื™ื” ืœืžื™ื™ืŸ ืžืกืคืจื™ื ืฉืœืžื™ื ื‘ืืžืฆืขื•ืช ื”ืฉื•ื•ืืช ื‘ืชื™ื-ื‘ืชื™ื. ืœื“ื•ื’ืžื”, ื ื™ืกื™ื•ืŸ ืœืขืฉื•ืช ื–ืืช ืขื ืงื‘ื•ืฆื” ืฉืœ ืžืกืคืจื™ื ืž-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
    };
}

ื›ืชื•ืฆืื” ืžื”ืฉื—ื–ื•ืจ, ืงื™ื‘ืœื ื• ื—ื™ืกื›ื•ืŸ ืžืฉืžืขื•ืชื™ ื‘ืฉื˜ื— ื”ืชืคื•ืก ืขืœ ื™ื“ื™ ื”ืžืคืชื—ื•ืช. ืขื ื–ืืช, ื‘ืฉืœ ื”ืชื—ื•ื ื”ื˜ื›ื ื™ nameLength, ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ื”ืฉื•ื•ืื” ื”ื‘ื™ื ืืจื™ืช ื›ื‘ืจ ืœื ืžืชืื™ืžื” ืœื”ืฉื•ื•ืืช ืžืคืชื—ื•ืช. ืื ืœื ื ื—ืœื™ืฃ ืื•ืชื• ื‘ืขืฆืžื ื•, ืื–ื™ ืื•ืจืš ื”ืฉื ื™ื”ื™ื” ื’ื•ืจื ื‘ืขื“ื™ืคื•ืช ื’ื‘ื•ื”ื” ื™ื•ืชืจ ื‘ืžื™ื•ืŸ ืžื”ืฉื ืขืฆืžื•.

LMDB ืžืืคืฉืจ ืœื›ืœ ืžืกื“ ื ืชื•ื ื™ื ืœืงื‘ืœ ืคื•ื ืงืฆื™ื™ืช ื”ืฉื•ื•ืืช ืžืคืชื— ืžืฉืœื•. ื–ื” ื ืขืฉื” ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” mdb_set_compare ื‘ื”ื—ืœื˜ ืœืคื ื™ ื”ืคืชื™ื—ื”. ืžืกื™ื‘ื•ืช ื‘ืจื•ืจื•ืช, ืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืื•ืชื• ืœืื•ืจืš ื›ืœ ื—ื™ื™ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื. ื”ืžืฉื•ื•ื” ืžืงื‘ืœ ืฉื ื™ ืžืคืชื—ื•ืช ื‘ืคื•ืจืžื˜ ื‘ื™ื ืืจื™ ื›ืงืœื˜, ื•ื‘ืคืœื˜ ื”ื•ื ืžื—ื–ื™ืจ ืืช ืชื•ืฆืืช ื”ื”ืฉื•ื•ืื”: ืงื˜ืŸ ืž-(-1), ื’ื“ื•ืœ ืž-(1) ืื• ืฉื•ื•ื” ืœ-(0). ืคืกืื•ื“ื•ืงื•ื“ ืขื‘ื•ืจ 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 ืขื•ื‘ื“ ื‘ืฆื•ืจื” ืื™ื ื˜ื ืกื™ื‘ื™ืช ื‘ืžื™ื•ื—ื“ ืขื ื”ืžืคืชื—ื•ืช ืฉืœ ืจืฉื•ืžื•ืช ืžืื•ื—ืกื ื•ืช. ื”ื”ืฉื•ื•ืื” ื‘ื™ื ื™ื”ื ืžืชืจื—ืฉืช ื‘ืžืกื’ืจืช ื›ืœ ืคืขื•ืœื” ื™ื™ืฉื•ืžื™ืช, ื•ื‘ื™ืฆื•ืขื™ ื”ืคืชืจื•ืŸ ื›ื•ืœื• ืชืœื•ื™ื™ื ื‘ืžื”ื™ืจื•ืช ื”ืžืฉื•ื•ื”. ื‘ืขื•ืœื ืื™ื“ื™ืืœื™, ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ื”ืฉื•ื•ืื” ื”ื‘ื™ื ืืจื™ืช ืืžื•ืจื” ืœื”ืกืคื™ืง ื›ื“ื™ ืœื”ืฉื•ื•ืช ืžืคืชื—ื•ืช, ืื‘ืœ ืื ื”ื™ื™ืช ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืžืคืชื—ื•ืช ืžืฉืœืš, ืื– ื”ื”ืœื™ืš ืœื‘ื™ื˜ื•ืœ ื”ืกื“ืจืช ืžืคืชื—ื•ืช ื‘ื• ืฆืจื™ืš ืœื”ื™ื•ืช ืžื”ื™ืจ ื›ื›ืœ ื”ืืคืฉืจ.

ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืื™ื ื• ืžืชืขื ื™ื™ืŸ ื‘ืžื™ื•ื—ื“ ื‘ื—ืœืง ื”ืขืจืš ืฉืœ ื”ืจืฉื•ืžื” (ืขืจืš). ื”ื”ืžืจื” ืฉืœื• ืžื™ื™ืฆื•ื’ ื‘ืชื™ื ืœืื•ื‘ื™ื™ืงื˜ ืžืชืจื—ืฉืช ืจืง ื›ืืฉืจ ื”ื•ื ื›ื‘ืจ ื ื“ืจืฉ ืขืœ ื™ื“ื™ ืงื•ื“ ื”ืืคืœื™ืงืฆื™ื”, ืœืžืฉืœ, ืœื”ืฆื™ื’ ืื•ืชื• ืขืœ ื”ืžืกืš. ืžื›ื™ื•ื•ืŸ ืฉื–ื” ืงื•ืจื” ืœืขืชื™ื ืจื—ื•ืงื•ืช ื™ื—ืกื™ืช, ื“ืจื™ืฉื•ืช ื”ืžื”ื™ืจื•ืช ืขื‘ื•ืจ ื”ืœื™ืš ื–ื” ืื™ื ืŸ ื›ืœ ื›ืš ืงืจื™ื˜ื™ื•ืช, ื•ื‘ื™ื™ืฉื•ื ืฉืœื• ืื ื• ื”ืจื‘ื” ื™ื•ืชืจ ื—ื•ืคืฉื™ื™ื ืœื”ืชืžืงื“ ื‘ื ื•ื—ื•ืช. ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœื”ืขืœื•ืช ืžื˜ื ื ืชื•ื ื™ื ื‘ืกื™ื“ืจื” ืขืœ ืงื‘ืฆื™ื ืฉื˜ืจื ื”ื•ืจื“ื•, ืื ื• ืžืฉืชืžืฉื™ื NSKeyedArchiver.

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

ืขื ื–ืืช, ื™ืฉ ืžืงืจื™ื ืฉื‘ื”ื ื”ื‘ื™ืฆื•ืขื™ื ืขื“ื™ื™ืŸ ื—ืฉื•ื‘ื™ื. ืœื“ื•ื’ืžื”, ื›ืืฉืจ ืฉื•ืžืจื™ื ืžื˜ื-ืžื™ื“ืข ืขืœ ืžื‘ื ื” ื”ืงื‘ืฆื™ื ืฉืœ ืขื ืŸ ืžืฉืชืžืฉ, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืื•ืชื” ื–ื™ื›ืจื•ืŸ dump ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื. ื’ื•ืœืช ื”ื›ื•ืชืจืช ืฉืœ ื”ืžืฉื™ืžื” ืฉืœ ื™ืฆื™ืจืช ื™ื™ืฆื•ื’ ืกื™ื“ื•ืจื™ ืฉืœื”ื ื”ื™ื ื”ืขื•ื‘ื“ื” ืฉื”ืจื›ื™ื‘ื™ื ืฉืœ ืกืคืจื™ื™ื” ืžืขื•ืฆื‘ื™ื ืขืœ ื™ื“ื™ ื”ื™ืจืจื›ื™ื” ืฉืœ ืžื—ืœืงื•ืช.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— 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;โ€‹
}

ื”ืจืฉื™ืžื” ื”ืžื•ืฆื’ืช ืžืจืื” ื›ื™ืฆื“ ืกื“ืจื” ื‘ืืžืฆืขื•ืช dump ืžื‘ื ื” ืžืืคืฉืจืช ืœืš ืœื”ื™ืคื˜ืจ ืžื”ืงืฆืื•ืช ื“ื™ื ืžื™ื•ืช ืœื ืจืง ื‘ืขืช ื›ืชื™ื‘ื”, ืืœื ื‘ืขืช ืงืจื™ืืช ื ืชื•ื ื™ื. ื ื’ื–ืจ ืžื”ืคื•ื ืงืฆื™ื” mdb_get ื”ืžืฆื‘ื™ืข ืžืกืชื›ืœ ื‘ื“ื™ื•ืง ืขืœ ื›ืชื•ื‘ืช ื”ื–ื™ื›ืจื•ืŸ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืฉื‘ื” ืžืกื“ ื”ื ืชื•ื ื™ื ืžืื—ืกืŸ ืืช ื™ื™ืฆื•ื’ ื”ื‘ื™ื™ื˜ื™ื ืฉืœ ื”ืื•ื‘ื™ื™ืงื˜. ืœืžืขืฉื”, ืื ื• ืžืงื‘ืœื™ื ืกื•ื’ ืฉืœ ORM ื”ืžืกืคืง ืžื”ื™ืจื•ืช ืงืจื™ืืช ื ืชื•ื ื™ื ื’ื‘ื•ื”ื” ืžืื•ื“ ื›ืžืขื˜ ืœืœื ืชืฉืœื•ื. ืœืžืจื•ืช ื›ืœ ื”ื™ื•ืคื™ ืฉืœ ื”ื’ื™ืฉื”, ื™ืฉ ืฆื•ืจืš ืœื–ื›ื•ืจ ื›ืžื” ืชื›ื•ื ื•ืช ื”ืงืฉื•ืจื•ืช ืืœื™ื”.

  1. ืขื‘ื•ืจ ืขืกืงื” ืœืงืจื™ืื” ื‘ืœื‘ื“, ืžื•ื‘ื˜ื— ืฉื”ืžืฆื‘ื™ืข ืœืžื‘ื ื” ื”ืขืจืš ื™ื™ืฉืืจ ืชืงืฃ ืจืง ืขื“ ืœืกื’ื™ืจืช ื”ืขืกืงื”. ื›ืคื™ ืฉืฆื•ื™ืŸ ืงื•ื“ื ืœื›ืŸ, ื“ืคื™ ืขืฅ B ืขืœื™ื”ื ื ืžืฆื ืื•ื‘ื™ื™ืงื˜, ื”ื•ื“ื•ืช ืœืขืงืจื•ืŸ ื”ืขืชืง-ืขืœ-ื›ืชื™ื‘ื”, ื ืฉืืจื™ื ืœืœื ืฉื™ื ื•ื™ ื›ืœ ืขื•ื“ ื”ื ืžื•ืคื ื™ื ืขืœ ื™ื“ื™ ืขืกืงื” ืื—ืช ืœืคื—ื•ืช. ื™ื—ื“ ืขื ื–ืืช, ื‘ืจื’ืข ืฉื”ืขืกืงื” ื”ืื—ืจื•ื ื” ื”ืžืฉื•ื™ื›ืช ืืœื™ื”ื ืžืกืชื™ื™ืžืช, ื ื™ืชืŸ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื“ืคื™ื ืœื ืชื•ื ื™ื ื—ื“ืฉื™ื. ืื ื™ืฉ ืฆื•ืจืš ืฉืื•ื‘ื™ื™ืงื˜ื™ื ื™ืฉืจื“ื• ืืช ื”ืขืกืงื” ืฉื™ืฆืจื” ืื•ืชื, ืขื“ื™ื™ืŸ ื™ืฉ ืœื”ืขืชื™ืง ืื•ืชื.
  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. ื™ืฉื ืŸ ืฉืชื™ ื“ืจื›ื™ื ืœื”ื™ืžื ืข ืžื’ื•ืจืœ ืขืฆื•ื‘ ืฉื›ื–ื”.

ื”ืจืืฉื•ืŸ ืžืกืชื›ื ื‘ื”ืขืชืงื” ืจืืฉื•ื ื™ืช ืฉืœ ื ืชื•ื ื™ื ืœืžื‘ื ื” ืžื™ื•ืฉืจ ื‘ืจื•ืจ. ืœื“ื•ื’ืžื”, ื‘-comparator ืžื•ืชืื ืื™ืฉื™ืช ื–ื” ื™ื‘ื•ื ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ื‘ืื•ืคืŸ ื”ื‘ื.

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 ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ืื•ืชื” ื”ืฉืคืขื” ื›ื“ื™ ืœื”ืฉื™ื’ ื•ืฉื™ืžื•ืฉ ื‘ืชื›ื•ื ื” packed. ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉื”ื™ื ื’ื ืขื•ื–ืจืช ืœื™ื™ืขืœ ืืช ื”ืฉื˜ื— ืฉืชื•ืคืก ื”ืžื‘ื ื”, ื”ืฉื™ื˜ื” ื”ื–ื• ื ืจืื™ืช ืœื™ ืขื“ื™ืคื”, ืื ื›ื™ ะฟั€ะธะฒะพะดะธั‚ ืœืขืœื™ื™ื” ื‘ืขืœื•ืช ืคืขื•ืœื•ืช ื”ื’ื™ืฉื” ืœื ืชื•ื ื™ื.

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. ืœืฉื•ื•ื, ื›ืœ ื”ืขืžื•ื“ื™ื ื”ืงื•ื“ืžื™ื ืœื–ื” ืฉืžื—ืคืฉื™ื ืžื•ืกืจื™ื ืžื”ืงื•ื‘ืฅ ืœื–ื™ื›ืจื•ืŸ ื”ืจืืฉื™, ืฉื”ื•ื ื™ืงืจ ื‘ื™ื•ืชืจ.

ืœืžืจื‘ื” ื”ืžื–ืœ, ื”-API ืฉืœ LMDB ืžืกืคืง ื“ืจืš ื™ืขื™ืœื” ืœืžืงื ืืช ื”ืกืžืŸ ื‘ื”ืชื—ืœื”. ืœืฉื ื›ืš, ืขืœื™ืš ืœื™ืฆื•ืจ ืžืคืชื— ืฉื”ืขืจืš ืฉืœื• ื›ืžื•ื‘ืŸ ืงื˜ืŸ ืื• ืฉื•ื•ื” ืœืžืคืชื— ืฉื ืžืฆื ื‘ื’ื‘ื•ืœ ื”ืขืœื™ื•ืŸ ืฉืœ ื”ืžืจื•ื•ื—. ืœื“ื•ื’ืžื”, ื‘ื™ื—ืก ืœืจืฉื™ืžื” ื‘ืื™ื•ืจ ืœืžืขืœื”, ื ื•ื›ืœ ืœื™ืฆื•ืจ ืžืคืชื— ืฉื‘ื• ื”ืฉื“ื” parentId ื™ื”ื™ื” ืฉื•ื•ื” ืœ-2, ื•ื›ืœ ื”ืฉืืจ ืžืœืื™ื ื‘ืืคืกื™ื. ืžืคืชื— ื›ื–ื” ืžืœื ื—ืœืงื™ืช ืžืกื•ืคืง ืœืงืœื˜ ื”ืคื•ื ืงืฆื™ื” mdb_cursor_get ืžืฆื™ื™ืŸ ืืช ื”ืคืขื•ืœื” MDB_SET_RANGE.

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

ืื ื ืžืฆื ื”ื’ื‘ื•ืœ ื”ืขืœื™ื•ืŸ ืฉืœ ืงื‘ื•ืฆืช ืžืคืชื—ื•ืช, ืื ื• ื—ื•ื–ืจื™ื ืขืœื™ื• ืขื“ ืฉื ื™ืคื’ืฉ ืื• ืฉื”ืžืคืชื— ืคื•ื’ืฉ ืื—ืจ parentId, ืื• ืฉื”ืžืคืชื—ื•ืช ืœื ื™ื™ื’ืžืจื• ื›ืœืœ

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

ืžื” ืฉื™ืคื” ื”ื•ื ืฉื›ื—ืœืง ืžื”ืื™ื˜ืจืฆื™ื” ื‘ืืžืฆืขื•ืช mdb_cursor_get, ืื ื—ื ื• ืžืงื‘ืœื™ื ืœื ืจืง ืืช ื”ืžืคืชื—, ืืœื ื’ื ืืช ื”ืขืจืš. ืื, ืขืœ ืžื ืช ืœืžืœื ืืช ืชื ืื™ ื”ื“ื’ื™ืžื”, ืขืœื™ืš ืœื‘ื“ื•ืง, ื‘ื™ืŸ ื”ื™ืชืจ, ืืช ื”ืฉื“ื•ืช ืžื—ืœืง ื”ืขืจืš ืฉืœ ื”ืจืฉื•ืžื”, ืื– ื”ื ื ื’ื™ืฉื™ื ืœืžื“ื™ ืœืœื ืžื—ื•ื•ืช ื ื•ืกืคื•ืช.

4.3. ื“ื•ื’ืžื ื•ืช ื™ื—ืกื™ื ื‘ื™ืŸ ื˜ื‘ืœืื•ืช

ืขื“ ืขื›ืฉื™ื•, ื”ืฆืœื—ื ื• ืœืฉืงื•ืœ ืืช ื›ืœ ื”ื”ื™ื‘ื˜ื™ื ืฉืœ ืขื™ืฆื•ื‘ ื•ืขื‘ื•ื“ื” ืขื ืžืกื“ ื ืชื•ื ื™ื ืฉืœ ื˜ื‘ืœื” ืื—ืช. ืื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉื˜ื‘ืœื” ื”ื™ื ืงื‘ื•ืฆื” ืฉืœ ืจืฉื•ืžื•ืช ืžืžื•ื™ื ื•ืช ื”ืžื•ืจื›ื‘ื•ืช ืžืื•ืชื• ืกื•ื’ ืฉืœ ื–ื•ื’ื•ืช ืžืคืชื—-ืขืจืš. ืื ืชืฆื™ื’ ืžืคืชื— ื›ืžืœื‘ืŸ ื•ืืช ื”ืขืจืš ื”ืžืฉื•ื™ืš ื›ืžืงื‘ื™ืœื™ืช, ืชืงื‘ืœ ืชืจืฉื™ื ื—ื–ื•ืชื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื.

โ€‹

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืขื ื–ืืช, ื‘ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื ืœืขื™ืชื™ื ื ื“ื™ืจื•ืช ืืคืฉืจ ืœื”ืกืชื“ืจ ืขื ื›ืœ ื›ืš ืžืขื˜ ืฉืคื™ื›ื•ืช ื“ืžื™ื. ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืžืกื“ ื ืชื•ื ื™ื ื ื“ืจืฉ, ืจืืฉื™ืช, ืœืžืกืคืจ ื˜ื‘ืœืื•ืช, ื•ืฉื ื™ืช, ืœื‘ืฆืข ื‘ื”ืŸ ื‘ื—ื™ืจื•ืช ื‘ืกื“ืจ ืฉื•ื ื” ืžื”ืžืคืชื— ื”ืจืืฉื™. ื—ืœืง ืื—ืจื•ืŸ ื–ื” ืžื•ืงื“ืฉ ืœื ื•ืฉืื™ื ืฉืœ ื™ืฆื™ืจืชื ื•ื”ืงืฉืจ ื‘ื™ื ื™ื”ื.

ื˜ื‘ืœืื•ืช ืื™ื ื“ืงืก

ืœืืคืœื™ืงืฆื™ื™ืช ื”ืขื ืŸ ื™ืฉ ืงื˜ืข "ื’ืœืจื™ื”". ื”ื•ื ืžืฆื™ื’ ืชื•ื›ืŸ ืžื“ื™ื” ืžื›ืœ ื”ืขื ืŸ, ืžืžื•ื™ืŸ ืœืคื™ ืชืืจื™ืš. ื›ื“ื™ ืœื™ื™ืฉื ื‘ืฆื•ืจื” ืื•ืคื˜ื™ืžืœื™ืช ื‘ื—ื™ืจื” ื›ื–ื•, ืœื™ื“ ื”ื˜ื‘ืœื” ื”ืจืืฉื™ืช ืืชื” ืฆืจื™ืš ืœื™ืฆื•ืจ ืขื•ื“ ืื—ื“ ืขื ืกื•ื’ ื—ื“ืฉ ืฉืœ ืžืคืชื—ื•ืช. ื”ื ื™ื›ื™ืœื• ืฉื“ื” ืขื ืชืืจื™ืš ื™ืฆื™ืจืช ื”ืงื•ื‘ืฅ, ืฉื™ืฉืžืฉ ื›ืงืจื™ื˜ืจื™ื•ืŸ ื”ืžื™ื•ืŸ ื”ืขื™ืงืจื™. ืžื›ื™ื•ื•ืŸ ืฉื”ืžืคืชื—ื•ืช ื”ื—ื“ืฉื™ื ืžืชื™ื™ื—ืกื™ื ืœืื•ืชื ื ืชื•ื ื™ื ื›ืžื• ื”ืžืคืชื—ื•ืช ื‘ื˜ื‘ืœื” ื”ืจืืฉื™ืช, ื”ื ื ืงืจืื™ื ืžืคืชื—ื•ืช ืื™ื ื“ืงืก. ื‘ืชืžื•ื ื” ืœืžื˜ื” ื”ื ืžื•ื“ื’ืฉื™ื ื‘ื›ืชื•ื.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืขืœ ืžื ืช ืœื”ืคืจื™ื“ ื‘ื™ืŸ ื”ืžืคืชื—ื•ืช ืฉืœ ื˜ื‘ืœืื•ืช ืฉื•ื ื•ืช ื‘ืชื•ืš ืื•ืชื• ืžืกื“ ื ืชื•ื ื™ื, ื ื•ืกืฃ ืœื›ื•ืœืŸ ืฉื“ื” ื˜ื›ื ื™ ื ื•ืกืฃ tableId. ืขืœ ื™ื“ื™ ื”ืคื™ื›ืชื• ืœืขื“ื™ืคื•ืช ื”ื’ื‘ื•ื”ื” ื‘ื™ื•ืชืจ ืœืžื™ื•ืŸ, ื ืฉื™ื’ ืงื™ื‘ื•ืฅ ืžืคืชื—ื•ืช ืชื—ื™ืœื” ืœืคื™ ื˜ื‘ืœืื•ืช, ื•ื‘ืชื•ืš ื˜ื‘ืœืื•ืช - ืœืคื™ ื”ื›ืœืœื™ื ืฉืœื ื•.

ืžืคืชื— ื”ืื™ื ื“ืงืก ืžืชื™ื™ื—ืก ืœืื•ืชื ื ืชื•ื ื™ื ื›ืžื• ื”ืžืคืชื— ื”ืจืืฉื™. ื™ื™ืฉื•ื ืคืฉื•ื˜ ืฉืœ ืžืืคื™ื™ืŸ ื–ื” ื‘ืืžืฆืขื•ืช ืฉื™ื•ืš ืืœื™ื• ืขื•ืชืง ืฉืœ ื—ืœืง ื”ืขืจืš ืฉืœ ื”ืžืคืชื— ื”ืจืืฉื™ ืื™ื ื• ืื•ืคื˜ื™ืžืœื™ ืžื›ืžื” ื ืงื•ื“ื•ืช ืžื‘ื˜:

  1. ืžื‘ื—ื™ื ืช ืžืงื•ื ืฉืชืคื•ืก, ื”ืžื˜ื ื ืชื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืขืฉื™ืจื™ื ืœืžื“ื™.
  2. ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ ื‘ื™ืฆื•ืขื™ื, ืฉื›ืŸ ื‘ืขืช โ€‹โ€‹ืขื“ื›ื•ืŸ ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆื•ืžืช, ืชืฆื˜ืจืš ืœืฉื›ืชื‘ ืื•ืชื• ื‘ืืžืฆืขื•ืช ืฉื ื™ ืžืงืฉื™ื.
  3. ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ ืชืžื™ื›ืช ืงื•ื“, ืื ื ืฉื›ื— ืœืขื“ื›ืŸ ืืช ื”ื ืชื•ื ื™ื ืขื‘ื•ืจ ืื—ื“ ื”ืžืคืชื—ื•ืช, ื ืงื‘ืœ ื‘ืื’ ื—ืžืงืžืง ืฉืœ ื—ื•ืกืจ ืขืงื‘ื™ื•ืช ื‘ืื—ืกื•ืŸ.

ืœืื—ืจ ืžื›ืŸ, ื ืฉืงื•ืœ ื›ื™ืฆื“ ืœื‘ื˜ืœ ืืช ื”ื—ืกืจื•ื ื•ืช ื”ืœืœื•.

ืืจื’ื•ืŸ ืงืฉืจื™ื ื‘ื™ืŸ ื˜ื‘ืœืื•ืช

ื”ืชื‘ื ื™ืช ืžืชืื™ืžื” ื”ื™ื˜ื‘ ืœืงื™ืฉื•ืจ ื˜ื‘ืœืช ื”ืื™ื ื“ืงืก ืขื ื”ื˜ื‘ืœื” ื”ืจืืฉื™ืช "ืžืคืชื— ื›ืขืจืš". ื›ืคื™ ืฉืฉืžื• ืžืจืžื–, ื—ืœืง ื”ืขืจืš ืฉืœ ืจืฉื•ืžืช ื”ืื™ื ื“ืงืก ื”ื•ื ืขื•ืชืง ืฉืœ ืขืจืš ื”ืžืคืชื— ื”ืจืืฉื™. ื’ื™ืฉื” ื–ื• ืžื‘ื˜ืœืช ืืช ื›ืœ ื”ื—ืกืจื•ื ื•ืช ื”ื "ืœ ื”ืงืฉื•ืจื™ื ืœืื—ืกื•ืŸ ืขื•ืชืง ืฉืœ ื—ืœืง ื”ืขืจืš ืฉืœ ื”ืจืฉื•ืžื” ื”ืจืืฉื™ืช. ื”ืขืœื•ืช ื”ื™ื—ื™ื“ื” ื”ื™ื ืฉื›ื“ื™ ืœืงื‘ืœ ืขืจืš ืœืคื™ ืžืคืชื— ืื™ื ื“ืงืก, ืขืœื™ืš ืœื‘ืฆืข 2 ืฉืื™ืœืชื•ืช ืœืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืžืงื•ื ืื—ืช. ืกื›ืžื˜ื™ืช, ืกื›ื™ืžืช ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืžืชืงื‘ืœืช ื ืจืื™ืช ื›ืš.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื“ืคื•ืก ื ื•ืกืฃ ืœืืจื’ื•ืŸ ื™ื—ืกื™ื ื‘ื™ืŸ ื˜ื‘ืœืื•ืช ื”ื•ื "ืžืคืชื— ืžื™ื•ืชืจ". ื”ืžื”ื•ืช ืฉืœื• ื”ื™ื ื”ื•ืกืคืช ืชื›ื•ื ื•ืช ื ื•ืกืคื•ืช ืœืžืคืชื—, ื”ื“ืจื•ืฉื•ืช ืœื ืœืžื™ื•ืŸ, ืืœื ืœื™ืฆื™ืจื” ืžื—ื“ืฉ ืฉืœ ื”ืžืคืชื— ื”ืžืฉื•ื™ืš. ื‘ืืคืœื™ืงืฆื™ื™ืช Mail.ru Cloud ื™ืฉ ื“ื•ื’ืžืื•ืช ืืžื™ืชื™ื•ืช ืœืฉื™ืžื•ืฉ ื‘ื•, ืขื ื–ืืช, ืขืœ ืžื ืช ืœืžื ื•ืข ืฆืœื™ืœื” ืขืžื•ืงื” ืœืชื•ืš ื‘ื”ืงืฉืจ ืฉืœ ืžืกื’ืจื•ืช iOS ืกืคืฆื™ืคื™ื•ืช, ืืชืŸ ื“ื•ื’ืžื” ืคื™ืงื˜ื™ื‘ื™ืช, ืื‘ืœ ื‘ืจื•ืจื” ื™ื•ืชืจ

ืœืœืงื•ื—ื•ืช ื ื™ื™ื“ื™ื ื‘ืขื ืŸ ื™ืฉ ืขืžื•ื“ ื”ืžืฆื™ื’ ืืช ื›ืœ ื”ืงื‘ืฆื™ื ื•ื”ืชื™ืงื™ื•ืช ืฉื”ืžืฉืชืžืฉ ืฉื™ืชืฃ ืขื ืื ืฉื™ื ืื—ืจื™ื. ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืžืขื˜ ื™ื—ืกื™ืช ืงื‘ืฆื™ื ื›ืืœื”, ื•ื™ืฉ ื”ืจื‘ื” ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ืžื™ื“ืข ืกืคืฆื™ืคื™ ืขืœ ืคืจืกื•ื ื”ืงืฉื•ืจ ืืœื™ื”ื (ืœืžื™ ื ื™ืชื ืช ื’ื™ืฉื”, ื‘ืื™ืœื• ื–ื›ื•ื™ื•ืช ื•ื›ื•'), ืœื ื™ื”ื™ื” ื–ื” ืจืฆื™ื•ื ืœื™ ืœื”ื›ื‘ื™ื“ ืขืœ ื”ื—ืœืง ื”ืขืจื›ื™ ืฉืœ ื”ืงื•ื‘ืฅ. ืจืฉื•ื ืื™ืชื• ื‘ื˜ื‘ืœื” ื”ืจืืฉื™ืช. ืขื ื–ืืช, ืื ืืชื” ืจื•ืฆื” ืœื”ืฆื™ื’ ืงื‘ืฆื™ื ื›ืืœื” ื‘ืžืฆื‘ ืœื ืžืงื•ื•ืŸ, ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœืื—ืกืŸ ืื•ืชื ื‘ืžืงื•ื ื›ืœืฉื”ื•. ืคืชืจื•ืŸ ื˜ื‘ืขื™ ื”ื•ื ืœื™ืฆื•ืจ ืขื‘ื•ืจื• ืฉื•ืœื—ืŸ ื ืคืจื“. ื‘ืชืจืฉื™ื ืฉืœื”ืœืŸ, ื”ืžืคืชื— ืฉืœื• ื”ื•ื "P", ื•ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ ืืช ืžืฆื™ื™ืŸ ื”ืžื™ืงื•ื "propname" ื‘ืขืจืš ื”ืกืคืฆื™ืคื™ ื™ื•ืชืจ "ืžื™ื“ืข ืฆื™ื‘ื•ืจื™".โ€‹

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ื›ืœ ื”ืžื˜ื-ื ืชื•ื ื™ื ื”ื™ื™ื—ื•ื“ื™ื™ื, ืœืฆื•ืจืš ื”ืื—ืกื•ืŸ ื‘ื”ื ื ื•ืฆืจื” ื”ื˜ื‘ืœื” ื”ื—ื“ืฉื”, ืžืžื•ืงืžื™ื ื‘ื—ืœืง ื”ืขืจืš ืฉืœ ื”ืจืฉื•ืžื”. ื™ื—ื“ ืขื ื–ืืช, ืื™ื ืš ืจื•ืฆื” ืœืฉื›ืคืœ ืืช ื”ื ืชื•ื ื™ื ืขืœ ืงื‘ืฆื™ื ื•ืชื™ืงื™ื•ืช ืฉื›ื‘ืจ ืžืื•ื—ืกื ื™ื ื‘ื˜ื‘ืœื” ื”ืจืืฉื™ืช. ื‘ืžืงื•ื ื–ืืช, ื ืชื•ื ื™ื ืžื™ื•ืชืจื™ื ืžืชื•ื•ืกืคื™ื ืœืžืคืชื— "P" ื‘ืฆื•ืจื” ืฉืœ ื”ืฉื“ื•ืช "ืžื–ื”ื” ืฆื•ืžืช" ื•"ื—ื•ืชืžืช ื–ืžืŸ". ื”ื•ื“ื•ืช ืœื”ื, ืืชื” ื™ื›ื•ืœ ืœื‘ื ื•ืช ืžืคืชื— ืื™ื ื“ืงืก, ืฉืžืžื ื• ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืžืคืชื— ืจืืฉื™, ืฉืžืžื ื•, ืœื‘ืกื•ืฃ, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆื•ืžืช.

ืžืกืงื ื”

ืื ื• ืžืขืจื™ื›ื™ื ืืช ืชื•ืฆืื•ืช ื”ื™ื™ืฉื•ื ืฉืœ LMDB ื‘ืื•ืคืŸ ื—ื™ื•ื‘ื™. ืœืื—ืจื™ื• ื™ืจื“ ืžืกืคืจ ื”ืงืคืืช ื”ืืคืœื™ืงืฆื™ื•ืช ื‘-30%.

ื”ื‘ืจืง ื•ื”ืขื•ื ื™ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ืขืจืš ืžืคืชื— LMDB ื‘ื™ื™ืฉื•ืžื™ iOS

ืชื•ืฆืื•ืช ื”ืขื‘ื•ื“ื” ืฉื ืขืฉื• ื”ื“ื”ื“ื• ืžืขื‘ืจ ืœืฆื•ื•ืช iOS. ื ื›ื•ืŸ ืœืขื›ืฉื™ื•, ืื—ื“ ืžืงื˜ืขื™ ื”"ืงื‘ืฆื™ื" ื”ืจืืฉื™ื™ื ื‘ืืคืœื™ืงืฆื™ื™ืช ืื ื“ืจื•ืื™ื“ ืขื‘ืจ ื’ื ื”ื•ื ืœืฉื™ืžื•ืฉ ื‘-LMDB, ื•ื—ืœืงื™ื ื ื•ืกืคื™ื ื‘ื“ืจืš. ืฉืคืช ื”-C, ืฉื‘ื” ืžื™ื•ืฉื ืžืื’ืจ ื”-key-value, ื”ื™ื™ืชื” ืขื–ืจื” ื˜ื•ื‘ื” ืœื™ืฆื™ืจืช ืžืกื’ืจืช ื™ื™ืฉื•ืžื™ื ืกื‘ื™ื‘ื” ื—ื•ืฆืช ืคืœื˜ืคื•ืจืžื•ืช ื‘-C++. ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืžื—ื•ืœืœ ืงื•ื“ ื›ื“ื™ ืœื—ื‘ืจ ื‘ืฆื•ืจื” ื—ืœืงื” ืืช ืกืคืจื™ื™ืช C++ ืฉื”ืชืงื‘ืœื” ืขื ืงื•ื“ ืคืœื˜ืคื•ืจืžื” ื‘-Objective-C ื•ื‘-Kotlin ื’'ื™ื ื™ ืž-Dropbox, ืื‘ืœ ื–ื” ืกื™ืคื•ืจ ืื—ืจ ืœื’ืžืจื™.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”