ืืื ืืึทืจืืกื 2019, ืึท ืืึทื ื-ืึทืืืืืืึทื ืืขืฉืขืขื ืืฉ ืืื ืคืืจืืขืงืืืขื ืืื ืื Mail.ru ืงืืึธืื ืืึธืก ืืึทื ืฉืึทืคึฟื. ืื ืืืืคึผื ืืึทืืึทืืืืก ืคึฟืึทืจ ืคึผืขืจืกืืกืืขื ื ืกืืึธืจืืืืฉ ืคืื ืึทืคึผืืึทืงืืืฉืึทื ืฉืืึทื ืืื ืืขืืืืจื ืืืืขืจ ืขืงืืึธืืืฉ ืคึฟืึทืจ ืื ืจืืจืขืืืืืง ืืืขืื
ืฆืืคืจืืื
ืืึธืืืึทืืืืืฉืึทื ืคึฟืึทืจ ืืืคึผืืึทืืขื ืืืืฉืึทื LMDB ืคึผืึทืืืฉืึทื ืื ื ืืจืื ืืืืื ืคืื ืืืื
ืงืกื ืืืงืก.ืืืืื #1. ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก
ืงืกื ืืืงืก.ืืืืื # 2. ื+ ืืืื
ืงืกื ืืืงืก.ืืืืื #3. ืงืึธืคึผื-ืืืืฃ-ืฉืจืืึทืื ืืืืืื ืื ื ืึท ืืึทืื ืกืืฉืขืืึท ืืืืฃ ืฉืคึผืืฅ ืคืื ืื ืฉืืืกื-ืืืขืจื API
ืงืกื ืืืงืก.ืืงืขืจืืืง ืึทืืกืืจืึทืงืฆืืขืก
ืงืกื ืืืงืก.ืืืฉ ืืึธืืขืืื ื
ืงืกื ืืืงืก.ืืึธืืขืืื ื ืืึทืฆืืื ืืขื ืฆืืืืฉื ืืืฉื
1. ืืึธืืืึทืืืืืฉืึทื ืคึฟืึทืจ ืืืคึผืืึทืืขื ืืืืฉืึทื
ืืืื ืืึธืจ ืืื 2015, ืืืจ ืืขื ืืืขื ืื ืฆืจื ืฆื ืืขืกืื ืืื ืึธืคื ืื ืฆืืืื ื ืคืื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืึทืื. ืืืจ ืืืื ืืึธืก ืคึฟืึทืจ ืึท ืกืืื. ืืืจ ืืึธืื ืืืงืืืขื ืืขืจ ืึธืคื ืืขื ืืช ืึทื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืกืืึทืคึผืก ืจืืกืคึผืึทื ืืื ื ืฆื ืืึทื ืืฆืขืจ ืึทืงืฉืึทื ื: ืงื ืขืคึผืืขื ืงืขื ืขื ื ืื ืืืื ืืขืืจืืงื, ืจืฉืืืืช ืืึธื ื ืื ืืขืืืืข, ืขืืง. ืืืขืื ืื ืืึทืงืึทื ืืงืก ืคืื ืืขืืฉืขืจืืึทื ืฅ
ืื ืืขืืฉืขืจืืึทื ื ืจืขืืืืืึทืื ืืขืืืืจื ืึท ืงืึทืื ืฉืคึผืจืืฅ ืคึฟืึทืจ ืืื ืื. ืขืก ืคืืจืงืขืจื ืืืืก ืึทื ืขืก ืืขื ืขื ืคืืืข ืืขืจ ืคึผืจืึธืืืขืืก ืืขืคึฟืืจื ืืืจื ืคืจืืืื ืืื ืงืืื ืื ืืขืจืข. ืืืื ืืืืืขืจ ืจืืึทืืืืืื ื ืืขื ืคืึทืงื ืื ืืืืคึผื ืืขืื ืืฉ ืืจืืื ืคืื ืงืืืึทืืืืขื ืืื ืงืจืึทื ืคืจืื, ืืขืืึธืื ื ืึธื ืื ืคืึธืงืืก
ืืืืื ืืขืืืื
ืืขืจ ืึทืงืืืึธืจ ืืึธืืขื ืคืื ืกืืกืืขื ืึธืจืืึทื ืืืึทืฆืืข ืึทืกืืื ืึทื ืืืืืืืืจืขืึทืืื ื ืืืขืจื ืืืื ืจืืข ืขืกืึทื ืก. ืืึธืืขื ืึทืืืืฉืขืงืฅ ืืื ืขืก ืืื ืฆื ืงืจืืึทื ืืืึทื ืืึทืื ืืจืื. ืืื ืืื ืืึธื ืืึธืก ื ืื ืืื ืืื ืืึธ ืืื ืืึธืจื, ืึธืืขืจ ืึผืืขื ืงืขืกืืืืขืจ ืืื ืืืืขืืื
ืื ืืึทืืึทืืืืก ืืื ืืืื ืขืจ ืคืื ืื ืงืึธืจื ืขืจืกืืึธืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืื ืืขืจืืื ืื ืืืึทืืจืึทืืข. ืืืึทื ืืืืคึผื ืึทืจืืขื ืืื ืฆื ืื ืกืืจืืืขื ื ืื ืืึทืงืจืึธืคึผืึทืืืขืจื
ืื ืฆืืืืืืข ืืืืืืืง ืคืึทืงืืึธืจ ืืืึธืก ืื ืคืืืึทื ืกื ืื ืืจืืจื ืคืื ืืึทืืึทืืืืก ืืื ืืื ืืืขืจ ืืืึธืืงื ืึทืคึผื. ืขืก ืืื ืืขืืืขื ืื ืกืคึผืืืขืจื ืืืจื ืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืฆืืืึทื ื ืื ืืขื ืืืขื ืืืจื ืืื. ืืื ืืื, ืืืจ ืึทืืืขื ืืืึท
ืืืื ืืืจ ืืืึทืืืฉืึทื ืืื, ืืืึธืก, ืืืขื ืืืจ ืืืจืืคืืจื ืึท ืฆืืขื ืืึทืคึฟืขื, ืึทื ืฉืืึธื ืคืื ืึทืคึผืืืืื ื ืคึผืึทืืฉืึทื ืฆื ืึท ืืืืข ืืึธืืขื ืืืืื, ืงืึทืืคึผืขืจื ืืืื ืคืื ืฉืืึทื ืืื ืื ืคืื ืกืขืจืืืขืจ ืฉืืึทื, ืืืจ ืืืขื ืืึธืื ืึท ืืึทื ืฅ ืคึผืื ืืืขื ืืขืืึทื ืง ืคืื ืืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืึทืงืขืจื ืืื ืืืึธืืงื. ืงืืืืึทื ืฅ. ืขืก ืืื ืืจืื ื ืฆื ืืจืขืคื ืึทื ืฆื ืื ืกืืจืืืขื ื ืขืก, ืืืจ ืืึทืจืคึฟื ืฆื ืึทืืึทืงืืื ืฆืืืื DOM ืืืืืขืจ ืืื ืืึผืจืื ืืื ืืขืืึท ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืึทืืข ืกืขืจืืืขืจืก ืืื ืืืืข ืืขืงืขืก. ืขืก ืืืจื ืก ืืืืก ืึทื ืืืื ืึท ืืึทื ืืฆืขืจ ืกืืึธืจื 500 ืืืืื ื ืืขืงืขืก ืืื ืื ืืืึธืืงื, ืฆื ืกืื ืืงืจืึทื ืืื ืขืก ืืื ื ืืืืืง ืฆื ืจืืงืจืืืื ืืื ืฆืขืฉืืขืจื ืฆืืืื ืืืืืขืจ ืืื 1 ืืืืืึธื ื ืึธืืื. ืืืขืจ ืืขืืขืจ ื ืึธืืข ืืื ืึท ืืขืืืื ืืึทื ืืื ืึท ืืจืึทืคืืง ืคืื ืกืึทืืึทืืืืฉืขืงืฅ. ืืื ืืขื ืืืื, ืื ืคึผืจืึธืคืืืื ื ืจืขืืืืืึทืื ืืขื ืขื ืืขืจืืืึทืจื. ืขืก ืืึธื ืืื ืึทืจืืืกืืขืืืืื ืึทื ืืคืืื ืึธื ืืขื ืืืขื ืืื ืืฉืืื ืื ืืขืจืืืฉืื ื ืึทืืืขืจืืืึทื, ืื ืืืืขืจ ืคึผืจืึธืฆืขืืืจ ืคืื ืงืจืืืืืื ื ืืื ืืขืจื ืึธื ืืืกืืจืืืื ื ืึท ืจืืืืง ื ืืืขืจ ืคืื ืงืืืื ืึทืืืืฉืขืงืฅ ืงืึธืก ืึท ืฉืืื ืคึผืขื ื. ืคืื ืืึทื ืืฆืขืจ ืกืงืจืืคึผืก. ืืื ืึท ืจืขืืืืืึทื, ืืืจ ืคืึทืจืจืืืื ืื ืจืืข ืืืืืืืง ืงืจืืืขืจืืึธื ืืื ืืฉืืืื ื ืึท ืืึทืืึทืืืืก - ืื ืคืืืืงืืื ืฆื ืื ืกืืจืืืขื ื CRUD ืึทืคึผืขืจืืืฉืึทื ื ืึธื ืืื ืึทืืืฉ ืึทืืึทืงืืืฉืึทื ืคืื ืึทืืืืฉืขืงืฅ.
ืื ืืขืจืข ืจืขืงืืืืจืขืืขื ืฅ ืืขื ืขื ืืขืจ ืืจืืืืฆืืื ืขืื ืืื ืืืืขืจ ืจืฉืืื ืืื ืืื ืืืื.
- ืคึฟืึธืืขื ืืืืขืจืงืืึทื.
- ืืืืืืคึผืจืึธืกืขืกืื ื. ืืืงืืืืืื ืืืจื ืื ืคืึทืจืืึทื ื ืฆื ื ืืฆื ืื ืืขืืืข ืืึทืืึทืืืืก ืืืึทืฉืคึผืื ืฆื ืกืื ืืงืจืึทื ืืื ืื ืฉืืึทื ื ืื ืืืืื ืฆืืืืฉื ืคึฟืขืืขื, ืึธืืขืจ ืืืื ืฆืืืืฉื ืื ืืืืคึผื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืึธืก ืืงืกืืขื ืฉืึทื ื.
- ืื ืคืืืืงืืื ืฆื ืคืึธืจืฉืืขืื ืกืืึธืจื ืขื ืืืืื ืืื ื ืื-ืืืืืึทืืึทื ืึทืืืืฉืขืงืฅ
- ืงืืื ืืื ืึทืืืฉ ืึทืืึทืงืืืฉืึทื ื ืืื CRUD ืึทืคึผืขืจืืืฉืึทื ื.
- ืืจืึทื ืกืึทืงืืืึธื ืฉืืืฆื ืคึฟืึทืจ ืืงืขืจืืืง ืคึผืจืึธืคึผืขืจืืืขืก
ืืืืขืจ : ืึทืืึธืืืงืืื, ืงืึธื ืกืืกืืขื ืกื, ืืคืืขืืื ืืขืจืืงืืื ืืื ืจืืืืืึทืืืืึทืื. - ืืืืงืืึทื ืืืืฃ ืื ืืขืจืกื ืคืึธืืงืก ืงืึทืกืขืก.
ืืื ืืขื ืืึทื ื ืคืื ืจืขืงืืืืจืขืืขื ืฅ, SQLite ืืื ืืขืืืขื ืืื ืืืืืื ืึท ืืื ืืจืืจื. ืึธืืขืจ, ืืื ืึท ืืืื ืคืื ืืขืจ ืืขืจื ืขื ืคืื ืึทืืืขืจื ืึทืืืืืขืก, ืืื ืืขืคึฟืื ืขื ืึท ืืื
2. ืืืื ืคึผืึทืืืฉืึทื ืื ื
LMDB ืืื ืึท ืืืืขืจ ืงืืืื ืืืืืืึธืืขืง (ืืืืื 10 ืง ืจืึธืื) ืืืึธืก ืืืคึผืืึทืืึทื ืฅ ืื ืืึธืืึทืกื ืคืื ืืึทืืขื ืืึทื ืฉืืืืข ืคืื โโืืึทืืึทืืืืกืื - ืกืืึธืจืืืืฉ.
ืืขืจ ืืืืื ืืืึทืืจืึทืืข ืืืืืื ืึทื ืงืึทืืคึผืขืจืื ื LMDB ืืื SQLite, ืืืึธืก ืืืื ืืืคึผืืึทืืึทื ืฅ ืืขืืขืจ ืืขืืืขืืก, ืืื ืืืื ื ืื ืืขืจ ืจืืืืืง ืืื SQLite ืืื ืงืึธืจ ืืึทืืึท. ืขืก ืืืึธืื ืืืื ืืขืจ ืฉืืื ืฆื ืฆืืืืจื ืื ืืขืืืข ืกืืึธืจืืืืฉ ืขื ืืืฉืึทื ื ืืื ืืืืึทื ืงืึธืืคึผืขืืืืึธืจืก - BerkeleyDB, LevelDB, Sophia, RocksDB, ืืื"ื ื. ืขืก ืืขื ืขื ืืคืืื ืืืืืขืืึทืคึผืืึทื ืฅ ืืื ืืDB ืืงืื ืืื ืึท ืกืืึธืจืืืืฉ ืืึธืืึธืจ ืงืึธืืคึผืึธื ืขื ื ืคึฟืึทืจ SQLite. ืืขืจ ืขืจืฉืืขืจ ืึทืืึท ืขืงืกืคึผืขืจืืืขื ื ืืื ืืขืืืขื ืืื 2012
LMDB ืืื ืืขืจ ืืืืคึผื ืืขื ืืฆื ืืื ืึท ืืึธืืึธืจ ืคึฟืึทืจ ืึทืคึผืืึทืงืืืฉืึทื ืืึทืืึทืืืืกืื. ืื ืืืืืืึธืืขืง ืึธืื ืืืื ืืืืกืืขื ืฆื ืื ืืขืืืขืืึธืคึผืขืจืก
LMDB ืืื ืึธืคื ืืขื ืืฆื ืืื ืึทื ืืื-ืืื ืกืืึธืจืืืืฉ. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืึธืืืืืึท ืคืืจืขืคืึธืงืก ืืืขืืขืจืขืจ
ืืขืจ ืืึธืืึธืจ ืืื ืืืื ืืขืืืื ืืืื ืฆืืืื ืืื ืืขืจ ืืืขืื ืคืื ืจืืจืขืืืืืง ืึทื ืืืืืงืืื ื. ืืจืึทืกืขืก ืคืื ืืืึทื ื ืืฆื ืงืขื ืขื ืืืื
LMDB ืืื ืืฆืืื ืคืืืืื ื ืคึฟืึทืจ ืึท ืึธืจื ืืื ืืขืจ ืืื ืืื ืื ื ืืฉืข ืืื ืงืก ืืืจื BerkeleyDB ื ืึธื ืขืก ืืขืงืืืขื ืืื ืืขืจ ืื ืงืึธื ืืจืึธื ืคืื Oracle. ืื ืืืืืืึธืืขืง ืืื ืืื ืืขืืื ืคึฟืึทืจ ืืืึทื ืืืืงืืึทื ืืื ืจืืืืืึทืืืืึทืื, ืืคืืื ืงืึทืืคึผืขืจื ืืื ืืืื ืคึผืืจื. ืืื ืืืจ ืืืืกื, ืขืก ืืขื ืขื ืงืืื ืคืจืื ืืึธื ืืฉืื, ืืื ืืื ืืืึธืื ืืื ืฆื ืื ืืขืจืฉืืจืืึทืื ืื ืืึทื ืื-ืึทืืืขืง ืึทื ืืืจ ืืืขื ืืึธืื ืฆื ืคึผื ืื ืืืขื ืืฉืืืื ื ืฆืืืืฉื LMDB ืืื SQLite. ืื ืืืึทืืจืึทืืข ืืืืื ืงืืืจ ืืขืืึทื ืกืืจืืืฅ ืืื ืืขืืืืงืกื ืืืืงืืึทื ืืื ืึทืืฉืืืื. ืขืจืฉืืขืจ, ืืืจ ืืึธื ื ืื ืืึทืฆืึธืื ืคึฟืึทืจ ื ืึธื ืืืึทืขืจืก ืคืื ืึทืืกืืจืึทืงืฆืืข ืืืืฃ ืฉืคึผืืฅ ืคืื ืืืกืง ืกืืึธืจืืืืฉ. ืขืก ืืื ืงืืึธืจ ืึทื ืึท ืืื ืึทืจืงืึทืืขืงืืฉืขืจ ืงืขื ื ืืฉื ืืึธื ืึธื ืืื, ืืื ืืื ืืืขืื ืื ืขืืืึทืืึทืืื ืืขืจืฉืืึทื ืขื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืงืึธื, ืึธืืขืจ ืืื ืืืขืื ืืืื ืคืื ืกืึทืืึทืืขืจ. ืืื ืืืขืื ื ืืฉื ืึทื ืืืึทืืื ืคึฟืขืึดืงืืืื ืืืึธืก ืืขื ืขื ื ืืฉื ืคืืจืืื ืื ืืืจื ืึท ืกืคึผืขืฆืืคืืฉ ืึทืคึผืืึทืงืืืฉืึทื, ืืืฉื ืฉืืืฆื ืคึฟืึทืจ ืคึฟืจืืื ืืื ืื SQL ืฉืคึผืจืึทื. ืฆืืืืืื ืก, ืขืก ืืื ืืขืืืขื ืฆื ืึธืคึผืืืืึทืืื ืื ืกืืจืืืขื ื ืืึทืคึผืื ื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ืึทืคึผืขืจืืืฉืึทื ื ืืืืฃ ืจืืงืืืขืก ืฆื ืืืกืง ืกืืึธืจืืืืฉ. ืืืื ืกืงืืืืข
3. ืืจืื ืขืืืืื ืคืื ืืืื
ื ืืืืขื ืืืืก ืืขื ืืื ืืขืงืืงื ืืืืคื ืืืื ืคืื ื ืคืืืื ืืืื, ืืื ืฉืืื ืฆืืื ืฆื ืืืื ืืืคืขืจ. ืื ืืืืึทืืขืจ ืืจืื ืกืขืงืฉืึทื ื ืืืขื ืืืื ืืขืืึทืงืืืืึทื ืฆื ืึทื ืึทื ืึทืืืกืืก ืคืื ืื ืืืืคึผื ืคึผืืืขืจื ืืืืฃ ืืืึธืก ืื ืกืืึธืจืืืืฉ ืึทืจืงืึทืืขืงืืฉืขืจ ืจืขืกืฅ:
- ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก ืืื ืึท ืืขืงืึทื ืืืึทื ืคึฟืึทืจ ืืจืืขืื ืืื ืืืกืง ืืื ืกืื ืืงืจืึทื ืืืืื ื ืื ืขืจืืขื ืืึทืื ืกืืจืึทืงืืฉืขืจื.
- ื +-ืืืื ืืื ืึทื ืึธืจืืึทื ืืืึทืฆืืข ืคืื โโืื ืกืืจืืงืืืจ ืคืื ืกืืึธืจื ืืึทืื.
- ืงืึธืคึผื-ืืืืฃ-ืฉืจืืึทืื ืืื ืึท ืฆืืืึทื ื ืฆื ืฆืืฉืืขืื ืึทืกืื ืืจืึทื ืกืึทืงืืืึธื ืคึผืจืึธืคึผืขืจืืืขืก ืืื ืืืืืืืืขืจืกืืึธื.
3.1. ืืืืื #1. ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก
ืืึผืจืื-ืืึทืคึผื ืืขืงืขืก ืืขื ืขื ืึทืืึท ืึท ืืืืืืืง ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืขืืขืืขื ื ืึทื ืืื ืืคืืื ืืขืจืฉืืึทื ืขื ืืื ืื ื ืึธืืขื ืคืื ืื ืจืืคึผืึทืืึทืืึธืจื. ืืฉืื ืคืื ืงืึทืืฉืื ื ืืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคืื ืึทืงืกืขืก ืฆื ืกืืึธืจื ืืื ืคึฟืึธืจืืึทืฆืืข ืืขื ืขื ืืึธืจ ืืื ืงืก ืฆื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื. LMDB ืึผืืื ืงืืื ืงืึทืฉ ืืื ืืื. ืืึธืก ืืื ืึท ืืึทืืืืกืืืื ืืง ืืึทืฉืืืก ืคืื ืืขืจ ืืืืจ, ืืืืึทื ืืืืขื ืขื ืืึทืื ืืืืึทื ืคึฟืื ืืึทืคึผื ืืขืงืขืก ืึทืืึทืื ืืืจ ืฆื ืฉื ืืึทืื ืึท ืคึผืืึทืฅ ืคืื ืขืงื ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื ืืึธืืึธืจ. ืื ืืขืจ ืืื ืึท ืืืืึทื ืคืื ืืึทื ืฅ ืจืฉืืื ืคืื ืขืืืขืืข ืคืื โโืืื.
- ืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืคืื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืืื ืฆื ืืึทืืื ืื ืงืึธื ืกืืกืืขื ืกื ืคืื ืืึทืื ืืื ืื ืกืืึธืจืืืืฉ ืืืขื ืืืจ ืึทืจืืขื ืืื ืขืืืขืืข ืคึผืจืึทืกืขืกืึทื. ืืื ืืขืจ ืืืืึทืืขืจ ืึธืคึผืืืืืื ื, ืื ืืึทืงืึทื ืืงืก ืืื ืืืกืงืึทืกื ืืื ืืขืืึทื ืืื ืืื ืืืืืขืจ.
- ืืขืจ ืึทืืืขืง ืคืื ืงืึทืืฉืขืก ืืึธืจ ืืืืืึทื ืืืฅ LMDB ืคืื ืื ืึธืืืืขืจืืขื ืคึฟืึทืจืืื ืื ืืื ืืื ืึทืืืฉ ืึทืืึทืงืืืฉืึทื ื. ืืืืขื ืขื ืืึทืื ืืื ืคืืจ ืืืื ืืึทืฉืืขืืืงื ืึท ืืืึทืื ืฆื ืื ืจืืืืืง ืึทืืจืขืก ืืื ืืืืจืืืึทื ืืึผืจืื ืืื ืืึธืจื ืืฉื ืืขืจ. ืขืก ืกืึธืื ืืก ืืื ืืืืกื ืฉืึทืคึฟื ืืขืืขืืจืืกืืืง, ืึธืืขืจ ืืื ืื ืกืืึธืจืืืืฉ ืืงืืจ ืงืึธื ืึทืืข ืงืึทืืืก ืฆื ืงืึทืืืึธืง ืืขื ืขื ืงืึทื ืกืึทื ืืจืืืืึทื ืืื ืื ืกืืึธืจืืืืฉ ืงืึทื ืคืืืืขืจืืืฉืึทื ืคืื ืงืฆืืข.
- ืืขืจ ืึทืืืขืง ืคืื ืงืึทืืฉืขืก ืืืื ืืืื ืืขืจ ืึทืืืขืง ืคืื ืืึทืงืก ืคึฟืึทืจืืื ืื ืืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคืื ืืืืขืจ ืึทืงืกืขืก. ืืืืขื ืขืจ, ืคืื ืืืขืืืข ืขืก ืงืขื ืืืื ืึท ืึทืจืืืืจืึทืจืืฉ ื ืืืขืจ ืคืื ืืืืขื ืขืจ ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืึธื ื ืื ืืจืขืคื ืึท ืืืื ืืืืขืงืก ืืืืฃ ืืืืขืจ ืืืขื ืฆื ืื ืืึทืื. ืจืขืื ืฆื ืืขื, ืื ืืืืขื ืขื ืืืืงืืึทื ืืื ืืืขืึทื ืืื ืขืึทืจ ืกืงืึทืืึทืืืืืื ืืืืืจื ืืืืฃ ืื ื ืืืขืจ ืคืื ืงืคึผืืก. ืืื LMDB, ืืืืื ืืึธืืืคืืฆืืจื ืึทืคึผืขืจืืืฉืึทื ื ืืขื ืขื ืกืื ืืงืจืึทื ืืืื. ืขืก ืงืขื ืืืื ืืืืื ืืืื ืฉืจืืืืขืจ ืืื ืึท ืฆืืึทื.
- ื ืืื ืืืื ืคืื ืงืึทืืฉืื ื ืืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืืึธืืืง ืืืืืึทื ืืืฅ ืื ืืึธืจ ืงืึธืืคึผืืืฆืืจื ืืืคึผ ืคืื ืขืจืจืึธืจืก ืคึฟืึทืจืืื ืื ืืื ืืจืืขืื ืืื ืึท ืืืืื-ืืจืขืืื ืกืืืืืืข. ืขืก ืืขื ืขื ืืขืืืขื ืฆืืืื ืืฉืืงืึทืืืข ืืึทืืึทืืืืก ืฉืืืืืื ืืื ืื Usenix OSDI 2014 ืืืฆืื ื:
"ืึทืืข ืืขืงืข ืกืืกืืขืืขื ืืขื ืขื ื ืืฉื ืืืฉืืคื ืืืืึทื: ืืืืฃ ืื ืงืึทืืคึผืืขืงืกืืื ืคืื ืงืจืืืืืื ื ืงืจืึทืฉ ืงืึธื ืกืืกืืขื ื ืึทืคึผืคึผืืืงืึทืืืึธื ืก" ะธ"ืืึธืจืืฉืขืจืื ื ืืึทืืึทืืืืกืื ืคึฟืึทืจ ืฉืคึผืึทืก ืืื ื ืืฅ" . ืคึฟืื ืืื ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืึทื ืคึผืจืขืกืืืขื ืืื ืจืืืืืึทืืืืึทืื ืคืื LMDB ืืื ืื ืึผืืขื ืคืืึธืืึทืก ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืึทืกืื ืืจืึทื ืกืึทืงืืืึธื ืคึผืจืึธืคึผืขืจืืืขืก, ืืืึธืก ืืื ืืขืืขืจ ืืื ืื ืคืื SQLite. - ืื ืืื ืึทืืึทืืืืึทื ืคืื LMDB ืึทืืึทืื ืื ืืึทืฉืื ืคืึทืจืืจืขืืื ื ืคืื ืืืื ืงืึธื ืฆื ืืืื ืืึธืจ ืืืื ืืื ืื L1 ืงืึทืฉ ืคืื ืื ืคึผืจืึทืกืขืกืขืจ ืืื ืื ืืืคึผืจืืืื ืืืืงืืึทื ืงืขืจืึทืงืืขืจืืกืืืงืก.
ืฆืื ืืึทืืืืขืจื, ืืื ืืึธืก, ืืื ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก, ืึทืืฅ ืืื ื ืืฉื ืืื ืงืืึธืืืืขืกืก ืืื ืืืจ ืืืึธืื ืืื. ืฆื ืจืขืื ืืขืจ ืงืึทื ืฉืึทืกืื ืืืขืื ืื ืฉืึธืจืืงืึธืืื ืืก ืคึฟืึทืจืืื ืื ืืื ืืื, ืขืก ืืื ื ืืืืืง ืฆื ืืขืืขื ืงืขื ืื ืึทืืืขืืืื ืข ืคึผืจืื ืกืึทืคึผืึทืื ืคืื ืืืคึผืืึทืืขื ืื ื ืืขื ืืขืงืึทื ืืืึทื ืืื ืึทืคึผืขืจืืืืื ื ืกืืกืืขืืก.
ืึทืืืขืืืื ืข ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก
ืืื ืืขืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืืึธืก ืืืืคื, ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืึทืกืึธืืฉืืึทืฅ ืึท ืขื ืืืื ืืขืจืืคื ืึท ืคึผืจืึธืฆืขืก. ืืขืืขืจ ืคึผืจืึธืฆืขืก ืืื ืึทืืึทืงืืืืื ืึท ืงืึทื ืืืืืืึทืก ืงืืื ืคืื ืึทืืจืขืกืขืก ืืื ืืืึธืก ืขืก ืฉืืขืื ืึทืืฅ ืขืก ืืึทืจืฃ ืฆื ืึทืจืืขืื. ืืื ืื ืืึธืืึทืกื ืึทืืจืขืกืขืก ืขืก ืืขื ืขื ืกืขืงืฉืึทื ื ืืื ืงืึธื ืืื ืฉืืืขืจ-ืงืึธืืขื ืืึทืื ืืื ืจืขืกืืจืกื. ืืขืจื ืึธื ืงืืื ืึท ืืจืึธืืื ื ืืืึธืง ืคืื ืืื ืึทืืืฉ ืึทืืจืขืก ืคึผืืึทืฅ, ืืืึธืก ืืื ืืึทืืืืกื ืคึฟืึทืจ ืืื ืื ืืื ืืขืจ ืื ื ืึธืืขื ืงืืคึผืข. ืขืก ืึผืืื ืื ืึทืืจืขืกืขืก ืคืื ืขื ืืืืื ืืืึธืก ืืขืจืฉืืึทื ืขื ืืขืฉืึทืก ืื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืื ืคึผืจืึธืืจืึทื. ืืื ืืขืจ ืฉืคึผืืฅ ืืื ืื ืืึผืจืื ืืขืื ื ืืขื ืืฆื ืืืจื ืื ืึทืคึผืืึทืงืืืฉืึทื ืึธื ืืืืื. ืขืก ืืืืงืกื ืึธืืขืจ ืงืึทื ืืจืึทืงืฅ; ืืื ืื ืืขืจืข ืืืขืจืืขืจ, ืืืึทื ืืจืืืก ืืืื ืืื ืึท ืืื ืึทืืืฉ ื ืึทืืืจ. ืืื ืฆื ืคืืจืืืืื ืื ืกืืืง ืืื ืงืืคืข ืคืื โโืฉืืืคื ืืื ืืจืืื ืืืฉื ืืื ืืืื ืก ืืื ืืขื ืื ืืขืจืขื, ืืขื ืขื ืืื ืืขืคืื ื ืืื ืคืึทืจืฉืืืขื ืข ืขื ืืก ืคืื ืื ืึทืืจืขืก ืคึผืืึทืฅ.โ ืขืก ืืื ืึท ืืึธื ืฆืืืืฉื ืื ืฆืืืื ืืื ืึทืืืฉ ืกืขืงืฉืึทื ื ืืื ืฉืคึผืืฅ ืืื ืื ืึธ. ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ื ืืฆื ืึทืืจืขืกืขืก ืืื ืืขื ืืืื ืึธืคึผืืืืืื ื ืฆื ืคืึทืจืืื ืื ืึท ืคืึทืจืฉืืืื ืงืืึทื ืคืื ืขื ืืืืื ืืื ืืขื ืคึผืจืึธืฆืขืก. ืืื ืืึทืืื ืืขืจ, ืขืก ืงืขื ืขื ืคืึทืจืืื ืื ืึท ืืืืขืจ ืงืขืกืืืืขืจืืืง ืืึทื ื ืคืื ืึทืืจืขืกืขืก ืืื ืึท ืืขืงืข ืืืืฃ ืืขื ืืืกืง. ืึทืืึท ืึท ืืขืงืข ืืื ืืขืจืืคื ืืึผืจืื-ืืึทืคึผื
ืื ืึทืืจืขืก ืคึผืืึทืฅ ืึทืืึทืงืืืืื ืฆื ืืขื ืคึผืจืึธืฆืขืก ืืื ืจืืืืง. ืืืขืึธืจืขืืืงืึทืืื, ืื ื ืืืขืจ ืคืื ืืืขื ืื ืืื ืืืืืืขื ืืืืื ืืืจื ืื ืืจืืืก ืคืื ืื ืืืึทืื, ืืืึธืก ืืื ืืืฉืืืกื ืืืจื ืื ืืืกื ืงืึทืคึผืึทืฆืืืขื ืคืื ืื ืกืืกืืขื. ืืืื ืคืืืืฉ ืืึผืจืื ืืื ืืึทืคึผื ืฆื ืขืก 1-ืฆื-1, ืืขืจ ืขืจืฉืืขืจ ืคึผืจืึธืฆืขืก ืืืึธืื ืฆืขืืึธืื ืื ืืื ืฆืข ืืึทืจืึทื, ืืื ืขืก ืืืึธืื ืืืื ืงืืื ืจืขืื ืคืื ืืืืื-ืืึทืกืงืื ื.
ืึธืืขืจ, ืคึฟืื ืืื ืืืขืจ ืืขืจืคืึทืจืื ื ืืืจ ืืืืกื ืึทื ืืึธืืขืจื ืึธืคึผืขืจืืืืื ื ืกืืกืืขืืขื ืงืขื ืขื ืกืืืืึทืืืืื ืืึทืกืื ืืืกืคืืจื ืืื ืคืืืข ืคึผืจืึทืกืขืกืึทื ืืื ืืืจ ืืืืื. ืืึธืก ืืื ืืขืืืขื ืจืขืื ืฆื ืืขื ืคืึทืงื ืึทื ืืื ื ืึธืจ ืึทืืึทืงืืื ืึท ืคึผืืึทืฅ ืคืื ืืึผืจืื ืฆื ืคึผืจืึทืกืขืกืึทื ืืืืฃ ืคึผืึทืคึผืืจ, ืึธืืขืจ ืืื ืคืึทืงื ืืื ืืึธืื ืืื ืื ืืืืคึผื ืืฉืืืืช ืืึผืจืื ืืืืื ืึทื ืืืื ืืืึธืก ืืื ืืื ืคืึธืืขืจืื ื ืืึธ ืืื ืืืฆื. ืืขืจืืืขืจ, ืืขืจ ืืึผืจืื ืคึฟืึทืจืืื ืื ืืื ืึท ืคึผืจืึธืฆืขืก ืืื ืืขืจืืคื ืืืืจืืืึทื.
ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืึธืจืืึทื ืืืืจื ืืืืจืืืึทื ืืื ืืฉืืืืช ืืึผืจืื ืืื ืืืขืืขืจ ืคืื ืึท ืืืืขืจ ืืจืืืก. ืืื ืืึทืื ืืื ืึท ืืืืขืจ ืืืึทื ืคืื ืืืืจืืืึทื ืืึผืจืื ืืื ืืื ืคืึธืืขืจืื ื, ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืืึธืืื ืขืก ืืื ืืฉืืืืช ืืึผืจืื ืืื ืืืืึทืื ืืื ืืื ืึท ืกืคึผืขืฆืืขื ืืืฉ. ืืืื ืขืก ืืขื ืขื ืงืืื ืคืจืื ืกืืึธืฅ, ืืืื ืขืจ ืคืื ืื ืคืจืืขืจ ืืึธืืืื ืืืขืืขืจ ืืื ืงืึทืคึผืื ืฆื ืื ืืืกืง, ืืื ืืขืจ ืืืื ืขืจ ืืื ืืึธื ืขื ื ืขืื ืืืื ืึธืจื. ืืขืจ ืคึผืจืึธืฆืขืืืจ, ืืืึธืก ืืืจ ืืืขืื ืฆืืจืืงืงืืืขื ืฆื ืืึทืื, ืืื ืืขืจืืคื ืกืืืึทืคึผืื ื. ืื ืคืืืืจ ืืื ืื ืืืึทืกืืจืืืฅ ืืขื ืคึผืจืึธืฆืขืก ืืืกืงืจืืืื. ืืืืฃ ืขืก, ืืืึทื ื ืืื ืึทืืจืขืก 0 ืืื ืืึธืืืื ืืื ืืขืฉืืขืื ืืืืฃ ืื ืืืืคึผื ืืึผืจืื ืืืึทื ืืื ืึทืืจืขืก 4. ืืขื ืคืึทืงื ืืื ืืขืืืขื ืฉืคืืืื ืืื ืื ืงืึธืจืขืกืคึผืึธื ืืขื ืฅ ืืืฉ ืืื ืฆืขื ื ืืืขืจ 0.โ
ืื ืืขืฉืืืืข ืืื ืคึผืื ืงื ืื ืืขืืืข ืืื ืืขืงืขืก ืืึทืคึผื ืฆื ืืึผืจืื. ืืึทืืืฉืืงืื, ืืื ืืขื ืขื ืกืึทืคึผืึธืืืึทืืื ืงืึทื ืืื ืืืึทืกืื ืืื ืืขืืึทืืจืข ืืืื ืืื ืื ืืืืจืืืึทื ืึทืืจืขืก ืคึผืืึทืฅ. ืึธืืขืจ, ืืื ืึทืจืืึทื ืืฉืืืืช ืืึผืจืื ืืืึทื ืืืจื ืืืึทื ืืื ืืืืื ืืืืฃ ืืขืื. ืืึธืืืคืืงืึทืืืึธื ืคืื ืึทืืึท ืืืขืืขืจ ืืื ืกืื ืืงืจืึทื ืืืื ืืื ืื ืืขืงืข ืืืืฃ ืืืกืง. ืืื ืืขื ืืืขื, ืืืจ ืงืขื ืขื ืืืจืืคืืจื ืืขืงืข ื / ืึธ ืืืจื ืคืฉืื ืืจืืขืื ืืื ืืืืขืก ืืื ืืึผืจืื - ืึทืืข ืขื ืืขืจืื ืืขื ืืืขื ืืืื ืืืืืึธืืึทืืืฉ ืืจืึทื ืกืคืขืจื ืืืจื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืงืขืจื ืฆื ืื ืืงืืจ ืืขืงืข.
โ
ืื ืืืื ืืื ืื ืืขืืึทื ืกืืจืืืฅ ืืื LMDB ืกืื ืืงืจืึทื ืืืืื ืืืื ืฉืืึทื ืืืขื ืืจืืขืื ืืื ืื ืืึทืืึทืืืืก ืคึฟืื ืคืึทืจืฉืืืขื ืข ืคึผืจืึทืกืขืกืึทื. ืืืจื ืืึทืคึผืื ื ืื ืืืืจืืืขื ืืืงืึธืจื ืคืื ืคืึทืจืฉืืืขื ืข ืคึผืจืึทืกืขืกืึทื ืฆื ืืขืจ ืืขืืืืงืขืจ ืืขืงืข, ืืืจ ืืข ืคืึทืงืืึธ ืคืึทืจืคืืืืื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืฆื ืืจืึทื ืืืืืืืื ืกืื ืืงืจืึทื ืืื ืืืืขืจ ืืืึทืงืก ืคืื ืืืืขืจ ืึทืืจืขืก ืกืคึผืืืกืึทื ืืื ืืขืืขืจ ืื ืืขืจืข, ืืื LMDB ืงืืงื.
โ
ืึท ืืืืืืืง ื ืืึทื ืก ืืื ืึทื LMDB, ืืืจื ืคืขืืืงืืึทื, ืืึทืืึทืคืืื ืื ืืึทืื ืืขืงืข ืืืจื ืื ืฉืจืืึทืื ืกืืกืืขื ืจืืคื ืืขืงืึทื ืืืึทื, ืืื ืืืกืคึผืืืื ืื ืืขืงืข ืืื ืืื ืืืืขื ืขื-ืืืืื ืืึธืืข. ืืขืจ ืฆืืืึทื ื ืืื ืฆืืืื ืืืืืืืง ืงืึทื ืกืึทืงืืืขื ืกืึทื.
ืืขืจ ืขืจืฉืืขืจ ืงืึทื ืกืึทืงืืืึทื ืก ืืื ืคึผืจืึธืกื ืฆื ืึทืืข ืึธืคึผืขืจืืืืื ื ืกืืกืืขืืขื. ืืืึทื ืขืกืึทื ืก ืืื ืฆื ืืืืื ืฉืืฅ ืงืขืื ืึทื ืื ืืขื ืฉืึทื ืึทื ืฉืขืืืงื ืฆื ืื ืืึทืืึทืืืืก ืืืจื ืคืึทืืฉ ืงืึธื. ืืื ืืืจ ืืืืกื, ืื ืขืงืกืขืงืืืึทืืืข ืืื ืกืืจืืงืฆืืขืก ืคืื ืึท ืคึผืจืึธืฆืขืก ืืขื ืขื ืคืจืื ืฆื ืึทืงืกืขืก ืืึทืื ืคึฟืื ืขืจืืขืฅ ืืื ืืืื ืึทืืจืขืก ืคึผืืึทืฅ. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืื ืืืจ ื ืึธืจ ืืขืจืืื ื, ืืืืึทืื ืืืง ืึท ืืขืงืข ืืื ืืืืขื ืขื-ืฉืจืืึทืื ืืึธืืข ืืืื ืึทื ืงืืื ืืืืขื ืงืขื ืขื ืืืื ืืึธืืืคืืฆืืจื ืขืก. ืืืื ืื ืืื ืืึธืก ืืืจื ืืจืืึทื, ืืจืืื ื, ืืืฉื, ืฆื ืึทืงืืฉืึทืืืึทืื ืึธืืืืขืจืจืืื ืึท ืืขื ืืข ืขืืขืืขื ื ืืื ืึท ื ืื-ืขืืืืกืืึทื ื ืืื ืืขืงืก, ืื ืงืขื ืขื ืึทืงืกืึทืืขื ืึทืื ืืืืฉื ืื ืืขืงืข ืืึทืคึผื ืฆื ืืขื ืึทืืจืขืก, ืืืึธืก ืืืขื ืคืืจื ืฆื ืงืึธืจืืคึผืฆืืข ืคืื โโืื ืืึทืืึทืืืืก. ืืืื ืื ืืขืงืข ืืื ืืขืืืืื ืืื ืืืืขื ืขื-ืืืืื ืืึธืืข, ืึทื ืคึผืจืืืื ืฆื ืืืืฉื ืื ืึทืืจืขืก ืคึผืืึทืฅ ืงืึธืจืึทืกืคึผืึทื ืืื ื ืฆื ืขืก ืืืขื ืคืืจื ืฆื ืึท ื ืืืืคืึทื ืืขืจืืึทื ืืืฉืึทื ืคืื ืื ืคึผืจืึธืืจืึทื ืืื ืึท ืกืืื ืึทื SIGSEGV
, ืืื ืื ืืขืงืข ืืืขื ืืืืึทืื ืืขืฉืึธืืขื.
ืื ืจืืข ืงืึทื ืกืึทืงืืืึทื ืก ืืื ืฉืืื ืกืคึผืขืฆืืคืืฉ ืฆื ืืึธืก. ื ืื ืืขืจ ืืืืจ ืืืขืจ ืงืืื ืื ืืขืจืข ืืงืืจืื ืืขืจืืึธื ืขื ืขืก ืืคืืจืืฉ, ืึธืืขืจ ืึธื ืขืก LMDB ืืืึธืื ื ืืฉื ืืืื ืคึผืึทืกืืง ืคึฟืึทืจ ืคืืืกื ืืืง ืืืืฃ ืืขื ืจืืจืขืืืืืง ืึธืคึผืขืจืืืืื ื ืกืืกืืขื. ืืขืจ ืืืืึทืืขืจ ืึธืคึผืืืืืื ื ืืื ืืขืืจืืึท ืฆื ืืืึทื ืืึทืืจืึทืืืื ื.
ืกืคึผืขืกืืคืืงืก ืคืื ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก ืืื ืืึธืก
ืขืก ืืื ืืขืืืขื ืึท ืืืื ืืขืจืืขื ืืึทืจืืื ืืื WWDC ืืื 2018
ืจืืื ืืึผืจืื ืืื ืึท ืืึทืืืื ื ืคืื ืืืขืืขืจ ืืืึธืก ืงืขื ืขื ืืืื ืคึผืืื ืืึทืกืื ืึทื ืืึธืืืึทื ืคืื ืืฉืืืืช ืืึผืจืื. ืื ืืึทืื ืืื ืึทื ืืืึทืืื ืงืขื ืขื ืืืื ืจืืืึธืืืึทื ืืื ืืืจืฃ ืคืื ืื ืึธืจืืืื ืขื ืงืืืืื. ืืืืขื ืขื-ืืืืื ืืึผืจืื-ืืึทืคึผื ืืขืงืขืก ืคืึทืื ืืื ืืขื ืงืึทืืขืืึธืจืืข. ืืึธืก ืืื ื ืืฉื ืืขืจืฉืจืึธืงื ืฆื ืึทื ืืึธืื ืื ืืืขืืขืจ ืืึทืคึผื ืฆื ืึท ืืขืงืข ืคึฟืื ืืืงืึธืจื ืืื ืงืืื ืฆืืื, ืืืืึทื ืืื ืืขื ืขื ืืขืจืึทื ืืื ืฆื ืืืื ืกืื ืืงืจืึทื ืืืื ืืื ืื ืืขืงืข ืืืืฃ ืืืกืง.
โ
ืึทืืข ืืึทืืึทืคืืื ืืืขืืขืจ ืขื ืืืงื ืืื ืืื ืืจืึธื ืืึผืจืื, ืงืืื ืขื ืื ืืื ืืื ืืขื ืขื ืขืจืืืืฉื ืึทืื ืืืื. ืืื ืืึทืืื ืืขืจ, ืืืงืึธืจื-ืืึทืคึผื ืืขืงืขืก ืืึทืืึทืคืืื ืืืจื ืฉืจืืืื ืฆื ืื ืืืืจืืืึทื ืืึผืจืื ืคึฟืึทืจืืื ืื ืืื ืืื ืืืขื ืืืื ืงืืึทืกืึทืคืืื ืืื ืืขื ืืืขื. ืขืคื ืืืื ืืื ืคืึธื MDB_WRITEMAP
, ื ืึธื ืืึทืื ืขื ืืขืจืื ืืขื ืฆื ืขืก, ืืืจ ืงืขื ืขื ืืึทืฉืืขืืืงื ืืขื ืคึผืขืจืกื ืึทืื
ืืื ืืึทืื ืืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืืืื ืฆื ื ืขืืขื ืฆื ืคืื ืืฉืืืืช ืืึผืจืื, ืืึธืก ืกืึทืืืืฉืขืงืฅ ืขืก ืฆื ืืจืึธื ืืืึทื ืงืึทืืคึผืจืขืฉืึทื. ืื ืืึทื ืฅ ืืึผืจืื ืคืึทืจื ืืืขื ืืืจื ืืจืึธื ืืื ืงืึทืืคึผืจืขืกื ืืืขืืขืจ ืงืึทื ืกืืึทืืืฅ ืื ืึทืคึผืืึทืงืืืฉืึทื ืก ืึทืืื ืืขืจืืคืขื ืข ืืึผืจืื ืฉืคึผืืจ. ืึทืืึธื ืขืก ืจืืืฉืึทื ืึท ืืืืขืจ ืฉืืืขื ืืืขืจื, ืื OOM ืงืืืืขืจ ืกืืกืืขื ืืืืืึทื ืงืืื ื ืึธื ืืขื ืคึผืจืึธืฆืขืก ืืื ืคืึธืจืกืึทืืื ืืขืจืืึทื ืืืฅ ืขืก. ืืึธืก ืืื ืื ืคึผืืงืืืืืขืจืึทืื ืคืื ืืึธืก ืงืึทืืคึผืขืจื ืืื ืืขืกืงืืึทืคึผ ืึธืคึผืขืจืืืืื ื ืกืืกืืขืืขื. ืืื ืงืึทื ืืจืึทืกื, ืจืืืืกืื ื ืื ืืืงืึธืจื ืฉืคึผืืจ ืืืจื ืืืกืืืึทืื ืืืขืืขืจ ืคืื ืืฉืืืืช ืืึผืจืื ืฆื ืืืกืง ืืื ื ืืฉื ืฆืืืขืฉืืขืื ืืื ืืึธืก. ืื ืกืืืืช ืงืขื ืขื ื ืึธืจ ืืืื ืืขืกื. ืืึธืืขืจ ืื ืคึผืจืึธืฆืขืืืจ ืคืื ืื ืืขื ืกืืื ืืึธืืืื ื ืืืขืืขืจ ืฆื ืืืกืง ืืื ืฆืืจืืง ืืื ืฆื ืขื ืขืจืืืข-ืงืึทื ืกืืืื ื ืคึฟืึทืจ ืจืืจืขืืืืืง ืืขืืืืกืขืก, ืึธืืขืจ ืืึธืก ืกืึทืืืขืก ืื ืืืื ืคืื ืจืืจืืืืื ื ืกืขืื ืืืืฃ SSD ืืจืืืืื, ืึธืืขืจ ืืึธืืขืจ ืื ืืืืืื ืขืจื ืืขื ืขื ื ืืฉื ืฆืืคึฟืจืืื ืืื ืื ืงืืืืขืืืืง ืคืึธืจืฉืืขืืื ื ืคืื ืื ืกืืกืืขื, ืืื ืึทืืฅ ืืื ืงืขืกืืืืขืจ ืกืืืึทืคึผื. ืืืื ืืืื, ืืขืจ ืคืืงื ืืืืืื ื ืคืืงื.
ืื ืืืืข ื ืืึทืขืก, ืฉืืื ืืขืจืืื ื ืคืจืืขืจ, ืืื ืึทื LMDB ืืืจื ืคืขืืืงืืึทื ืืื ื ืืฉื ื ืืฆื ืื ืืึทืคึผ ืืขืงืึทื ืืืึทื ืฆื ืืขืจืืืึทื ืืืงื ืืขืงืขืก. ืืขื ืืืื ืึทื ืื ืืขืืืืื ืืึทืื ืืื ืงืืึทืกืึทืคืืื ืืืจื ืืึธืก ืืื ืจืืื ืืืงืึธืจื ืืื ืงืขื ื ืืฉื ืืืืฉืืืืขืจื ืฆื ืื ืืืงืึธืจื ืฉืคึผืืจ. ืืืจ ืงืขื ืขื ืืึทืฉืืขืืืงื ืืขื ืืื ืึท Xcode ืืขืฆืืึทื ืืขืจืืคื VM Tracker. ืื ืกืงืจืขืขื ืฉืึธื ืืื ืื ืืืืืื ืื ืฉืืึทื ืคืื ืื ืืึธืก ืืืืจืืืึทื ืืึผืจืื ืคืื ืื ืงืืึธืื ืึทืคึผืืึทืงืืืฉืึทื ืืขืฉืึทืก ืึธืคึผืขืจืึทืฆืืข. ืืื ืื ืึธื ืืืื, 2 LMDB ืื ืกืืึทื ืกืื ืืขื ืขื ืื ืืืืึทืืืืื ืืื ืขืก. ืืขืจ ืขืจืฉืืขืจ ืืื ืืขืืืขื ืืขืจืืืืื ืฆื ืืืืึทืื ืืืื ืืขืงืข ืืืืฃ 1GiB ืคืื ืืืืจืืืึทื ืืึผืจืื, ืื ืจืืข - 512MiB. ืืจืึธืฅ ืืขืจ ืคืึทืงื ืึทื ืืืืืข ืกืืึธืจืืืืฉ ืึทืงืืึทืคึผืืื ืึท ืืขืืืืกืข ืกืืืข ืคืื โโืจืขืืืืึทื ืฅ ืืึผืจืื, ืงืืื ืคืื ืืื ืงืึทื ืืจืืืืืฅ ืืจืึธื ืืจืืืก.
ืืื ืืืฆื ืขืก ืืื ืฆืืื ืคึฟืึทืจ ืฉืืขืื ื ืืึทืขืก. ืืึทื ืง ืฆื ืื ืืืกืืืึทืื ืืขืงืึทื ืืืึทื ืืื 64-ืืืกื ืืขืกืงืืึทืคึผ ืึธืคึผืขืจืืืืื ื ืกืืกืืขืืขื, ืืขืืขืจ ืคึผืจืึธืฆืขืก ืงืขื ืขื ืคืึทืจื ืขืืขื ืืื ืคืื ืืืืจืืืึทื ืึทืืจืขืก ืคึผืืึทืฅ ืืื ืื ืคืจืื ืฉืืืขืจ ืืืกืง ืคึผืืึทืฅ ืคึฟืึทืจ ืืืื ืคึผืึธืืขื ืฆืืขื ืืืกืืืึทืื ืึทืืึทืื. ืจืืคึผืืืืกืื ื ืืืกืืืึทืื ืืื ืงืึทืืคึผืจืขืฉืึทื ืืื ืืึธืก ืจืึทืืืงืึทืืื ืจืึทืืืกืึทื ืื ืืขืึธืจืขืืืฉ ืืึทืงืกืืืื. ืืืฆื ืึทืืข ืืขืืขืืืง ืคึผืจืึทืกืขืกืึทื ืืืื ืคึผืึทืกืืง ืืื ืื ืืืืคึผื (ืืืืขื ืขื ืืึทืจืึทื) ืืึผืจืื, ืืื ืึทืืข ืืขื ืข ืืืึธืก ืืึธื ื ืื ืคึผืึทืกืืง ืืืื ืืืื ืืขืฆืืืื ืืขื ืฆื ืคืึทืจืขื ืืืงื. ืืืก ืืื ืกืืืืืื ืืื ืืื ืื ืืืืื ืืขืจืืื ื
ืืึทืืืจื ืืืืฃ ืื ืจืขืืืืืืื ืคืื ืืงืกืคึผืขืจืึทืืึทื ืฅ ืืื ืื ืงืืึธืื, ืืืจ ืืขืงืืืขื ืฆื ืื ืคืืืืขื ืืข ืงืึทืืคึผืจืึทืืืื ืืืึทืืืขืก ืคึฟืึทืจ ืื ืืืงืึธืจื ืึทืืึทืงืืืืื ืืืจื LMDB: 384 ืืขืืืืืื ืคึฟืึทืจ 32-ืืืกื ืืขืืืืกืขืก ืืื 768 ืคึฟืึทืจ 64-ืืืกื ืืขืืืืกืขืก. ื ืึธื ืืขื ืืึทื ื ืืื ืืขื ืืฆื ืึทืจืืืฃ, ืงืืื ืืึทืืึทืคืืืื ื ืึทืคึผืขืจืืืฉืึทื ื ืึธื ืืืืื ืฆื ืกืืฃ ืืื ืื ืงืึธื MDB_MAP_FULL
. ืืืจ ืึธืืกืขืจืืืืจื ืึทืืึท ืขืจืจืึธืจืก ืืื ืืื ืืืขืจ ืืึธื ืืืึธืจืื ื, ืึธืืขืจ ืืื ืืขื ืขื ืงืืืื ืืขื ืื ืึทื ืืื ืืขื ืืื ืข ืืื ืงืขื ืขื ืืืื ืึธืคึผืืขืืึธืื.
ื ื ืื-ืงืืึธืจืขืืืืืง ืกืืื ืคึฟืึทืจ ืืืขืจืืง ืืึผืจืื ืงืึทื ืกืึทืืฉืึทื ืืืจื ืื ืกืืึธืจืืืืฉ ืงืขื ืขื ืืืื ืืึทื ื-ืืขืืขืื ืืจืึทื ืืึทืงืฉืึทื ื. ืึผืื ืฆื ืคึฟืึทืจืฉืืืื, ืืื ืึทืืื ืื ืืึธืืืงืข ืฆืืืื ืืขืจืฉืฒึทื ืื ืืขื ืืฒึทื ืขื ืคึฟืึทืจืืื ืื, ืืืขืื ืืืจ ืืขืืึธืืคึฟื ืืืขืจื ืืืจื ืืึทืืจืึทืืื ืื ืืืืขืจืืงืข ืฆืืืื ืขืืืืื ืคึฟืื ืขื ืืืื.
3.2. ืืืืื # 2. ื+-ืืืื
ืฆื ืขืืืึทืืืื ืืืฉื ืืืืฃ ืฉืคึผืืฅ ืคืื ืึท ืฉืืืกื-ืืืขืจื ืกืืึธืจืืืืฉ, ืื ืคืืืืขื ืืข ืึทืคึผืขืจืืืฉืึทื ื ืืืื ืืืื ืคืึธืจืฉืืขืื ืืื ืืืึทื API:
- ืึทืจืืึทื ืืืืื ืึท ื ืืึท ืขืืขืืขื ื.
- ืืืื ืคึฟืึทืจ ืึทื ืขืืขืืขื ื ืืื ืึท ืืขืืขืื ืฉืืืกื.
- ืจืืืืืืื ื ืึทื ืขืืขืืขื ื.
- ืืืขืจืืื ืืืืขืจ ืื ืืขืจืืืึทืื ืคืื ืงืื ืืื ืื ืกืืจ ืืื ืืขื ืขื ืืืืกืืขืฉืืขืื.
ืื ืกืืืคึผืืึทืกื ืืึทืื ืกืืจืืงืืืจ ืืืึธืก ืงืขื ืขื ืืืืื ืื ืกืืจืืืขื ื ืึทืืข ืคืืจ ืึทืคึผืขืจืืืฉืึทื ื ืืื ืึท ืืืื ืขืจื ืืืื ืืืื. ืืขืืขืจ ืคืื ืืืึทื ื ืึธืืื ืจืขืคึผืจืึทืืขื ืฅ ืึท ืฉืืืกื ืืืึธืก ืืืืืืืื ืื ืืื ืฆืข ืกืืืกืขื ืคืื ืงืื ื ืฉืืืกืืขื ืืื ืฆืืืื ืกืืืืจืืขืก. ืืขืจ ืืื ืงืขืจ ืึผืืื ืื ืืืึธืก ืืขื ืขื ืงืืขื ืขืจืขืจ ืืื ืื ืคืึธืืขืจ, ืืื ืื ืจืขืื ืึผืืื ืื ืืืึธืก ืืขื ืขื ืืจืขืกืขืจืข. ืืึทืงืืืขื ืึท ืึธืจืืขืจื ืืึทื ื ืคืื ืฉืืืกืืขื ืืื ืึทืืฉืืืื ืืืจื ืืืื ืขืจ ืคืื ืื ืงืืึทืกืืฉ ืืืื ืืจืึทืืืขืจืกืึทืื
ืืืื ืขืจื ืืืืืขืจ ืืึธืื ืฆืืืื ืคืื ืืึทืืขื ืืึทื ืคืืึธื ืืืึธืก ืคืึทืจืืืื ืืื ืฆื ืืืื ืขืคืขืงืืืื ืืื ืึท ืืืกืง-ืืืืืจื ืืึทืื ืกืืจืืงืืืจ. ืขืจืฉืืขืจ, ืืขืจ ืืืจืื ืคืื ืืืืขืจ ืืืึธื ืืื ืึทื ืคึผืจืืืืงืืึทืืึทื. ืขืก ืืื ืึท ืืืคึผืฉ ืจืืืืงืืจื ืคืื ืืืงืืืขื ืืืืืขืจ ืืื ืืืึธืก ืื ืืืืฅ ืคืื ืคืึทืจืฉืืืขื ืข ืฆืืืืืื ืงืขื ืขื ืืืื ืืืืขืจ ืึทื ืืขืจืฉ, ืืืึธืก ืืืืืืืืง ืืืขืจืกืึทื ื ืื ืึทืืืขืจืืืึทืืืง ืงืึทืืคึผืืขืงืกืืื ืคืื ืื ืืืื ืงืึทืืคึผืขืจื ืฆื ืืืึธืก ืืื ืืขืจืืืึทืจื. ืฆืืืืืื ืก, ืืขืจ ืืขื ืคืื ืงืจืืึทื-ืืื ืงืก ืฆืืืืฉื ื ืึธืืื ืืืคึผืจืืืืื ืืืื ืขืจื ืืืืืขืจ ืคืื ืึธืจื ืืื ืืึผืจืื. ื ืึธืขื ื ื ืึธืืื (ืืื ืืขืจืืื ืขื ืคืื ืงืึทื ืขืงืฉืึทื ื ืฆืืืืฉื ืืื) ืงืขื ืขื ืืืื ืืืื ืืืืฃ ืืึธืจ ืคืึทืจืฉืืืขื ืข ืืืขืืขืจ ืืื ืืืืจืืืึทื ืืึผืจืื. ืืื ืึท ืงืึทื ืกืึทืงืืืึทื ืก, ืืคืืื ืึท ืคึผืฉืื ืืืจืืคืึธืจ ืคืื ืขืืืขืืข ืืจืืืืงืข ื ืึธืืื ืืื ืึท ืืืื ืงืขื ืืึทืจืคื ืึท ืืึทืืืื ืฆื ืึท ืคืึทืจืืืืึทืืืขื ื ืืืขืจ ืคืื ืืืขืืขืจ. ืืึธืก ืืื ืึท ืคึผืจืึธืืืขื ืืคืืื ืืืขื ืืืจ ืจืขืื ืืืขืื ืื ืืคืขืงืืืืื ืึทืก ืคืื ืืืื ืขืจื ืืืืืขืจ ืืื ืึท ืืื-ืืืงืึธืจื ืืึทืื ืกืืจืืงืืืจ, ืืืืึทื ืงืขืกืืืืขืจ ืจืึธืืืืืืื ื ืืืขืืขืจ ืืื ืื ืคึผืจืึทืกืขืกืขืจ ืงืึทืฉ ืืื ื ืืฉื ืึท ืืืืืง ืคืึทืจืืขื ืืื. ืืืขื ืขืก ืงืืื ืฆื ืึธืคื ืจืืืจืืืืื ื ืืืขืืขืจ ืคึฟืึทืจืืื ืื ืืื ื ืึธืืื ืคืื ืืืกืง, ืื ืกืืืืึทืฆืืข ืืืขืจื ืืึธืจ
ื-ืืืืืขืจ, ืืืึทืขื ืืืง ืึทื ืขืืืึธืืืฆืืข ืคืื โโืืืื ืขืจื ืืืืืขืจ, ืกืึธืืืืข ืื ืคึผืจืึธืืืขืืก ืืืืขื ืึทืคืืื ืืื ืื ืคืจืืขืจืืืงืข ืคึผืึทืจืึทืืจืึทืฃ. ืขืจืฉืืขืจ, ืืื ืืขื ืขื ืืื-ืืึทืืึทื ืกืื ื. ืฆืืืืืื ืก, ืืขืืขืจ ืคืื ืืืืขืจ ื ืึธืืื ืกืคึผืืืฅ ืื ืืึทื ื ืคืื ืงืื ื ืฉืืืกืืขื ื ืืฉื ืืื 2, ืึธืืขืจ ืืื M ืึธืจืืขืจื ืกืึทืืกืขืฅ, ืืื ืื ื ืืืขืจ M ืงืขื ืืืื ืืึทื ืฅ ืืจืืืก, ืืื ืื ืกืืจ ืคืื ืขืืืขืืข ืืื ืืขืจื ืึธืืขืจ ืืคืืื ืืืืื ืืขืจ.
ืืขืจืืื:
- ืืขืืขืจ ื ืึธืืข ืึผืืื ืึท ืืจืืืก ื ืืืขืจ ืคืื ืฉืืื ืึธืจืืขืจื ืฉืืืกืืขื ืืื ืื ืืืืืขืจ ืืขื ืขื ืืืืขืจ ืงืืจืฅ.
- ืืขืจ ืืืื ืึทืงืืืืืขืจื ืื ืคืึทืจืืึธื ืคืื ืึธืจื ืคืื ืึธืจื ืืื ืืึผืจืื, ืืื ื ืฉืืืกืืขื ืืืึธืก ืืขื ืขื ื ืึธืขื ื ืืื ืืืขืจื ืืขื ืขื ืืขืืืืื ืืืขื ืืืื ืืขืื ืืขืืขืจ ืื ืืขืจืขืจ ืืืืฃ ืืขืจ ืืขืืืืงืขืจ ืึธืืขืจ ืืจืืืืงืข ื ืึธืืื.
- ืื ื ืืืขืจ ืคืื ืืืจืืคืึธืจ ื ืึธืืื ืืืขื ืืจืืคื ืืืขืจื ืึท ืืืื ืืขืฉืึทืก ืึท ืืืื ืึธืคึผืขืจืึทืฆืืข ืืื ืจืืืืกื.
- ืื ื ืืืขืจ ืคืื ืฆืื ื ืึธืืื ืืืืขื ืขื ืืขืฉืึทืก ืงืืื ืงืืืืจืื ืืื ืจืืืืกื, ืืืืึทื ืืขืืขืจ ืคืื ืืื ืฉืืื ืึผืืื ืึท ืืจืืืก ื ืืืขืจ ืคืื ืึธืจืืขืจื ืฉืืืกืืขื.
LMDB ื ืืฆื ืึท ืืืขืจืืืืฉืึทื ืคืื ืื ื-ืืืื ืืขืจืืคื ืึท ื + ืืืื ืฆื ืงืจืึธื ืืึทืื. ืื ืืืึทืืจืึทืืข ืืืืื ืืืืืื ืื ืืจืื ืืืืคึผืก ืคืื ื ืึธืืื ืืืึธืก ืขืงืกืืกืืืจื ืืื ืขืก:
- ืืื ืืขืจ ืฉืคึผืืฅ ืืื ืืขืจ ืืืึธืจืฆื. ืขืก ืืึทืืืจืืึทืืืืืื ืืึธืจื ืืฉื ืืขืจ ืืื ืืขืจ ืืึทืืจืืฃ ืคืื ืึท ืืึทืืึทืืืืก ืืื ืึท ืืืขืจืืึทืืก. ืืื ืืืื LMDB ืืืึทืฉืคึผืื, ืืืจ ืงืขื ืขื ืืึทืื ืขืืืขืืข ืืึทืืึทืืืืกืื ืืืึธืก ืืืืื ืึท ืืึทืคึผื ืืืืจืืืึทื ืึทืืจืขืก ืคึผืืึทืฅ. ืืขืืขืจ ืคืื ืืื ืืืืื ืืื ืคืื ืืืึทื ืืืืื ืืืึธืจืฆื.
- ืืื ืื ืืึธืืึทืกื ืืืจืื ืืขื ืขื ืื ืืืขืืขืจ. ืืื ืืื ืืืืื ืืื ืึทื ืืืึทืืื ืื ืฉืืืกื-ืืืขืจื ืคึผืขืจื ืกืืึธืจื ืืื ืื ืืึทืืึทืืืืก. ืืืจื ืืขื ืืืขื, ืืึธืก ืืื ืื ืืืืื ืืจืืืงืืื ืคืื ื+-ืืืืืขืจ. ืืืื ืึท ืจืขืืืืขืจ ื-ืืืื ืกืืึธืจื ืืืขืจื ืคึผืึทืจืฅ ืืื ื ืึธืืื ืคืื ืึทืืข ืืขืืืขืืก, ืื B + ืืืขืจืืืืฉืึทื ืืื ืืืืื ืืื ืื ืืึธืืึทืกื ืืืื ืขืจ. ื ืึธื ืคืึทืจืคืขืกืืืงื ืืขื ืคืึทืงื, ืืืจ ืืืขืื ืืืืืืขืจ ืจืืคื ืื ืกืืืืืคึผืข ืคืื โโืืขื ืืืื ืืขื ืืฆื ืืื LMDB ืคืฉืื ืึท ื-ืืืื.
- ืฆืืืืฉื ืื ืืืึธืจืฆื ืืื ืืืขืืขืจ ืขืก ืืขื ืขื 0 ืึธืืขืจ ืืขืจ ืืขืื ืืฉ ืืขืืืขืืก ืืื ื ืึทืืืืืึทืฆืืข (ืฆืืืืึทื) ื ืึธืืื. ืืืืขืจ ืึทืจืืขื ืืื ืฆื ืืืืื ืื ืกืึธืจืืขื ืืึทื ื ืคืื ืฉืืืกืืขื ืฆืืืืฉื ืื ืืืขืืขืจ.
ืคืืืืงืื, ื ืึธืืื ืืขื ืขื ืืืึทืงืก ืคืื ืืึผืจืื ืคืื ืึท ืคึผืจืืืืืขืจืืื ื ืืขื ื. ืืืืขืจ ืืจืืืก ืืื ืึท ืงืืืคื ืคืื ืื ืืจืืืก ืคืื ืืึผืจืื ืืืขืืขืจ ืืื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื, ืืืึธืก ืืืจ ืืืกืงืึทืกื ืืืืื. ืื ื ืึธืืข ืกืืจืืงืืืจ ืืื ืืขืืืืื ืืื ืื. ืืขืจ ืืขืืขืจ ืึผืืื ืืขืืึท ืืื ืคึฟืึธืจืืึทืฆืืข, ืื ืืขืจืกื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืืื ืื ืืฉืขืงืงืกืื. ืืืืึทืืขืจ ืงืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืึธืคืกืขืฅ ืืื ืืืึธืก ืื ืกืขืื ืืื ืืึทืื ืืขื ืขื ืืืื. ืื ืืึทืื ืงืขื ืขื ืืืื ืึธืืขืจ ืฉืืืกืืขื, ืืืื ืืืจ ืืขื ืขื ืืขืจืขืื ืืืขืื ื ืึทืืืืืึทืฆืืข ื ืึธืืื, ืึธืืขืจ ืืึทื ืฅ ืฉืืืกื-ืืืขืจื ืคึผืขืจื ืืื ืื ืคืึทื ืคืื ืืืขืืขืจ. ืืืจ ืงืขื ืขื ืืืืขื ืขื ืืขืจ ืืืขืื ืื ืกืืจืืงืืืจ ืคืื ืืืขืืขืจ ืืื ืื ืึทืจืืขื
ื ืืืืขื ืืืืก ืืืจ ืืืื ืืืืื ืืื ืืขื ืืื ืขืจืืืืขื ืืื ืืืื ืคืื ืืืื ื ืึธืืื, ืืืขืื ืืืจ ืืืืืืขืจ ืคืืจืืจืขืื ืืขื LMDB ื-ืืืื ืืืืฃ ื ืคืืจืืืื ืคืืืขืจื ืืืคื ืืื ืืขืจ ืืืืืืขืจืืืงืขืจ ืคืืจื.
ืืืขืืขืจ ืืื ื ืึธืืื ืืขื ืขื ืืืื ืกืึทืงืืืขื ืืฉืึทืื ืืืืฃ ืืืกืง. ืืขืืขืจ ืืขืฆืืืื ืืืขืืขืจ ืืขื ืขื ืืืื ืืื ืื ืกืืฃ ืคืื ืืขืจ ืืขืงืข. ืื ืึทืืื ืืขืจืืคืขื ืข ืืขืืึท ืืืึทื ืึผืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืึธืคืกืขืฅ ืืืจื ืืืึธืก ืื ืจืืฅ ืคืื ืึทืืข ืืืืืขืจ ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื. ืืืขื ืขืคื ืึท ืืขืงืข, LMDB ืกืงืึทื ื ืื ืืขืงืข ืืืึทื ืืืจื ืืืึทื ืคืื ืกืืฃ ืฆื ืึธื ืืืื ืืื ืืืื ืคืื ืึท ืืืืืืง ืืขืืึท ืืืึทื ืืื ืืืจื ืขืก ืืขืคืื ื ืืืืืกืืื ื ืืึทืืึทืืืืกืื.
ืืืฆื, ืืื ืึท ืืขืืึทื ืง ืคืื ืื ืืึทืืืฉืืงืึทื ืืื ืืฉืืืืช ืกืืจืืงืืืจ ืคืื ืืึทืื ืึธืจืืึทื ืืืึทืฆืืข, ืืืจ ืงืขื ืขื ืคืึธืจืืขืฆื ืฆื ืืึทืืจืึทืืื ืื ืืจืื ืืืึทื ืคืื LMDB. ืขืก ืืื ืืื ืืืื ืืืืฃ ืึทื ืึทืืข ืกืืึธืจืืืืฉ ืืึธืืืคืืงืึทืืืึธื ืก ืคืึทืื ืืจืึทื ืกืึทืงืืืึธื ืึทืืื ืืื ืืื ืืคืืขืืื ืืขืจืืงืืื ืคืื ืืขืืขืจ ืื ืืขืจืขืจ, โโืืขืื ืื ืืึทืืึทืืืืก ืืื ืึท ืืึทื ืฅ ืื ืคืึทืจืืึธื ืคืื ืืืืืืืืขืจืกืืึธื.
3.3. ืืืืื #3. ืงืึธืคึผื-ืืืืฃ-ืฉืจืืึทืื
ืขืืืขืืข ื-ืืืื ืึทืคึผืขืจืืืฉืึทื ื ืึทืจืืึทื ืฆืืขื ืึท ืกืขืจืืข ืคืื โโืขื ืืขืจืื ืืขื ืฆื ืืืึทื ื ืึธืืื. ืืืื ืืืืฉืคึผืื ืืื ืฆื ืืืืื ืึท ื ืืึทืข ืฉืืืกื ืฆื ืึท ื ืึธืืข ืืืึธืก ืืื ืฉืืื ืจืืืฉื ืืืื ืืึทืงืกืืืื ืงืึทืคึผืึทืฆืืืขื. ืืื ืืขื ืคืึทื, ืขืก ืืื ื ืืืืืง, ืขืจืฉืืขืจ, ืฆื ืฉืคึผืึทืืื ืื ื ืึธืืข ืืื ืฆืืืื, ืืื ืฆืืืืืื ืก, ืฆื ืืืืื ืึท ืืื ืง ืฆื ืื ื ืืึทืข ืืึทืืื ื ืงืื ื ื ืึธืืข ืืื ืืืื ืคืึธืืขืจ. ืืขื ืคึผืจืึธืฆืขืืืจ ืืื ืคึผืึทืืขื ืืฉืึทืื ืืืืขืจ ืืขืคืขืจืืขื. ืืืื ืคึฟืึทืจ ืขืืืขืืข ืกืืื (ืงืจืึทื, ืืึทืื ืึทืืืืืืฉ, ืืื"ื ื) ืืืืื ืืืื ืคืื ืื ืขื ืืขืจืื ืืขื ืคืื ืื ืกืขืจืืข ืคืึทืื, ืืขืจ ืืืื ืืืขื ืืืืึทืื ืืื ืึท ืกืชืืจื ืฉืืึทื.
ืืืื ืืจืืืืฆืืื ืขืื ืืืืืื ื ืคึฟืึทืจ ืืืื ืึท ืืึทืืึทืืืืก ืฉืืื ืืึธืืขืจืึทื ื ืืื ืฆื ืืืืื ืึทื ื ืึธื ืืืืฃ-ืืืกืง ืืึทืื ืกืืจืืงืืืจ ืืืืึทืืขืจ ืฆื ืื ื-ืืืื - ืึท ืืจืึทื ืกืึทืงืืืึธื ืงืืึธืฅ, ืืืื ืืืงืื ื ืืื ืึท ืฉืจืืึทืื ืคืึธืจืืืก ืงืืึธืฅ (WAL). ืขืก ืืื ืึท ืืขืงืข ืืื ืื ืกืืฃ ืคืื ืืืึธืก ืื ืืืขื ืึธืคึผืขืจืึทืฆืืข ืืื ืืขืฉืจืืื ืฉืืจืขื ื ืืืืืขืจ ืืึทืืึทืคืืืื ื ืื ื-ืืืื ืืื. ืืืื, ืืืื ืืึทืื ืงืึธืจืืคึผืฆืืข ืืื ืืืืขืงืืึทื ืืขืฉืึทืก ืืื-ืืืึทืื ืึธืกืืก, ืื ืืึทืืึทืืึทืกืข ืงืึทื ืกืึทืืฅ ืื ืงืืึธืฅ ืฆื ืฉืืขืื ืืื ืืื ืกืืจ.
LMDB ืืื ืืืืกืืขืจืืืืืื ืึท ืึทื ืืขืจืฉ ืืืคึฟื ืืื ืึท ืฉืืื ืืึธืืขืจืึทื ืฅ ืืขืงืึทื ืืืึทื, ืืขืจืืคึฟื ืงืึธืคึผืืข-ืืืืฃ-ืฉืจืืืื. ืืืื ืขืกืึทื ืก ืืื ืึทื ืึทื ืฉืืึธื ืคืื ืึทืคึผืืืืืื ื ืืึทืื ืืืืฃ ืึท ืืืืืกืืื ื ืืืึทื, ืขืก ืขืจืฉืืขืจ ืงืึทืคึผืื ืขืก ืืขืืึทืืจืข ืืื ืืึทืื ืึทืืข ืืึธืืืคืืงืึทืืืึธื ืก ืืื ืื ืงืึธืคึผืืข.
ืืขืจื ืึธื, ืืื ืกืืจ ืคึฟืึทืจ ืืขืจืืืึทื ืืืงื ืืึทืื ืฆื ืืืื ืืืจืขืืืืื, ืขืก ืืื ื ืืืืืง ืฆื ืืืืฉื ืื ืืื ืง ืฆื ืื ื ืึธืืข ืืืึธืก ืืื ืืขืืืืจื ืงืจืึทื ื ืืื ืืืื ืคืึธืืขืจ ื ืึธืืข. ืืื ื ืขืก ืืึทืจืฃ ืืืื ืืืื ืืึธืืืคืืฆืืจื ืคึฟืึทืจ ืืขื, ืขืก ืืื ืืืื ืงืึทืคึผืื ืคืจืืขืจ. ืืขืจ ืคึผืจืึธืฆืขืก ืืืื ืจืขืงืืจืกืืืืขืื ืึทืืข ืื ืืืขื ืฆื ืืขืจ ืืืึธืจืฆื. ืื ืืขืฆืืข ืืึทื ืฆื ืืืืฉื ืืื ืื ืืึทืื ืืืืฃ ืื ืืขืืึท ืืืึทื
ืืืื ืคึผืืืฆืืื ื ืืขืจ ืคึผืจืึธืฆืขืก ืงืจืึทืฉืื ืืขืฉืึทืก ืื ืืขืจืืืึทื ืืืงื ืคึผืจืึธืฆืขืืืจ, ืึธืืขืจ ืึท ื ืืึทืข ืืขืืึท ืืืึทื ืืืขื ื ืืฉื ืืืื ืืืฉืืคื, ืึธืืขืจ ืขืก ืืืขื ื ืืฉื ืืืื ืืขืฉืจืืื ืืึธืจ ืฆื ืืืกืง, ืืื ืืืื ืืฉืขืงืกืื ืืืขื ืืืื ืคืึทืืฉ. ืืื ืืืื ืขืจ ืคืื ืื ืฆืืืื ืงืึทืกืขืก, ื ืืึทืข ืืืขืืขืจ ืืืขื ืืืื ืึทื ืจืืืฉืึทืืึทื, ืึธืืขืจ ืึทืื ืึธื ืขืก ืืืขื ื ืืฉื ืืืื ืึทืคืขืงืืึทื. ืืึธืก ืืืืืึทื ืืืฅ ืื ื ืืื ืคึฟืึทืจ LMDB ืฆื ืฉืจืืึทืื ืคืึธืจืืืก ืงืืึธืฅ ืฆื ืืึทืืื ืืึทืื ืงืึธื ืกืืกืืขื ืกื. ืื ืคืึทืงืืึธ, ืื ืกืืจืืงืืืจ ืคืื ืืึทืื ืกืืึธืจืืืืฉ ืืืืฃ ืื ืืืกืง ืืืกืงืจืืืื ืืืืื ื ืขืื ืกืืืืึทืืืืื ืืึทืกืื ืืืืฃ ืืืึทื ืคืื ืงืฆืืข. ืืขืจ ืึทืืืขืง ืคืื ืึท ืืงืกืคึผืืืกืึทื ืืจืึทื ืกืึทืงืืืึธื ืงืืึธืฅ ืืื ืืืื ืขืจ ืคืื ืื ืคึฟืขืึดืงืืืื ืคืื LMDB ืืืึธืก ืืื ืืืื ืืึทืื ืืืืขื ืขื ืืืืงืืึทื
ืืขืจ ืจืืืึทืืืื ื ืคึผืืึทื, ืืขืจืืคึฟื ืฆืืืขืื-ืืืืื ื-ืืืื, ืืื ืืขืืืืื ืืืขื ืืจืึทื ืกืึทืงืืืึธื ืืคืืขืืื ืืขืจืืงืืื ืืื ืืืืื-ืืืขืจืกืืข. ืืื LMDB, ืืขืืขืจ ืึธืคึฟื ืืจืึทื ืกืึทืงืืืึธื ืืื ืคืืจืืื ืื ืืื ืื ืืขืจืืืืึทื ืืึทืืืึทืืืง ืืืื ืืืึธืจืฆื. ืืื ืื ืืจืึทื ืกืึทืงืืืึธื ืืื ืืขืขื ืืืงื, ืื ืืืขืืขืจ ืคืื ืืขื ืืืื ืคึฟืึทืจืืื ืื ืืื ืืื ืืืขื ืงืืื ืืึธื ืืืื ืืขืืืื ืึธืืขืจ ืจืืืื ืคึฟืึทืจ ื ืืึทืข ืืืขืจืกืืขืก ืคืื ืื ืืึทืื, ืึทืืื ืืืจ ืงืขื ืขื ืึทืจืืขืื ืืื ืืึทื ื ืืื ืืืจ ืืืืื ืืื ืคึผืื ืงื ืื ืกืืื ืคืื ืืึทืื ืืืึธืก ืืื ืืขืืืขื ืืึทืืืึทืืืง ืืื ืืขืจ ืฆืืื ืื ืืจืึทื ืกืึทืงืืืึธื ืืื ืืขืขืคื ื, ืืคืืื ืืืื ืื ืกืืึธืจืืืืฉ ืืืื ืฆื ืืืื ืึทืงืืืืืื ืืขืจืืืึทื ืืืงื ืืื ืืขื ืฆืืื. ืืึธืก ืืื ืื ืขืกืึทื ืก ืคืื ืืืืืืืืขืจืกืืึธื, ืืืื LMDB ืึทื ืืืืขืื ืืึทืื ืืงืืจ ืคึฟืึทืจ ืืื ืืืขืจ ืืืืืืืข UICollectionView
. ื ืึธื ืึธืคึผืขื ืขื ืึท ืืจืึทื ืกืึทืงืืืึธื, ืขืก ืืื ื ืื ืืึทืจืคึฟื ืฆื ืคืึทืจืืจืขืกืขืจื ืื ืืืงืึธืจื ืฉืคึผืืจ ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืจื ืืืืกืืึทืื ืคึผืึทืืคึผืื ื ืงืจืึทื ื ืืึทืื ืืื ืขืืืขืืข ืืืงืึธืจื ืกืืจืืงืืืจ, ืืืืึทื ืคืื ืืืจื ืฆื ืืืื ืืื ืงืก ืืื ืืึธืจื ืืฉื. ืืขืจ ืฉืืจืื ืืืกืืื ืืืืืืฉืื LMDB ืคืื ืืขืจ ืืขืืืืงืขืจ SQLite, ืืืึธืก ืงืขื ื ืืฉื ืืึทืจืืืขืจืืึท ืืื ืึทืืึท ืืึทื ืฅ ืืคืืขืืื ืืขืจืืงืืื. ืืืขื ืืขื ืืึธื ืืขืขืคึฟื ื ืฆืืืื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืื ืืขืฆืืข ืืื ืืืืกืืขืืขืงื ืึท ืืืืขืจ ืจืขืงืึธืจื ืืื ืืืื ืขืจ ืคืื ืืื, ืขืก ืืืขื ื ืื ืืขืจ ืืืื ืืขืืืขื ืฆื ืืึทืงืืืขื ืื ืืขืืืข ืจืขืงืึธืจื ืืื ืื ืจืืข ืจืืขื ืืืื ืขืจ.
ืื ืคืืืคึผ ืืืึทื ืคืื ืื ืืึทืืืืืข ืืื ืื ืคึผืึทืืขื ืืฉืึทืื ืืืืืืืืง ืืขืืขืจ ืงืึทื ืกืึทืืฉืึทื ืคืื ืืืืจืืืึทื ืืึผืจืื. ืืขืจ ืจืืง ืืืืืื ืืื ืื ืืึทืืึทืืืืก ืกืืจืืงืืืจ ืืืขื ืงืืงื ืืื ืืืื ืขืก ืืื ืืึทืืึทืคืืื ืกืืืืึทืืืืื ืืึทืกืื ืืื 3 ืขืคืขื ืขื ืืืืขื ืขื ืืจืึทื ืืึทืงืฉืึทื ื ืงืืงื ืืื ืคืึทืจืฉืืืขื ืข ืืืขืจืกืืขืก ืคืื ืื ืืึทืืึทืืืืก. ืืื ื LMDB ืงืขื ืขื ื ืืฉื ืจืืืื ื ืึธืืื ืืืึธืก ืืขื ืขื ืจืืืฉื ืคึฟืื ืจืืฅ ืคึฟืึทืจืืื ืื ืืื ืงืจืึทื ื ืืจืึทื ืืึทืงืฉืึทื ื, ืื ืงืจืึธื ืืื ืงืืื ืืจืืจื ืึธืืขืจ ืฆื ืึทืืึทืงืืื ืื ืื ืืขืจ ืคืขืจื ืืืึธืจืฆื ืืื ืืึผืจืื ืืื ืึทืืึธื ืืืืืขืจ ืงืืึธืื ืื ืืึทืืึทืคืืื ืืืขืืขืจ ืืื ืืขืจ ืขืก.
ืืึธ ืขืก ืืืึธืื ืืืื ื ืืฆืืง ืฆื ืฆืืจืืงืจืืคื ืื ืึธืคึผืืืืืื ื ืืืืฃ ืืึผืจืื-ืืึทืคึผื ืืขืงืขืก. ืขืก ืืืื ื ืึทื ืื ื ืึธื ืงืึทื ืกืึทืืฉืึทื ืคืื ืืืืจืืืึทื ืืืงืึธืจื ืืึธื ื ืืฉื ืืึธืจื ืืื ืื ืคืื, ืืืืึทื ืขืก ืืื ื ืืฉื ืืืืฉืืืืขืจื ืฆื ืื ืืืงืึธืจื ืฉืคึผืืจ ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื. ืึธืืขืจ, ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืขืก ืืื ืืขืืืขื ืืืืขืจืงื ืึทื ืืึธืก ืืื ืืืืขืจ ืงืึทืจื ืืื ืึทืืึทืงืืืืื ื ืขืก, ืืื ืืืจ ืงืขื ืขื ื ืืฉื, ืืื ืืืืฃ ืึท ืกืขืจืืืขืจ ืึธืืขืจ ืืขืกืงืืึทืคึผ, ืฆืืฉืืขืื ืึท LMDB ืืขืื ื ืคืื 1 ืืขืจืึทืืืืข ืืื ื ืืฉื ืืจืึทืืื ืืืขืื ืืขื ืฉืืจืื. ืืืื ืืขืืืขื, ืืืจ ืืึธื ืคึผืจืืืืจื ืฆื ืืึทืื ืื ืืขืื ืคืื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืงืืจืฅ ืืื ืืขืืืขื.
4. ืืืืืื ืื ื ืึท ืืึทืื ืกืืฉืขืืึท ืืืืฃ ืฉืคึผืืฅ ืคืื ืื ืฉืืืกื-ืืืขืจื ืึทืคึผื
ืืึธืืืจ ืึธื ืืืืื ืืื ืืืขืจ ืึทืคึผื ืึทื ืึทืืืกืืก ืืืจื ืงืืงื ืืื ืื ืืงืขืจืืืง ืึทืืกืืจืึทืงืฆืืขืก ืฆืืืขืฉืืขืื ืืืจื LMDB: ืกืืืืืืข ืืื ืืึทืืึทืืืืกืื, ืฉืืืกืืขื ืืื ืืืึทืืืขืก, ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืงืืจืกืึธืจืก.
ื ืืึทืืขืจืงืื ื ืืืขืื ืงืึธื ืืืกืืื ืืก
ืึทืืข ืคืึทื ืืงืฉืึทื ื ืืื ืื ืฆืืืืจ LMDB API ืงืขืจื ืื ืจืขืืืืืึทื ืคืื ืืืืขืจ ืึทืจืืขื ืืื ืื ืคืึธืจืขื ืคืื ืึท ืืขืืช ืงืึธื, ืึธืืขืจ ืืื ืึทืืข ืกืึทืืกืึทืงืืืึทื ื ืืืกืืื ืืก ืื ืืืขืจืึทืคืึทืงืืืฉืึทื ืืื ืืืืขืจืืขืืืคึผืขืจื ืฆืืืื ืื ืงืืจืฅืงืืื.
ืืื ืื ืคืึทืกืืึทืกื ืืืขื ืฆื ืคืึทืจืืื ืื LMDB ืฆื ืึท ืคึผืจืืืขืงื ืคึฟืึทืจ ืืึธืก ืึธืืขืจ ืืึทืงืึธืก, ืืื ืคึฟืึธืจืฉืืึธืื ืืืื ืงืึธืงืึธืึทืคึผืึธื
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 ืงืืึธืื ืึทืคึผืืึทืงืืืฉืึทื, ืืืจ ืืฉืืื ืืืฉื ืื ืคืขืืืงืืึทื ืืืึทืืืขืก ืคืื ืืืืื ืฆืืืื ืคึผืึทืจืึทืืขืืขืจืก.
ืืขืจ ืขืจืฉืืขืจ ืืื ืื ืืจืืืก ืคืื ืื ืืืืจืืืึทื ืึทืืจืขืก ืคึผืืึทืฅ ืฆื ืืืึธืก ืื ืกืืึธืจืืืืฉ ืืขืงืข ืืื ืืึทืคึผื. ืฆืื ืืึทืืืืขืจื, ืืคืืื ืืืืฃ ืืขืจ ืืขืืืืงืขืจ ืืืื, ืื ืกืคึผืขืฆืืคืืฉ ืืืขืจื ืงืขื ืขื ืืืึทืื ืืืืืืืืง ืคืื ืืืืคื ืฆื ืืืืคื. ืฆื ื ืขืืขื ืืื ืืฉืืื ืืขื ืฉืืจืื ืคืื ืืึธืก, ืื ืืึทืงืกืืืื ืกืืึธืจืืืืฉ ืืึทื ื ืืื ืืื ืึทืืืงืึทืืื ืืืืกืืขืงืืืื. ืกืืึทืจืืื ื ืคืื ืึท ืืืืขืจ ืืืขืจื, ืขืก ืืื ืกืึทืงืืืขื ืืฉืึทืื ืืึทืืื ืืื ืื ืคึฟืื ืงืฆืืข mdb_env_open
ืืืขื ื ืื ืฆืืจืืงืงืืืขื ืึท ืจืขืืืืืึทื ืึทื ืืขืจืฉ ืคืื ENOMEM
. ืืื ืืขืึธืจืืข, ืขืก ืืื ืืืื ืื ืคืึทืจืงืขืจื ืืืขื - ืขืจืฉืืขืจ ืึทืืึทืงืืื ืึท ืืื ืืืื ืคืื ืืึผืจืื ืฆื ืื ืืึธืืึธืจ, ืืื ืืขืืึธืื, ืืืขื ืขืจืจืึธืจืก ืืขื ืขื ืืืงืืืขื, MDB_MAP_FULL
, ืคืึทืจืืจืขืกืขืจื ืขืก. ืึธืืขืจ, ืขืก ืืื ืคืื ืืขืจ ืฉืืืขืจ. ืื ืกืืื ืืื ืึทื ืืขืจ ืคึผืจืึธืฆืขืืืจ ืคึฟืึทืจ ืฉืืึทืขื-ืึทืืึธืงืึทืืื ื ืืืงืึธืจื (ืจืขืืึทืคึผ) ื ืืฆื ืื ืคึฟืื ืงืฆืืข mdb_env_set_map_size
ืื ืืืึทืืึทืืืืฅ ืึทืืข ืขื ืืืืื (ืงืืจืกืึธืจืก, ืืจืึทื ืืึทืงืฉืึทื ื, ืฉืืืกืืขื ืืื ืืืึทืืืขืก) ืคืจืืขืจ ืืืงืืืขื ืคืื ืื ืืึธืืึธืจ. ืืขื ืืืขื ืืขื ืงืขืจ ืคืื ืืขืฉืขืขื ืืฉื ืืื ืืฉืืื ืืื ืื ืงืึธื ืืืขื ืคืืจื ืฆื ืืืื ืืึทืืืึทืืืง ืงืึทืืคึผืืึทืงืืืฉืึทื. ืืืื, ืึธืืขืจ, ืืืืจืืืึทื ืืึผืจืื ืืื ืืืืขืจ ืืืืืืืง ืคึฟืึทืจ ืืืจ, ืืึธืก ืงืขื ืืืื ืึท ืกืืื ืฆื ื ืขืืขื ืึท ื ืขืขื ืืขืจ ืงืืง ืืืึท ืื ืืึธืคึผื ืืืึธืก ืืื ืืืืึทื ืคืึธืจืืืก
ืื ืจืืข ืคึผืึทืจืึทืืขืืขืจ, ืื ืคืขืืืงืืึทื ืืืขืจื ืคืื ืืืึธืก ืืื ื ืืฉื ืคึผืึทืกืืง ืคึฟืึทืจ ืืื ืื, ืจืขืืืึทืืืืฅ ืื ืืึทืงืึทื ืืงืก ืคืื ืื ืฉืืจืื ื ืคืึธืืขื ืืืืขืจืงืืึทื. ืฆืื ืืึทืืืืขืจื, ืืคึผืืืช ืืึธืก 10 ืืื ืคึผืจืึธืืืขืืก ืืื ืฉืืืฆื ืคึฟืึทืจ ืคืึธืืขื ืืืืข ืกืืึธืจืืืืฉ. ืคึฟืึทืจ ืืขื ืกืืื, ืืื ืืขื ืืืึทืฉืคึผืื ืืืืื, ืื ืจืืคึผืึทืืึทืืึธืจื ืืื ืืขืขืคื ื ืืื ืื ืคืึธื MDB_NOTLS
. ืืืืกืขืจ ืืขื ืืื ืืืื ืืขืืืขื ื ืืืืืง
Databases
ืื ืืึทืืึทืืืืก ืืื ืึท ืืึทืืื ืืขืจ ื-ืืืื ืืืึทืฉืคึผืื, ืืืึธืก ืืืจ ืืืกืงืึทืกื ืืืืื. ืืืื ืขืคื ืึทืงืขืจื ืืื ืึท ืืจืึทื ืกืึทืงืืืึธื, ืืืึธืก ืงืขื ืืืื ืึท ืืืกื ืืึธืื ืข ืืื ืขืจืฉืืขืจ.
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;โโ
ืืื ืึท ืคืึทืจืืืืึทื, ืื ืงืจืึธื ืกืึธืจื ืื ืฉืืืกืืขื ืืื ืึทืกืขื ืืื ื ืกืืจ. ืืืื ืืืจ ืืึธื ื ืื ืคืึทืจืืืึทืื ืขืก ืืื ืืืื ืืืืืขื ืข, ืื ืคืขืืืงืืึทื ืืืขื ืืืื ืืขืืืืื ื, ืืืึธืก ืกืึธืจื ืืื ืืืื-ืืื-ืืืื ืืื ืืขืงืกืืงืึทืืจืึทืคืืง ืกืืจ.
ืืจืึทื ืืึทืงืฉืึทื ื
ืื ืืจืึทื ืกืึทืงืืืึธื ืกืืจืืงืืืจ ืืื ืืืกืงืจืืืื ืืื ืืขืืึทื ืืื
- ืฉืืืฆื ืึทืืข ืืงืขืจืืืง ืคึผืจืึธืคึผืขืจืืืขืก
ืืืืขืจ : ืึทืืึธืืืงืืื, ืงืึธื ืกืืกืืขื ืกื, ืืคืืขืืื ืืขืจืืงืืื ืืื ืจืืืืืึทืืืืึทืื. ืืื ืงืขื ื ืืฉื ืืขืืคึฟื ืึธืืขืจ ืืึธื ืึทื ืขืก ืืื ืึท ืืฉืืง ืืื ืืขืจืืื ืขื ืคืื ืืขืืืขืจ ืืืืฃ ืืึทืงืึธืก ืืื ืืึธืก ืืืึธืก ืืื ืืขืืืขื ืคืึทืจืคืขืกืืืงื ืืื MDBX. ืืืจ ืงืขื ืขื ืืืืขื ืขื ืืขืจ ืืื ืืืืจืขืึทืืืข . - ืืขืจ ืฆืืืึทื ื ืฆื ืืืืืืืืจืขืึทืืื ื ืืื ืืืกืงืจืืืื ืืืจื ืื "ืืืื ืฉืจืืึทืืขืจ / ืงืืืคื ืืืืขื ืขืจ" ืกืืขืืข. ืฉืจืืืืขืจืก ืืืืงืืจื ืืื ืืืื ืขืจ ืืขื ืื ืืขืจื, ืืืขืจ ืืืืงืืจื ื ืืฉื ืื ืืืืขื ืขืจ. ืืืืขื ืขืจ ืืืึธืง ื ืืฉื ืฉืจืืืืขืจืก ืึธืืขืจ ืืขืืขืจ ืื ืืขืจืขืจ.
- ืฉืืืฆื ืคึฟืึทืจ ื ืขืกืืขื ืืจืึทื ืืึทืงืฉืึทื ื.
- ืืืืืืืืขืจืกืืึธื ืฉืืืฆื.
ืืืืืืืืขืจืกืืึธื ืืื 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 ืืื ืืขื ืืืึธืก ืืึทืคึผืึทื ื.
ืืืืืืืืขืจืกืืึธื ืืจืขื ืื ืืืืขืจ ืึธื ืืขื ืขื ืคึผืขืจืงืก ืฆื ืื ืืขืื ืคืื ืึทื ืืึธืก ืืขืืืขืืึธืคึผืขืจ. ื ืืฆื ืืขื ืคืึทืจืืึธื, ืืืจ ืงืขื ืขื ืืืืื ืืื ืืขืืืืื ืืืขื ืกืืจืืืขืจื ืื ืืขืจืืืึทื ืืืงื ืงืืจืก ืคืื ืื ืืึทืื ืืงืืจ ืคึฟืึทืจ ืคืึทืจืฉืืขืื ืคืืจืืขื, ืืืืืจื ืืืืฃ ืืึทื ืืฆืขืจ ืืขืจืคืึทืจืื ื ืงืึทื ืกืืืขืจืืืฉืึทื ื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืึธืื ืืื ืื ื ืขืืขื ืึท ืฉืืจืื ืคืื ืื Mail.ru ืงืืึธืื ืึทืคึผืืึทืงืืืฉืึทื ืึทืืึท ืืื ืึทืืืึธืืึธืึทืืื ื ืืื ืืึทืื ืคืื ืื ืกืืกืืขื ืืืืืึท ืืึทืืขืจืืข. ืืื ืึท ืืื ืงืฉืจ, ืืขืจ ืงืืืขื ื ืืื ืืืืืืช ืฆื ืืืืื ืขืืืขืืข ืคืึธืืึธืก ืคึผืขืจ ืกืขืงืื ืืข ืฆื ืื ืกืขืจืืืขืจ. ืืืื ืืืจ ืืขืจืืืึทื ืืืงื ื ืึธื ืืขืืขืจ ืืจืืคืงืืคืืข UICollectionView
ืืื ืืขืืืข ืืื ืืึทืื ืืื ืื ืืึทื ืืฆืขืจ 'ืก ืืืึธืืงื, ืืืจ ืงืขื ืขื ืคืึทืจืืขืกื ืืืขืื 60 fps ืืื ืืืึทื ืกืงืจืึธืืืื ื ืืขืฉืึทืก ืืขื ืคึผืจืึธืฆืขืก. ืฆื ืคืึทืจืืืึทืื ืึธืคื ืคืึทืจืฉืืขืื ืืขืจืืืึทื ืืืงืื ืืขื, ืืืจ ืืึทืจืคึฟื ืฆื ืขืคืขืก ืืึทืืจืขื ืขืฆื ืื ืงืืจืก ืืื ืืืึธืก ืืึทืื ืขื ืืขืจืื ืืขื ืืื ืื ืึทื ืืขืจืืืืื ื UICollectionViewDataSource
.
ืืืื ืื ืืึทืืึทืืืืก ืืื ื ืืฉื ืฉืืืฆื ืืืืืืืืขืจืกืืึธื ืืื ืึทืืึทืื ืืืจ ืฆื ืึทืจืืขืื ืืืืื ืืื ืืขื ืงืจืึทื ื ืงืจืึทื ื ืฉืืึทื, ืฆื ืืึทืื ืึท ืฆืืื-ืกืืึทืืื ืืึธืืขื ืืืืื ืคืื ืื ืืึทืื, ืืืจ ืืึทืจืคึฟื ืฆื ื ืึธืืืึทืื ืขืก ืึธืืขืจ ืฆื ืขืืืขืืข ืืื-ืืืงืึธืจื ืืึทืื ืกืืจืืงืืืจ ืึธืืขืจ ืฆื ืึท ืฆืืึทืืืืืึทืืืง ืืืฉ. ืงืืื ืคืื ืื ืึทืคึผืจืึธืืืฉืื ืืื ืืืืขืจ ืืืึทืขืจ. ืืื ืืขื ืคืึทื ืคืื ืกืืึธืจืืืืฉ ืืื ืืืงืึธืจื, ืืืจ ืืึทืงืืืขื ืงืึธืก ืืื ืืึผืจืื, ืืขืคึฟืืจื ืืืจื ืกืืึธืจืื ื ืงืึทื ืกืืจืึทืงืืึทื ืึทืืืืฉืขืงืฅ, ืืื ืืื ืฆืืื, ืคึฟืึทืจืืื ืื ืืื ืืืขืจืืง ORM ืืจืึทื ืกืคืึธืจืืึทืฆืืข. ืืื ืคึฟืึทืจ ืื ืฆืืึทืืืืืึทืืืง ืืืฉ, ืืึธืก ืืื ืึท ืืคืืื ืืขืจ ืืืึทืขืจ ืคืึทืจืืขื ืืื, ืืืึธืก ืืืื ืืื ืขื ืืืืื ืืื ื ืื-ื ืืืืืืึทื ืงืึทืกืขืก.
LMDB ืก ืืืืืืืืขืจืกืืึธื ืืืืืื ื ืกืึทืืืื ืื ืคึผืจืึธืืืขื ืคืื ืืืื ืืืื ืื ื ืึท ืกืืึทืืื ืืึทืื ืืงืืจ ืืืืฃ ืึท ืืืืขืจ ืขืืขืืึทื ื ืืืขื. ืขืก ืืื ืืขื ืื ื ืึธืจ ืฆื ืขืคึฟืขื ืขื ืึท ืืจืึทื ืกืึทืงืืืึธื ืืื ืืืืืึทืืึท - ืืื ืืืจ ืคืึทืจืขื ืืืงื ืขืก, ืื ืืึทืื ืฉืืขืื ืืื ืืขืจืึทื ืืื ืฆื ืืืื ืคืึทืจืคืขืกืืืงื. ืื ืืึธืืืง ืคึฟืึทืจ ืืืื ืืขืจืืืึทื ืืืงื ืืืืงืืึทื ืืื ืืืฆื ืืขืืึทืืจืข ืืื ืื ืืขื ื ืคืื ืื ืคึผืจืขืืขื ืืืจืื ื ืฉืืืืข, ืืื ืงืืื ืึธืืืืขืจืืขื ืคืื ืืึทืืืึทืืืง ืจืขืกืืจืกื.
ืงืืจืกืึธืจืก
ืงืืจืกืึธืจืก ืฆืืฉืืขืื ืึท ืืขืงืึทื ืืืึทื ืคึฟืึทืจ ืึธืจืืขืจืื ืืืขืจืืืืื ื ืืืืขืจ ืฉืืืกื-ืืืขืจื ืคึผืขืจื ืืืจื ื-ืืืื ืืจืึทืืืขืจืกืึทื. ืึธื ืืื, ืขืก ืืืึธืื ืืืื ืืืืืขืืืขื ืฆื ืืคืขืงืืืืืื ืืึธืืขื ืื ืืืฉื ืืื ืื ืืึทืืึทืืืืก, ืืืึธืก ืืืจ ืืืฆื ืืืขื ืื ืฆื.
4.2. ืืืฉ ืืึธืืขืืื ื
ืื ืคืึทืจืืึธื ืคืื ืฉืืืกื ืึธืจืืขืจืื ื ืึทืืึทืื ืืืจ ืฆื ืืืืขื ืึท ืืืื-ืืืจืื ืึทืืกืืจืึทืงืฆืืข ืึทืืึท ืืื ืึท ืืืฉ ืืืืฃ ืฉืคึผืืฅ ืคืื ืืงืขืจืืืง ืึทืืกืืจืึทืงืฆืืขืก. ืืึธืืืจ ืืึทืืจืึทืืื ืืขื ืคึผืจืึธืฆืขืก ืืื ืื ืืืืฉืคึผืื ืคืื ืื ืืืืคึผื ืืืฉ ืคืื ืึท ืืืึธืืงื ืงืืืขื ื, ืืืึธืก ืงืึทืฉ ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืึทืืข ืื ืืขืงืขืก ืืื ืคืึธืืืขืจืก ืคืื ืื ืืึทื ืืฆืขืจ.
ืืืฉ ืกืืฉืขืืึท
ืืืื ืขืจ ืคืื ืื ืคึผืจืึธืกื ืกืื ืขืจืืึธืื ืคึฟืึทืจ ืืืึธืก ืึท ืืืฉ ืกืืจืืงืืืจ ืืื ืึท ืืขืงืข ืืืื ืืึธื ืืืื ืืืืืขืจื ืืื ืื ืกืขืืขืงืฆืืข ืคืื โโืึทืืข ืขืืขืืขื ืื ืืืื ืืื ืึท ืืขืืขืื ืืืขืืืืืึทืืขืจ. ื ืืื ืืึทืื ืึธืจืืึทื ืืืึทืฆืืข ืืึธืืขื ืคึฟืึทืจ ืขืคืขืงืืืื ืคึฟืจืืื ืคืื ืืขื ืืื
ืื ืืืื ืืื ืื ืืืืืื ืืื, ืืืืืจื ืืืืฃ ืื ืึทืจืืขื ืืื ืืึทื ื, ืึท ืคืึทืจืืจืขืืื ื ืคืื ืฉืืืกืืขื ืืื ืื ืคืึธืจืขื ืคืื ืึท ืืืื ืืขื ืืข ืงืขื ืงืืงื ืืื. ืื ืืืืขืก ืืื ืื ืืืืขื ืืืคืืฆืืจื ืคืื ืื ืขืืืขืจื ืืืขืืืืืึทืืขืจ (ืจืืื) ืืขื ืขื ืืขืฉืืขืื ืขืจืฉืืขืจ, ืืขืืึธืื ืืื ืืขื ืืืคึผ (ืืจืื) ืืื ืืื ืื ืขืง ืืื ืื ื ืึธืืขื (ืืืื). ืืื ืืขื ืขื ืืืืกืืขืฉืืขืื ืืืจื ืื ืคืขืืืงืืึทื ืืืื ืคืึทืจืืืืึทื ืืื ืืขืงืกืืงืึทืืจืึทืคืืงืึทื ืกืืจ, ืืื ืืขื ืขื ืึธืจืืขืจื ืืื ืื ืคืืจืืื ืื ืฉืืืืืขืจ. ืกืึทืงืืืขื ืืฉืึทืื ืืืจืืคืึธืจ ืฉืืืกืืขื ืืื ืืขืจ ืืขืืืืงืขืจ ืจืืื ืคึผืจืขืคืืงืก ืืื ืืื ืื ืืืืขืจ ืคึฟืึทืจืืื ืื ืืืึทืืืขืก ืืื ืื ืกืืจ ืืื ืืึธื ืืืื ืืขืืืืื ืืื ืื ืืึทื ืืฆืขืจ ืฆืืืื ื (ืืืืฃ ืื ืจืขืื), ืึธื ืจืืงืืืืืจืื ื ืงืืื ื ืึธื ื ืึธื ืคึผืจืึทืกืขืกืื ื.
ืกืืจืืึทืืืืื ื ืฉืืืกืืขื ืืื ืืืึทืืืขืก
ืคืืืข ืืขืืืึธืืก ืคึฟืึทืจ ืกืืจืืึทืืืืื ื ืึทืืืืฉืขืงืฅ ืืขื ืขื ืื ืืืขื ืืึทื ืืื ืืขืจ ืืืขืื. ืืืืืืื ืืืจ ืืืื ื ืืฉื ืืขืืื ืงืืื ืื ืืขืจืข ืคืืืขืจืื ื ืืืืฅ ืื ืฉื ืขืืงืืื, ืืืื ืืืจ ืคืืจ ืืื ืืืืกืืขืงืืืื ืื ืฉื ืขืืกืืข ืืขืืืืืข - ื ืกืืืจื ืืืงืึธืจื ืคืืจื ืืืขื ืืืจื ืื ืืื ืกืืื ืฆื ืคืื ืื ืฉืคืจืื ืกืืจืืงืืืจ 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, ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืึท ืคืึทื ืืึทืกืืืฉ ืกืืืืึทืฆืืข ืืืจื ืืึธืก ืกืืึทื ืืึทืจืืก - ื ืืฆื ืืืืื ืึธื ืืืืื ืืึผืจืื ืฆื ืึทืจืืขืื ืืื ืืึทืื ืืืืฃ ืื ืืื ืฆืข ืืจื ืคืื ืื ื ืขืฅ ืฆื ืื ืืืกืง!
ืึธืจืืขืจืื ื ืฉืืืกืืขื ืืื ืึท ืืืื ืขืจื ืงืึธืืคึผืึทืจืึทืืึธืจ
ืืขืจ ืฉืืืกื ืกืืจ ืฉืืืืืช ืืื ืกืคึผืขืกืืคืืขื ืืืจื ืึท ืกืคึผืขืฆืืขื ืคึฟืื ืงืฆืืข ืืขืจืืคื ืึท ืคืึทืจืืืืึทื. ืืื ื ืืขืจ ืืึธืืึธืจ ืืืืืกื ืืึธืจื ืืฉื ืืืขืื ืื ืกืขืืึทื ืืืงืก ืคืื ืื ืืืืขืก ืืื ืึทื ืืืึทืืื, ืื ืคืขืืืงืืึทื ืคืึทืจืืืืึทื ืืื ืงืืื ืืจืืจื ืึธืืขืจ ืฆื ืฆืืืืืื ืื ืฉืืืกืืขื ืืื ืืขืงืกืืงืึทืืจืึทืคืืง ืกืืจ, ืจืืืึธืจืืื ื ืฆื ืึท ืืืืข-ืืื-ืืืืข ืคืึทืจืืืืึทื. ื ืืฆื ืขืก ืฆื ืึธืจืืึทื ืืืืจื ืกืืจืึทืงืืฉืขืจื ืืื ืขื ืืขื ืฆื ืกืืจืืฉืงืข ืืื ืึท ืืฉืึทืคึผืื ื ืืึทืง. ืึธืืขืจ, ืืื ืคึผืฉืื ืงืึทืกืขืก ืืื ืืขืคึฟืื ืขื ืืขื ืืืคึฟื ืคึผืึทืกืืง. ืื ืึธืืืขืจื ืึทืืืื ืืื ืืืกืงืจืืืื ืืื ืื, ืึธืืขืจ ืืึธ ืืื ืืืขื ืืึทืืขืจืงื ืึท ืคึผืึธืจ ืคืื ืจืืืงืก ืฆืขืืืึธืจืคื ืืืืฃ ืืขื ืืจื.
ืืขืจ ืขืจืฉืืขืจ ืืึทื ืฆื ืืขืืขื ืงืขื ืืื ืื ืืืงืึธืจื ืคืึทืจืืจืขืืื ื ืคืื ืคึผืจืืืืืืื ืืึทืื ืืืืคึผืก. ืืืื, ืืืืฃ ืึทืืข ืขืคึผื ืืขืืืืกืขืก, ืื ืืึทืืืฉืขืจ ืืืขืจืืึทืืึทืื ืืขื ืขื ืกืืึธืจื ืืื ืืขื ืคึฟืึธืจืืึทื
// 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โ
};
ืึธืืขืจ, ืขืก ืืขื ืขื ืฆืืื ืืืขื ืคืึธืจืฉืืขืืื ื ื ืึธื ืขื ืื ืื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืขื ืฉืคึผืึธืจื ืืขืืึท ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืืขืงืข ืกืืจืืงืืืจ ืคืื ืึท ืืึทื ืืฆืขืจ ืืืึธืืงื, ืืืจ ื ืืฆื ืื ืืขืืืข ืืึผืจืื ืืึทืืคึผ ืคืื ืึทืืืืฉืขืงืฅ. ืืขืจ ืืืืืคึผืื ืงื ืคืื ืืขืจ ืึทืจืืขื ืคืื ืืืฉืขื ืขืจืืืืื ื ืึท ืกืืจืืึทืืืืขื ืคืึทืจืืจืขืืื ื ืคืื ืืื ืืื ืืขืจ ืคืึทืงื ืึทื ืื ืืกืืืืช ืคืื ืึท ืืืขืืืืืึทืืขืจ ืืขื ืขื ืืึธืืขืืขื ืืืจื ืึท ืืืืขืจืึทืจืงื ืคืื ืงืืืกื.
ืฆื ืื ืกืืจืืืขื ื ืขืก ืืื ืื 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 ืืืึธืก ืืื ืืืืขืจ ืืืื ืืึทืื ืืืืขื ืขื ืืืืงืืึทื ืึผืืขื ืคืจืื. ืืจืึธืฅ ืึทืืข ืื ืฉืืื ืงืืื ืคืื ืืขื ืฆืืืึทื ื, ืขืก ืืื ื ืืืืืง ืฆื ืืขืืขื ืงืขื ืขืืืขืืข ืคึฟืขืึดืงืืืื ืคืืจืืื ืื ืืื ืืื.
- ืคึฟืึทืจ ืึท ืืืืื ืืจืึทื ืกืึทืงืืืึธื, ืืขืจ ืืืึทืื ืฆื ืื ืืืขืจื ืกืืจืืงืืืจ ืืื ืืขืจืึทื ืืื ืฆื ืืืืืื ืืืืืืง ืืืืื ืืื ืื ืืจืึทื ืกืึทืงืืืึธื ืืื ืคืืจืืืื. ืืื ืคืจืืขืจ ืืืืขืจืงื, ืื ื-ืืืื ืืืขืืขืจ ืืืืฃ ืืืึธืก ืึท ืืืืคืขืฅ ืืื ืืืื, ืืึทื ืง ืฆื ืื ืงืึธืคึผืืข-ืืืืฃ-ืฉืจืืื ืคึผืจืื ืฆืืคึผ, ืืืืืื ืึทื ืืฉืืื ืืืฉื ืึทืืื ืืึทื ื ืืื ืืื ืืขื ืขื ืจืขืคืขืจืขื ืกื ืืืจื ืืืึท ืืื ืืกืืขืจ ืืืื ืืจืึทื ืกืึทืงืืืึธื. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืื ืืึทืื ืืื ืื ืืขืฆืืข ืืจืึทื ืกืึทืงืืืึธื ืคึฟืึทืจืืื ืื ืืื ืืื ืงืึทืืคึผืืืฅ, ืื ืืืขืืขืจ ืงืขื ืขื ืืืื ืจืืืื ืคึฟืึทืจ ื ืืึทืข ืืึทืื. ืืืื ืขืก ืืื ื ืืืืืง ืคึฟืึทืจ ืึทืืืืฉืขืงืฅ ืฆื ืืืืึทืื ืืขืื ืื ืืจืึทื ืกืึทืงืืืึธื ืืืึธืก ืืืฉืขื ืขืจืืืืึทื ืืื, ืืื ื ืึธื ืืึธืื ืฆื ืืืื ืงืึทืคึผืื.
- ืคึฟืึทืจ ืึท ืืืืขื ืขื ืืจืึทื ืกืึทืงืืืึธื, ืืขืจ ืืืึทืื ืฆื ืื ืจืืืึทืืืื ื ืืืขืจื ืกืืจืืงืืืจ ืืืขื ืืืื ืืืืืืง ืืืืื ืืื ืืขืจ ืขืจืฉืืขืจ ืืึทืืึทืคืืืื ื ืคึผืจืึธืฆืขืืืจ (ืฉืจืืืื ืึธืืขืจ ืืืกืืขืงื ืืึทืื).
- ืืึธืืฉ ืื ืกืืจืืงืืืจ
NodeValue
ื ืื ืคืื-ืคืืขืืืฉื, ืึธืืขืจ ืืจืืืืขื (ืืขื ืกืึทืืกืขืงืฉืึทื "ืึธืจืืขืจืื ื ืงืื ื ืืฆื ืึท ืคืื ืืจืืืกื ืืืง ืงืึทืืคึผืขืจืึทืืึธืจ"), ืืืจ ืงืขื ืขื ืืขืฉืึธืืขื ืึทืงืกืขืก ืื ืคืขืืืขืจ ืืืจื ืื ืืืึทืื. ืื ืืืืคึผื ืืึทื ืืื ื ืืฉื ืฆื ืืขืจืงืขื ืขื ืขืก! - ืืื ืงืืื ืฆืืฉืืื ืื ืืึธื ืื ืกืืจืืงืืืจ ืืืื ืืึทืืึทืคืืื ืืืจื ืื ืืืงืืืขื ืืืึทืื. ืึทืืข ืขื ืืขืจืื ืืขื ืืืื ืืืื ืืขืืืื ืืืืื ืืืจื ืืขื ืืืคึฟื
mdb_put
. ืึธืืขืจ, ืงืืื ืขื ืื ืืื ืฉืืืขืจ ืืืจ ืืืืื ืฆื ืืึธื ืืึธืก, ืขืก ืืืขื ื ืื ืืืื ืืขืืืขื, ืืืืึทื ืื ืืึผืจืื ืืขืื ื ืืื ืื ืกืืจืืงืืืจ ืืื ืืืื ืืื ืืึทืคึผื ืืื ืืืืื ืืืืขื ืขื ืืึธืืข. - ืจืืืึทืคึผ ืึท ืืขืงืข ืฆื ืืขื ืคึผืจืึธืฆืขืก ืึทืืจืขืก ืคึผืืึทืฅ ืคึฟืึทืจ, ืืืฉื, ืฆื ืคืึทืจืืจืขืกืขืจื ืื ืืึทืงืกืืืื ืกืืึธืจืืืืฉ ืืจืืืก ืืื ืื ืคืื ืงืฆืืข
mdb_env_set_map_size
ืืึธืจ ืื ืืืึทืืึทืืืืฅ ืึทืืข ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืคึฟืึทืจืืื ืืขื ืข ืขื ืืืืื ืืื ืึทืืืขืืืื ืืื ืคึผืืื ืืขืจื ืฆื ืืืืขืจ ืึทืืืืฉืขืงืฅ ืืื ืืึทืืื ืืขืจ.
ืฆืื ืกืืฃ, ืื ืื ืืขืจ ืฉืืจืื ืืื ืึทืืื ืื ืกืืืืึทืก ืึทื ืจืืืืืืื ื ืืืึทื ืขืกืึทื ืก ืืื ื ืืฉื ืคึผืึทืกืืง ืืื ืืืืื ืื ืื ืืขืจ ืคึผืึทืจืึทืืจืึทืฃ. ืืื ืืขื ืงืึทืคึผืืื ืืืขืื ืืขื ื-ืืืื ืืึธื ืืื ืืขืืขืื ืึท ืืืึทืืจืึทืืข ืืื ืืืจืข ืืืขืืขืจ ืืขื ืขื ืขืจืืื ืืืฉื ืืื ืืึผืจืื. ืขืก ืืืื ืคืื ืืขื ืึทื ืื ืึทืืจืขืก ืคืื ืื ืึธื ืืืื ืคืื ืื ืืึทืคืขืจ ืืื ืกืืจืืึทืืืืขื ืืึทืื ืงืขื ืขื ืืืื ืืขืืึทืืจืข ืึทืจืืืืจืึทืจืืฉ. ืืืืึทื ืคืื ืืขื, ืื ืืืึทืื ืฆื ืืื ืืืงืืืขื ืืื ืื ืกืืจืืงืืืจ MDB_val
ืืื ืจืืืืกื ืฆื ืึท ืึธื ืืืืึทื ืฆื ืึท ืกืืจืืงืืืจ, ืขืก ืืืืืื ืืื ืื ืึทืืืขืืืื ืข ืคืึทื. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืื ืึทืจืงืึทืืขืงืืฉืขืจื ืคืื ืขืืืขืืข ืืฉืืคึผืก (ืืื ืื ืคืึทื ืคืื ืืึธืก ืืึธืก ืืื 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
ืึทืืื ืึทื ืืื ืืขื ืขื ืืคึฟืจื ืึธืจืืขืจื ืืืจื ืื ืฉืืึทื ืคืื ืื ืคืึธืืขืจ ืืืขืืืืืึทืืขืจ. ืืืื, ืืขืงื ืืงืื, ืื ืึทืจืืขื ืคืื ืจืืืจืืืืื ื ืื ืืื ืืึทืื ืคืื ืึท ืืขืงืข ืงืืื ืึทืจืึธืคึผ ืฆื ืฉืืขืื ืื ืืืืคึฟืขืจ ืืืืฃ ืืขืจ ืืืืืขืจืฉืืขืจ ืืจืขื ืขืฅ ืคืื ืื ืืจืืคึผืข ืคืื โโืฉืืืกืืขื ืืื ืึท ืืขืืขืื ืคึผืจืขืคืืงืก ืืื ืืขืืึธืื ืืืขืจืืืืื ื ืฆื ืืขืจ ื ืืืขืจืืงืขืจ ืืจืขื ืขืฅ.
ืืขืจ ืืืืืขืจืฉืืขืจ ืืื ื ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืืืึทื ืืืจื ืกืึทืงืืืขื ืืฉืึทื ืืืื. ืฆื ืืึธื ืืึธืก, ืื ืืืืคึฟืขืจ ืืื ืืขืฉืืขืื ืืื ืื ืึธื ืืืื ืคืื ืื ืืื ืฆืข ืจืฉืืื ืคืื ืฉืืืกืืขื ืืื ืื ืืึทืืึทืืืืก ืืื ืื ืงืจืึทืืึทื ืืื ื ืึธื ืึท ืฉืืืกื ืืื ืื ืืืืขื ืึทืคืืื ืืืืขื ืึทืคืืื ืคืึธืืขืจ ืืืขืืืืืึทืืขืจ ืืื ืืขืจ ืืื. ืืขื ืฆืืืึทื ื ืืื 2 ืงืืึธืจ ืืื ืืขืจ ืืึธื ืืืกืึทืืืืึทื ืืืืืฉืื:
- ืืื ืขืึทืจ ืืืื ืงืึทืืคึผืืขืงืกืืื, ืืึธืืฉ, ืืื ืืืงืื ื, ืืื ืืืืืขืจ ืืื ืึทืืืขืืืื ืืื ืืื ืึท ื-ืืืื ืืื ืืึทืืื ืืขืจ, ืขืก ืงืขื ืขื ืืืื ืืืจืืืขืงืึธืื ืืื ืืึธืืึทืจืืืืืืง ืฆืืื.
- ืืืืืืกื, ืึทืืข ืืืขืืขืจ ืืืึธืก ืืขื ืขื ืคืึธืจืืืก ืฆื ืืขื ืืืึธืก ืืขื ืืืื ืืขื ืขื ืืืืคืืขืืืืื ืคืื ืืขืจ ืืขืงืข ืฆื ืื ืืืืคึผื ืืึผืจืื, ืืืึธืก ืืื ืืึธืจ ืืืึทืขืจ.
ืฆืื ืืืืง, ืื LMDB API ืืื ืึทื ืขืคืขืงืืืื ืืืขื ืฆื ืขืจืฉื ืฉืืขืืข ืื ืืืืคึฟืขืจ. ืฆื ืืึธื ืืึธืก, ืืืจ ืืึทืจืคึฟื ืฆื ืืืฉืขื ืขืจืืื ืึท ืฉืืืกื ืืืขืืขื ืก ืืืขืจื ืืื ืืึธื ืืืืื ืืงืขืจ ืืื ืึธืืขืจ ืืืืึทื ืฆื ืื ืฉืืืกื ืืืึธืก ืืื ืืืื ืืื ืืขืจ ืืืืืขืจืฉืืขืจ ืืจืขื ืขืฅ ืคืื ืื ืื ืืขืจืืืึทื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื ืืึทืฆืืื ื ืฆื ืืขืจ ืจืฉืืื ืืื ืื ืคืืืืจ ืืืืื, ืืืจ ืงืขื ืขื ืืึทืื ืึท ืฉืืืกื ืืื ืืืึธืก ืื ืคืขืื parentId
ืืืขื ืืืื ืืืืึทื ืฆื 2, ืืื ืึทืืข ืื ืื ืืื ืืขื ืขื ืึธื ืืขืคืืื ืืื ืืขืจืึธืก. ืึทืืึท ืึท ืืืื ืึธื ืืขืคืืื ืฉืืืกื ืืื ืกืึทืคึผืืืื ืฆื ืื ืคืื ืงืฆืืข ืึทืจืืึทื ืฉืจืืึทื mdb_cursor_get
ืื ืืึทืงืืืืื ื ืื ืึธืคึผืขืจืึทืฆืืข MDB_SET_RANGE
.
NodeKey upperBoundSearchKey = {โ
.parentId = 2,โ
.type = 0,โ
.nameLength = 0โ
};โ
MDB_val value, key = serialize(upperBoundSearchKey);โ
MDB_cursor *cursor;โ
mdb_cursor_open(..., &cursor);โ
mdb_cursor_get(cursor, &key, &value, MDB_SET_RANGE);
ืืืื ืืขืจ ืืืืืขืจืฉืืขืจ ืืจืขื ืขืฅ ืคืื ืึท ืืจืืคึผืข ืคืื โโืฉืืืกืืขื ืืื ืืขืคืื ืขื, ืืืจ ืืืขืจืืื ืืืืขืจ ืขืก ืืื ืึธืืขืจ ืืืจ ืืจืขืคื ืึธืืขืจ ืืขืจ ืฉืืืกื ืืจืขืคื ืื ืืขืจื parentId
, ืึธืืขืจ ืื ืฉืืืกืืขื ืืืขืื ื ืืฉื ืืืืคื ืืืืก ืืื ืึทืืข
do {โ
rc = mdb_cursor_get(cursor, &key, &value, MDB_NEXT);โ
// processing...โ
} while (MDB_NOTFOUND != rc && // check end of tableโ
IsTargetKey(key)); // check end of keys groupโโ
ืืืึธืก ืืื ืคืืึทื ืืื ืึทื ืืื ืึท ืืืื ืคืื ืื ืืืขืจืึทืืืึธื ื ืืฆื mdb_cursor_get, ืืืจ ืืึทืงืืืขื ื ืื ืืืืื ืื ืฉืืืกื, ืึธืืขืจ ืืืื ืื ืืืขืจื. ืืืื, ืืื ืกืืจ ืฆื ืืงืืื ืื ืืืกืืขืจืื ื ืื ืึธืื, ืืืจ ืืึทืจืคึฟื ืฆื ืงืึธื ืืจืึธืืืจื, ืฆืืืืฉื ืื ืืขืจืข, ืื ืคืขืืืขืจ ืคืื ืื ืืืขืจื ืืืื ืคืื ืื ืจืขืงืึธืจื, ืืื ืืขื ืขื ืืึทื ืฅ ืฆืืืจืืืืขื ืึธื ื ืึธื ืืืฉืขืกืืฉืขืจื.
4.3. ืืึธืืขืืื ื ืืึทืฆืืื ืืขื ืฆืืืืฉื ืืืฉื
ืืืฆื, ืืืจ ืืึธืื ืืขืจืืื ืฆื ืืึทืืจืึทืืื ืึทืืข ืึทืกืคึผืขืงืฅ ืคืื ืืืืืื ืื ื ืืื ืืจืืขืื ืืื ืึท ืืืื-ืืืฉ ืืึทืืึทืืืืก. ืืืจ ืงืขื ืขื ืืึธืื ืึทื ืึท ืืืฉ ืืื ืึท ืกืืื ืคืื ืืืืกืืขืฉืืขืื ืจืขืงืึธืจืืก ืืืึธืก ืืืฉืืืื ืคืื ืื ืืขืืืข ืืืคึผ ืคืื ืฉืืืกื-ืืืขืจื ืคึผืขืจื. ืืืื ืืืจ ืืืืึทืื ืึท ืฉืืืกื ืืื ืึท ืืจืึธืืขืง ืืื ืื ืคึฟืึทืจืืื ืื ืืืขืจื ืืื ืึท ืคึผืึทืจืึทืืขืืขืคึผืืคึผืขื, ืืืจ ืืึทืงืืืขื ืึท ืืืืืฉืึทืืืึทื ืืืึทืืจืึทืืข ืคืื โโืื ืืึทืืึทืืืืก.
โ
ืึธืืขืจ, ืืื ืคืึทืงืืืฉ ืืขืื ืขืก ืืื ืจืึทืจืขืื ืืขืืืขื ืฆื ืืึทืงืืืขื ืืืจื ืืื ืึทืืื ืงืืืื ืืืึทืืฉืขื. ืึธืคื ืืื ืึท ืืึทืืึทืืืืก ืขืก ืืื ืคืืจืืื ืื, ืขืจืฉืืขืจ, ืฆื ืืึธืื ืขืืืขืืข ืืืฉื, ืืื ืฆืืืืืื ืก, ืฆื ืืึทืื ืกืขืืขืงืฉืึทื ื ืืื ืืื ืืื ืึท ืกืืจ ืึทื ืืขืจืฉ ืคืื ืื ืขืจืฉืืืง ืฉืืืกื. ืืขืจ ืืขืฆืืขืจ ืึธืคึผืืืืืื ื ืืื ืืขืืืืืืขื ืื ืขื ืื ืื ืคืื ืืืืขืจ ืฉืึทืคืื ื ืืื ืื ืืขืจืงืึทื ืขืงืฉืึทื.
ืืื ืืขืงืก ืืืฉื
ืื ืืืึธืืงื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึท "ืืึทืืขืจื" ืึธืคึผืืืืืื ื. ืขืก ืืืกืคึผืืืื ืืขืืืข ืืื ืืึทืื ืคืื ืื ืืื ืฆืข ืืืึธืืงื, ืืืืกืืขืฉืืขืื ืืืื ืืึทืืข. ืฆื ืึธืคึผืืืืึทื ืื ืกืืจืืืขื ื ืึทืืึท ืึท ืกืขืืขืงืฆืืข, ืืืืึทืืขืจ ืฆื ืื ืืืืคึผื ืืืฉ ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืื ืื ืืขืจ ืืืื ืขืจ ืืื ืึท ื ืืึทืข ืืืคึผ ืคืื ืฉืืืกืืขื. ืืื ืืืขืื ืึทื ืืืึทืืื ืึท ืคืขืื ืืื ืื ืืึทืืข ืืืึธืก ืื ืืขืงืข ืืื ืืืฉืืคื, ืืืึธืก ืืืขื ืืืื ืื ืขืจืฉืืืง ืกืึธืจืืื ื ืงืจืืืขืจืืึธื. ืืืืึทื ืื ื ืืึทืข ืฉืืืกืืขื ืืขืจืืึธื ืขื ืื ืืขืืืข ืืึทืื ืืื ืื ืฉืืืกืืขื ืืื ืื ืืืืคึผื ืืืฉ, ืืื ืืขื ืขื ืืขืจืืคื ืืื ืืขืงืก ืฉืืืกืืขื. ืืื ืื ืืืื ืืื ืื ืืื ืืขื ืขื ืืืืืืืืื ืืื ืืึทืจืึทื ืฅ.
ืืื ืกืืจ ืฆื ืฆืขืืืืื ืื ืฉืืืกืืขื ืคืื ืคืึทืจืฉืืืขื ืข ืืืฉื ืคืื ืืขืืขืจ ืื ืืขืจืขืจ ืืื ืืขืจ ืืขืืืืงืขืจ ืืึทืืึทืืืืก, ืึทื ื ืึธื ืืขืื ืืฉ ืคืขืื ืืึทืืืขืื ืืื ืฆืืืขืืืืื ืฆื ืึทืืข ืคืื โโโโืืื. ืืืจื ืืืื ืขืก ืื ืืขืืกืื ืืืืืขืจืงืืึทื ืคึฟืึทืจ ืกืึธืจืืื ื, ืืืจ ืืืขืื ืืขืจืืจืืืื ืืจืืคึผืื ื ืคืื ืฉืืืกืืขื ืขืจืฉืืขืจ ืืืจื ืืืฉื ืืื ืืื ืืืฉื - ืืืื ืืื ืืืขืจ ืืืืืขื ืข ืึผืืืื.
ืืขืจ ืืื ืืขืงืก ืฉืืืกื ืจืขืคืขืจืขื ืฆื ืื ืืขืืืข ืืึทืื ืืื ืื ืขืจืฉืืืง ืฉืืืกื. ื ืกืืจืืืืคืึธืจืืืขืจื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืขื ืคืึทืจืืึธื ืืืจื ืึทืกืกืึธืกืืึทืืืึธื ืืื ืืื ืึท ืงืึธืคึผืืข ืคืื โโืื ืืืขืจื ืืืื ืคืื ืื ืขืจืฉืืืง ืฉืืืกื ืืื ื ืืฉื ืึธืคึผืืืืึทื ืคึฟืื ืขืืืขืืข ืคืื ื ืคืื ืืืื ืื ื:
- ืืื ืืขืจืืื ืขื ืคืื ืคึผืืึทืฅ ืืขื ืืืขื, ืื ืืขืืึทืืึทืืึท ืงืขื ืขื ืืืื ืืึทื ืฅ ืจืืึทื.
- ืคึฟืื ืึท ืคืึธืจืฉืืขืืื ื ืคืื ื ืคืื ืืืื ืื ื, ืืื ื ืืืขื ืึทืคึผืืืืืื ื ืื ืืขืืึทืืึทืืึท ืคืื ืึท ื ืึธืืข, ืืืจ ืืืขื ืืึธืื ืฆื ืจืืจืืื ืขืก ืืื ืฆืืืื ืฉืืืกืืขื.
- ืคึฟืื ืื ืืืื ืื ื ืคืื ืงืึธื ืฉืืืฆื, ืืืื ืืืจ ืคืึทืจืืขืกื ืฆื ืืขืจืืืึทื ืืืงื ืื ืืึทืื ืคึฟืึทืจ ืืืื ืขืจ ืคืื ืื ืฉืืืกืืขื, ืืืจ ืืืขืื ืืึทืงืืืขื ืึท ืืืืกืืื ืืฉืืง ืคืื ืืึทืื ืื ืงืึทื ืกืืกืืึทื ืกื ืืื ืื ืกืืึธืจืืืืฉ.
ืืืืึทืืขืจ, ืืืจ ืืืขืื ืืึทืืจืึทืืื ืืื ืฆื ืขืืืืื ืืจื ืื ืฉืึธืจืืงืึธืืื ืืก.
ืึธืจืืึทื ืืืืื ื ืืึทืฆืืื ืืขื ืฆืืืืฉื ืืืฉื
ืืขืจ ืืืกืืขืจ ืืื ืืขืืื ื ืคึผืึทืกืืง ืคึฟืึทืจ ืคึฟืึทืจืืื ืืื ื ืื ืืื ืืขืงืก ืืืฉ ืืื ืื ืืืืคึผื ืืืฉ "ืฉืืืกื ืืื ืืืขืจื". ืืื ืืืื ื ืึธืืขื ืกืึทืืืืฉืขืก, ืื ืืืขืจื ืืืื ืคืื ืื ืืื ืืขืงืก ืจืขืงืึธืจื ืืื ืึท ืงืึธืคึผืืข ืคืื โโืื ืขืจืฉืืืง ืฉืืืกื ืืืขืจื. ืืขืจ ืฆืืืึทื ื ืืืืืึทื ืืืฅ ืึทืืข ืื ืืืืื-ืืขืจืืื ื ืืืกืึทืืืืึทื ืืืืืฉืื ืคืืจืืื ืื ืืื ืกืืึธืจืื ื ืึท ืงืึธืคึผืืข ืคืื โโืื ืืืขืจื ืืืื ืคืื ืื ืขืจืฉืืืง ืจืขืงืึธืจื. ืืขืจ ืืืืื ืคึผืจืืึทื ืืื ืึทื ืฆื ืืึทืงืืืขื ืึท ืืืขืจื ืืืจื ืืื ืืขืงืก ืฉืืืกื, ืืืจ ืืึทืจืคึฟื ืฆื ืืึทืื 2 ืงืืืืจืื ืฆื ืื ืืึทืืึทืืืืก ืึทื ืฉืืึธื ืคืื ืืืื. ืกืืขืืึทืืืฉ, ืื ืจืืืึทืืืื ื ืืึทืืึทืืืืก ืกืืฉืขืืึท ืงืืงื ืืื ืืึธืก.
ืื ืื ืืขืจ ืืืกืืขืจ ืคึฟืึทืจ ืึธืจืืึทื ืืืืื ื ืืึทืฆืืื ืืขื ืฆืืืืฉื ืืืฉื ืืื "ืืืขืจืืง ืฉืืืกื". ืืืื ืขืกืึทื ืก ืืื ืฆื ืืืืื ื ืึธื ืึทืืจืืืืืฅ ืฆื ืืขื ืฉืืืกื, ืืืึธืก ืืขื ืขื ื ืืฉื ืืืจืฃ ืคึฟืึทืจ ืกืึธืจืืื ื, ืึธืืขืจ ืคึฟืึทืจ ืจืืงืจืืืืืื ื ืื ืคึฟืึทืจืืื ืื ืฉืืืกื. ืืื ืื Mail.ru ืงืืึธืื ืึทืคึผืืึทืงืืืฉืึทื ืขืก ืืขื ืขื ืคืึทืงืืืฉ ืืืืฉืคืืื ืคืื ืืืึทื ื ืืฆื, ืึธืืขืจ, ืฆื ืืืกืืืืื ืึท ืืืฃ ืื ืืขืจืืืงื ืืื ืืื. ืื ืงืึธื ืืขืงืกื ืคืื ืกืคึผืขืฆืืคืืฉ ืืึธืก ืคืจืึทืืขืืืึธืจืงืก, ืืื ืืืขื ืืขืื ืึท ืคืืงืืืฉืึทืก, ืึธืืขืจ ืึท ืงืืืจืขืจ ืืืึทืฉืคึผืื
ืืืึธืืงื ืจืืจืขืืืืืง ืงืืืืึทื ืฅ ืืึธืื ืึท ืืืึทื ืืืึธืก ืืืกืคึผืืืื ืึทืืข ืื ืืขืงืขืก ืืื ืคืึธืืืขืจืก ืืืึธืก ืืขืจ ืืึทื ืืฆืขืจ ืืื ืฉืขืจื ืืื ืื ืืขืจืข ืืขื ืืฉื. ืืื ื ืขืก ืืขื ืขื ืืขืคืืขืจืขื ืืืืื ืืง ืึทืืึท ืืขืงืขืก, ืืื ืขืก ืืขื ืขื ืึท ืคึผืืึทืฅ ืคืื ืคืึทืจืฉืืืขื ืข ืืืืคึผืก ืคืื ืกืคึผืขืฆืืคืืฉ ืืื ืคึฟืึธืจืืึทืฆืืข ืคึฟืึทืจืืื ืื ืืื ืืื (ืืืขืจ ืืื ืืขืจืืืืื ืึทืงืกืขืก, ืืื ืืืึธืก ืจืขืื, ืืื"ื ื), ืขืก ืืืขื ื ืืฉื ืืืื ืจืึทืฉืึทื ืึทื ืฆื ืืึทืกืข ืื ืืืขืจื ืืืื ืคืื ืื ืจืขืงืึธืจื ืืื ืื ืืืืคึผื ืืืฉ ืืื ืืื. ืึธืืขืจ, ืืืื ืืืจ ืืืืื ืฆื ืืืืึทืื ืึทืืึท ืืขืงืขืก ืึธืคืคืืื ืข, ืืืจ ื ืึธื ืืึทืจืคึฟื ืฆื ืงืจืึธื ืขืก ืขืจืืขืฅ. ื ื ืึทืืืจืืขื ืืืืืื ื ืืื ืฆื ืฉืึทืคึฟื ืึท ืืึทืืื ืืขืจ ืืืฉ ืคึฟืึทืจ ืืื. ืืื ืื ืืืึทืืจืึทืืข ืืื ืื, ืืืื ืฉืืืกื ืืื ืคึผืจืขืคืืงืกืขื ืืื "ืคึผ", ืืื ืื ืึธืจืืืึธืืืขืจ "ืคึผืจืึธืคึผื ืึทืืข" ืงืขื ืขื ืืืื ืจืืคึผืืืืกื ืืื ืื ืืขืจ ืกืคึผืขืฆืืคืืฉ ืืืขืจื "ืฆืืืืจ ืืื ืคึฟืึธืจืืึทืฆืืข".
ืึทืืข ืืื ืฆืืง ืืขืืึทืืึทืืึท, ืคึฟืึทืจ ืื ืกืืึธืจืื ื ืืืึธืก ืื ื ืืึทืข ืืืฉ ืืื ืืืฉืืคื, ืืื ืืขืฉืืขืื ืืื ืื ืืืขืจื ืืืื ืคืื ืื ืจืขืงืึธืจื. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืืจ ืืึธื ื ืืฉื ืืืขืื ืฆื ืืืคึผืืืงืึทื ืื ืืึทืื ืืืขืื ืืขืงืขืก ืืื ืคืึธืืืขืจืก ืืืึธืก ืืขื ืขื ืฉืืื ืกืืึธืจื ืืื ืื ืืืืคึผื ืืืฉ. ืึทื ืฉืืึธื, ืืืขืจืืง ืืึทืื ืืขื ืขื ืืืกืืฃ ืฆื ืื "ืคึผ" ืฉืืืกื ืืื ืื ืคืึธืจืขื ืคืื ืื "ื ืึธืืข ืฉืืึทื" ืืื "ืืืืขืกืืึทืืคึผ" ืคืขืืืขืจ. ืืึทื ืง ืฆื ืืื, ืืืจ ืงืขื ืขื ืืืืขื ืึทื ืืื ืืขืงืก ืฉืืืกื, ืคึฟืื ืืืึธืก ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืึท ืขืจืฉืืืง ืฉืืืกื, ืคึฟืื ืืืึธืก ืืืจ ืืขืกืึธืฃ ืงืขื ืขื ืืึทืงืืืขื ืืขืืึทืืึทืืึท ืคืื ื ืึธืืข.
ืืกืงื ื
ืืืจ ืึทืกืกืขืกืก ืื ืจืขืืืืืึทืื ืคืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื LMDB ืืืจืืืืก. ื ืึธื ืขืก, ืื ื ืืืขืจ ืคืื ืื ืคืจืืืื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืจืืืืกื ืืื 30%.
ืื ืจืขืืืืืึทืื ืคืื ืื ืืืจืืืขืงืึธืื ืึทืจืืขื ืจืืืึทื ืืืืื ืืืืึทืืขืจ ืคืื ืื ืืึธืก ืืึทื ืฉืึทืคึฟื. ืืขืจืืืืึทื, ืืืื ืขืจ ืคืื ืื ืืืืคึผื "Files" ืกืขืงืฉืึทื ื ืืื ืื ืึทื ืืจืืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืืื ืกืืืืืฉื ืฆื ื ืืฆื LMDB, ืืื ืื ืืขืจืข ืคึผืึทืจืฅ ืืขื ืขื ืืืืฃ ืื ืืืขื. ืื C ืฉืคึผืจืึทื, ืืื ืืืึธืก ืื ืฉืืืกื-ืืืขืจื ืงืจืึธื ืืื ืืืคึผืืึทืืขื ืึทื, ืืื ืืขืืืขื ืึท ืืืืข ืืืืฃ ืฆื ืืืืืขืก ืฉืึทืคึฟื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืคืจืืืืืืขืจืง ืึทืจืื ืขืก ืงืจืืึทื-ืคึผืืึทืืคืึธืจืืข ืืื C ++. ื ืงืึธื ืืขื ืขืจืึทืืึธืจ ืืื ืืขื ืืฆื ืฆื ืกืืืืึทืกืื ืคืึทืจืืื ืื ืื ืจืืืึทืืืื ื C ++ ืืืืืืึธืืขืง ืืื ืคึผืืึทืืคืึธืจืืข ืงืึธื ืืื ืึธืืืขืงืืืื-C ืืื ืงืึธืืืื
ืืงืืจ: www.habr.com