ืืขืื, ืืื ืงืจืืืืืื ื ืึทืคึผืืึทืงืืืฉืึทื ื ืคึฟืึทืจ DBMS
ืคืืื ืื ืืึทืื! (... ืืืื ืื ืื ืื ืคืึธืจืฉืืขืืื ื)
ืึทืืข ืคืื โโืื ืืืืื ืืืื Tarantool ืึท ืึทืืจืึทืงืืืื ืคึผืืึทืืคืึธืจืืข ืคึฟืึทืจ ืงืจืืืืืื ื ืืืื-ืืึทืกืข ืึทืคึผืืึทืงืืืฉืึทื ื ืืืึธืก ืึทืจืืขื ืืื ืืึทืืึทืืืืกืื. ืืื ืึทืืึท ืึทืคึผืืึทืงืืืฉืึทื ื, ืขืก ืืื ืึธืคื ืึท ื ืืื ืคึฟืึทืจ ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื.
ืืื ืืขืจืืื ื ืืืืื, Tarantool ืืื ืึท ืืขืืืื-ืืื ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื. ืืขืจ ืคึผืจืื ืฆืืคึผ ืคืื ืืืึทื ืึธืคึผืขืจืึทืฆืืข ืืื ืฆื ืกืึทืงืืืขื ืืฉืึทืื ืืืกืคืืจื ืืืืฃ ืจืขืคึผืืึทืงืึทื ืึทืืข ืืจืึทื ืืึทืงืฉืึทื ื ืงืึทื ืืืื ื ืืื ืื ืืขื ืงืืึธืฅ (WAL). ืืืืฉืึทืืืึทืื ืึทืืึท ืจืขืคึผืืึทืงืืืฉืึทื (ืืืจ ืืืขืื ืืืืืืขืจ ืจืืคื ืขืก ื ืืืขืจืืง-ืืืจืื) ืืื ืืขื ืืฆื ืฆื ืขื ืฉืืจ ืึทืคึผืืึทืงืืืฉืึทื ืฉืืื ืืึธืืขืจืึทื ืฅ ืืื / ืึธืืขืจ ืฆื ืคืึทืจืฉืคึผืจืืืื ืื ืืืืขื ืขื ืืึทืกืข ืฆืืืืฉื ืงื ืืื ื ืึธืืื.
ืจืืืก. 1. ืจืขืคึผืืึทืงืืืฉืึทื ืื ืึท ืงื ืืื
ื ืืืืฉืคึผืื ืคืื ืึทื ืึธืืืขืจื ืึทืืืื ืกืฆืขื ืึทืจ ืืืึธืื ืืืื ืืจืึทื ืกืคืขืจืื ื ืืึทืื ืืืฉืืคื ืืื ืืืื ืืึทืืึทืืืืก ืฆื ืื ืื ืืขืจ ืืึทืืึทืืืืก ืคึฟืึทืจ ืคึผืจืึทืกืขืกืื ื / ืืึธื ืืืึธืจืื ื. ืืื ืื ืืขืฆืืข ืคืึทื, ืึท ืืขืจ ืืึทืงืืืขื ืืืืืื ื ืงืขื ืืืื ืฆื ื ืืฆื ืืืืืข ืืขืืืขื ืจืขืคึผืืึทืงืืืฉืึทื - ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืขืฉืขืคื ืืึธืืืง ืืืจืื. ืืขื ืข. ืืืจ ืืึธื ื ืื ื ืืฆื ืึท ืคืึทืจืืืง ืืืืืื ื ืืขืืืื ืืื ืื DBMS, ืึธืืขืจ ืื ืกืืจืืืขื ื ืจืขืคึผืืึทืงืืืฉืึทื ืืืืฃ ืืื ืืืขืจ ืืืืืขื ืข ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืึธืก ืืืจ ืึทื ืืืืืงืืขื. ืืขื ืฆืืืึทื ื ืืื ืืืืืข ืึทืืืืึทื ืืืืฉืื ืืื ืืืกืึทืืืืึทื ืืืืืฉืื. ืืื ืก ืจืฉืืื ืื ืึทืืืืึทื ืืืืืฉืื.
1. ืคืึทืจืงืขืจ ืกืืืืืื ืื:
- ืืืจ ืงืขื ืขื ื ืืฉื ืึทืจืืืขืจืคืืจื ืึทืืข ืื ืืึทืื, ืึธืืขืจ ืืืืื ืืืื ืคืื ืขืก (ืืืฉื, ืืืจ ืงืขื ืขื ืึทืจืืืขืจืคืืจื ืืืืื ืขืืืขืืข ืืืฉื, ืขืืืขืืข ืคืื โโโโืืืืขืจ ืฉืคืืืื ืึธืืขืจ ืจืขืงืึธืจืืก ืืืึธืก ืืจืขืคื ืึท ืืืืขืจ ืงืจืืืขืจืืึธื);
- ื ืื ืขื ืืขื ื ืืืขืจืืง-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื, ืืืึธืก ืืื ืงืึทื ืืื ืืืึทืกืื ืืืจืืืขืงืึธืื ืืื ืืืกืื ืืงืจืึทื ืึทืก (ืืืคึผืืึทืืขื ืึทื ืืื ืื ืงืจืึทื ื ืืืขืจืกืืข ืคืื โโTarantool - 1.10) ืึธืืขืจ ืกืื ืืฉืจืึธื ืึธืืก (ืฆื ืืืื ืืืคึผืืึทืืขื ืึทื ืืื ืกืึทืืกืึทืงืืืึทื ื ืืืขืจืกืืขืก ืคืื Tarantool), ืืืื-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื ืงืขื ืขื ืืืื ืืืจืืืขืงืึธืื ืืื ืกืขืฉืึทื ื (ื"ื ืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืขืจืฉืืขืจ ืกืื ืืงืจืึทื ืืื ืื ืืึทืื - ืึท ืืืขืงืกื ืกืขืกืืข ืืึทืื, ืืขืืึธืื ืขืก ืืื ืึท ืคึผืืืืข ืืื ืจืขืคึผืืึทืงืืืฉืึทื, ื ืึธื ืืืึธืก ืืขืจ ืืืืึทืืขืจ ืืืขืงืกื ืกืขืกืืข ืึทืงืขืจื, ืืื"ื ื);
- ืืืื ืึท ืจืขืงืึธืจื ืืื ืืขืืืื ืขืืืขืืข ืืึธื, ืืืจ ืงืขื ืขื ืึทืจืืืขืจืคืืจื ืืืืื ืื ืืขืฆืืข ืืืขืจืกืืข (ื ืื ืขื ืืขื ืจืขืคึผืืึทืงืืืฉืึทื ืืืืฃ ื ืืืขืจืืง ืืืจืื, ืืื ืืืึธืก ืึทืืข ืขื ืืขืจืื ืืขื ืืขืืืื ืืืืฃ ืื ืืขื ืืืขื ืืืื ืคึผืืืึทืขื ืกืึทืงืืืขื ืืฉืึทืื ืืืืฃ ืื ืจืขืคึผืืึทืงืึทื).
2. ืขืก ืืขื ืขื ืงืืื ืฉืืืขืจืืงืืืื ืืื ืืืคึผืืึทืืขื ืื ื ืืืืคึผ ืืืขืงืกื, ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืกืื ืืงืจืึทื ืืื ืืืืึทื ืืึทืืึทืืืืกืื.
ืจืืืก. 2. ืจืขืคึผืืึทืงืืืฉืึทื ืืืืขืจ ืืืืคึผ
3. ืื ืืึทืืึทืืืืก ืกืืจืึทืงืืฉืขืจื ืฆืืืืฉื ืืืึธืก ืืึทืื ืืขื ืขื ืืจืึทื ืกืคืขืจื ืืึธื ื ืื ืืึธืื ืฆื ืืืื ืื ืืขืืืข (ืืขืจืืืขืจ, ืืื ืึทืืืขืืืื, ืขืก ืืื ืืคืืื ืืขืืืขื ืฆื ื ืืฆื ืคืึทืจืฉืืืขื ืข ืืืืก, ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทืื, ืคึผืืึทืืคืึธืจืืก, ืืื"ื ื).
ืจืืืก. 3. ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืืขืืขืจืึทืืืฉืื ืืึทืก ืกืืกืืขืืขื
ืื ืืึทืื ืกืืื ืืื ืึทื, ืืื ืืืจืืฉื ืืืืขื, ืคึผืจืึธืืจืึทืืืื ื ืืื ืืขืจ ืฉืืืขืจ / ืืืึทืขืจ ืืื ืงืึทื ืคืืืืขืจืืืฉืึทื, ืืื ืึทื ืฉืืึธื ืคืื ืงืึทืกืืึทืืืื ืื ืืขืืืื-ืืื ืคืึทื ืืงืฉืึทื ืึทืืืื, ืืืจ ืืืขื ืืึธืื ืฆื ืื ืกืืจืืืขื ื ืืืื ืืืืืขื ืข.
ืืืื ืืื ืืืื ืกืืืืึทืฆืืข ืื ืืืืื ืึทืืืืึทื ืืืืืฉืื ืืขื ืขื ืงืจืืืืฉ (ืึธืืขืจ ืืขื ืขื ืึท ื ืืืืืง ืฆืืฉืืึทื ื), ืขืก ืืื ืืื ืขื ืฆื ื ืืฆื ืืืื-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื. ืืึธืืืจ ืงืืงื ืืื ืขืืืขืืข ืืืขืื ืฆื ืื ืกืืจืืืขื ื ืืืื-ืืืจืื ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืื Tarantool DBMS.
ืคืึทืจืงืขืจ ืืื ืืืืืืืฉืึทื
ืึทืืื, ืืืื ืขืจ ืคืื ืื ืึทืืืืึทื ืืืืืฉืื ืคืื ืืืื-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืคืึทืจืงืขืจ ืกืืืืืื ืื. ืืื ืกืืจ ืคึฟืึทืจ ืืขื ืืืึทืืข ืฆื ืืืื ืืึธืจ ืืืื ืืขืืขื, ืขืก ืืื ื ืืืืืง ืฆื ืืื ืึทืืืื ืื ืกืืืข ืคืื โโืืึทืื ืืจืึทื ืกืคืขืจื ืืขืฉืึทืก ืืขืืขืจ ืืืขืงืกื ืกืขืกืืข. ืคืื ืงืืจืก, ืืืจ ืืึธื ื ืืฉื ืคืึทืจืืขืกื ืึทื ืืื ืื ืกืืฃ ืคืื ืื ืกืขืกืืข, ืื ืืึทืื ืืคื ืขืืขืจ ืืืื ืืืื ืกืื ืืงืจืึทื ืืืื ืืื ืื ืืงืืจ (ืืคึผืืืช ืคึฟืึทืจ ืืขื ืืืื ืคืื ืื ืืึทืื ืืืึธืก ืืื ืื ืืืึทืืืื ืืื ืจืขืคึผืืึทืงืืืฉืึทื).
ืืื ืฆื ืืื ืึทืืืื ืื ืกืืืข ืคืื โโโโืืึทืื ืืจืึทื ืกืคืขืจื ืืขืฉืึทืก ืืืื-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื? ื ืคึผืฉืื ืืืืืื ื ืงืขื ืืืื ืฆื ืกืขืืขืงืืืจื ืืึทืื ืืืื ืืึทืืข ืืื ืฆืืื. ืฆื ืืึธื ืืึธืก, ืืืจ ืงืขื ืขื ื ืืฆื ืื ืืึทืืข-ืฆืืื ืคืขืื ืฉืืื ืืืืืกืืื ื ืืื ืื ืืืฉ (ืืืื ืขืก ืืืืืกืฅ). ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืึท "ืกืืจ" ืืึธืงืืืขื ื ืงืขื ืืึธืื ืึท ืคืขืื "ืคืืจืืื ืื ืกืืจ ืืืจืืคืืจืื ื ืฆืืื" - delivery_time
. ืื ืคึผืจืึธืืืขื ืืื ืืขื ืืืืืื ื ืืื ืึทื ืื ืืืึทืืืขืก ืืื ืืขื ืคืขืื ืืึธื ื ืื ืืึธืื ืฆื ืืืื ืืื ืื ืกืืงืืืึทื ืก ืืืึธืก ืงืึธืจืึทืกืคึผืึทื ืื ืฆื ืื ืฉืึทืคืื ื ืคืื ืึธืจืืขืจืก. ืึทืืื ืืืจ ืงืขื ืขื ื ืืฉื ืืขืืขื ืงืขื ืื ืืึทืงืกืืืื ืคืขืื ืืืขืจื delivery_time
, ืืจืึทื ืกืืืืืขื ืืขืฉืึทืก ืื ืคืจืืขืจืืืงืข ืืืขืงืกื ืกืขืกืืข, ืืื ืืขืฉืึทืก ืืขืจ ืืืืึทืืขืจ ืืืขืงืกื ืกืขืกืืข ืืืืกืงืืืึทืื ืึทืืข ืจืขืงืึธืจืืก ืืื ืึท ืืขืืขืจ ืคืขืื ืืืขืจื delivery_time
. ืจืขืงืึธืจืืก ืืื ืึท ื ืืืขืจืืงืขืจ ืคืขืื ืืืขืจื ืงืขื ืืืื ืฆืืืขืืขืื ืฆืืืืฉื ืืืขืงืกื ืกืขืฉืึทื ื delivery_time
. ืืื ื ืืข ืจ ืืจืืขื ืื ื , ืื ื ืืขืงืขื ื ืืืจืืืื ื ืขื ืืขืจืื ืืขื , ืฐื ืก ืื ื ืคืื ืืขืกืืฐืขื ื ื ืืฉ ื ืืขื ืืืข ื ืืืืค ื ืคืขืื delivery_time
. ืืื ืืืืืข ืงืึทืกืขืก, ืื ืขื ืืขืจืื ืืขื ืืืขื ื ืืฉื ืืืื ืืจืึทื ืกืคืขืจื ืคืื ืื ืืงืืจ ืฆื ืื ืืขืกืืื ืืืฉืึทื. ืฆื ืกืึธืืืืข ืื ืคึผืจืึธืืืขืืก, ืืืจ ืืึทืจืคึฟื ืฆื ืึทืจืืืขืจืคืืจื ืืึทืื "ืึธืืืืขืจืืึทืคึผืื ื". ืืขื ืข. ืืื ืืขืืขืจ ืืืขืงืกื ืกืขืกืืข ืืืจ ืืืขืื ืึทืจืืืขืจืคืืจื ืึทืืข ืืึทืื ืืื ืื ืคืขืื ืืืขืจื delivery_time
, ืืงืกืื ืขืืืขืืข ืคืื ื ืืื ืืขืจ ืคืึทืจืืึทื ืืขื ืืืื (ืืืฉื, N ืฉืขื ืคืื ืืขื ืงืจืึทื ื ืืึธืืขื ื). ืึธืืขืจ, ืขืก ืืื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืึทื ืคึฟืึทืจ ืืจืืืก ืกืืกืืขืืขื ืืขื ืฆืืืึทื ื ืืื ืืขืืกื ืืืขืจืืง ืืื ืงืขื ืขื ืจืขืืืฆืืจื ืื ืคืึทืจืงืขืจ ืกืืืืืื ืื ืืืึธืก ืืืจ ืฉืืจืขืื ืคึฟืึทืจ ืืึธืจื ืืฉื. ืืื ืึทืืืฉืึทื, ืืขืจ ืืืฉ ืืืึธืก ืืื ืืจืึทื ืกืคืขืจื ืงืขื ื ืืฉื ืืึธืื ืึท ืคืขืื ืคึฟืึทืจืืื ืื ืืื ืึท ืืึทืืข-ืฆืืื.
ืื ืื ืืขืจ ืืืืืื ื, ืืขืจ ืงืึธืืคึผืืืฆืืจื ืืื ืืขืจืืื ืขื ืคืื ืืืคึผืืึทืืขื ืืืืฉืึทื, ืืื ืฆื ืืึทืฉืืขืืืงื ืื ืงืึทืืึธืืข ืคืื โโืืึทืื. ืืื ืืขื ืคืึทื, ืืขืฉืึทืก ืืขืืขืจ ืืืขืงืกื ืกืขืกืืข, ืึทืืข ืืึทืื ืืขื ืขื ืืจืึทื ืกืืืืืขื, ืื ืงืึทืืึธืืข ืคืื โโืืืึธืก ืืื ื ืืฉื ืืืฉืืขืืืงื ืืืจื ืื ืืึทืงืืืขืจ. ืฆื ืื ืกืืจืืืขื ื ืืขื, ืืืจ ืืึทืจืคึฟื ืฆื ืืืืื ืึท ืืืืืึทื ืืืึทื ืฆื ืื ืืงืืจ ืืืฉ (ืืืฉื, is_transferred
). ืืืื ืืขืจ ืืคื ืขืืขืจ ืึทืงื ืึทืืืื ืงืึทืืึธืืข ืคืื โโืื ืจืขืงืึธืจื, ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืคืขืื ื ืขืื ืื ืืืขืจื true
, ื ืึธื ืืืึธืก ืื ืคึผืึธืืืฆืืข ืืื ื ืื ืืขืจ ืื ืืืึทืืืื ืืื ืืงืกืืฉืืื ืืืฉืื. ืืขื ืืืคึผืืึทืืขื ืืืืฉืึทื ืึธืคึผืฆืืข ืืื ืื ืคืืืืขื ืืข ืืืกืึทืืืืึทื ืืืืืฉืื. ืขืจืฉืืขืจ, ืคึฟืึทืจ ืืขืืขืจ ืจืขืงืึธืจื ืืจืึทื ืกืคืขืจื, ืึท ืืขืจืงืขื ืืขื ืืฉ ืืืื ืืืื ืืืฉืขื ืขืจืืืืึทื ืืื ืืขืฉืืงื. ืืขืขืจืขื ืืขืจืขืื, ืืึธืก ืงืขื ืืืื ืคืึทืจืืืืึทืืืขื ืฆื ืืึทืืืื ื ืื ืกืืืข ืคืื โโโโืืึทืื ืืจืึทื ืกืคืขืจื ืืื ืคืืจื ืฆื ืืึทืืืื ื ืื ื ืืืขืจ ืคืื ืจืึธืื ืืืจืืคึผืก. ืฆืืืืืื ืก, ืขืก ืืื ืงืืื ืืขืืืขืืงืืื ืฆื ืฉืืงื ืื ืืขืืืข ืจืขืงืึธืจื ืฆื ืขืืืขืืข ืืคื ืขืืขืจ (ืืขืจ ืขืจืฉืืขืจ ืืคื ืขืืขืจ ืฆื ืืึทืงืืืขื ืืืขื ืืึทืฉืืขืืืงื ืื ืงืึทืืึธืืข ืคึฟืึทืจ ืืื ืืื ืคึฟืึทืจ ืึทืืข ืื ืื ืืขืจืข).
ื ืืืคึฟื ืืืึธืก ืืื ื ืืฉื ืืึธืื ืื ืืืกืึทืืืืึทื ืืืืืฉืื ืืขืืขืื ืืืืื ืืื ืฆื ืืืืื ืึท ืืืึทื ืฆื ืื ืืจืึทื ืกืคืขืจื ืืืฉ ืฆื ืฉืคึผืืจ ืขื ืืขืจืื ืืขื ืืื ืืืึทื ืจืึธืื. ืึทืืึท ืึท ืืืึทื ืงืขื ืขื ืืืื ืคืื ืืึทืืข-ืฆืืื ืืืคึผ ืืื ืืืื ืืืื ืืึทืฉืืืื / ืืขืจืืืึทื ืืืงื ืืืจื ืื ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืื ืงืจืึทื ื ืฆืืื ืืขืืขืจ ืืึธื ืจืขืงืึธืจืืก ืืขื ืขื ืฆืืืขืืขืื / ืืฉืืื ืืืฉื (ืึทืืึธืืืฉืข ืืื ืื ืืขืจืฆื / ืืืืฉื). ืืื ืึท ืืืึทืฉืคึผืื, ืืึธืืืจ ืจืืคื ืื ืืืึทื update_time
. ืืืจื ืฉืคึผืึธืจื ืื ืืึทืงืกืืืื ืคืขืื ืืืขืจื ืคืื ืืขื ืืืึทื ืคึฟืึทืจ ืื ืืจืึทื ืกืคืขืจื ืจืขืงืึธืจืืก, ืืืจ ืงืขื ืขื ืึธื ืืืืื ืื ืืืืึทืืขืจ ืืืขืงืกื ืกืขืกืืข ืืื ืืขื ืืืขืจื (ืกืขืืขืงืืืจื ืจืขืงืึธืจืืก ืืื ืื ืคืขืื ืืืขืจื update_time
, ืืงืกืื ืื ืคืจืืขืจ ืกืืึธืจื ืืืขืจื). ืื ืคึผืจืึธืืืขื ืืื ืื ืืขื ืขืจ ืฆืืืึทื ื ืืื ืึทื ืืึทืื ืขื ืืขืจืื ืืขื ืงืขื ืขื ืคึผืึทืกืืจื ืืื ืืึทืืฉืึทื. ืืื ืึท ืจืขืืืืืึทื ืคืื ืื ืคืขืื ืืืึทืืืขืก ืืื ืื ืืืึทื update_time
ืงืขื ื ืืฉื ืืืื ืืื ืฆืืง. ืืืื, ืืขื ืืืึทื ืงืขื ืขื ื ืื ืืืื ืืขื ืืฆื ืคึฟืึทืจ ืคึผืึธืจืืืึธื (ืืืึทื-ืืื-ืืืึทื) ืืึทืื ืจืขืืืืืึทื. ืฆื ืืืืึทืื ืืึทืื ืืืึทื ืคึฟืึทืจ ืืืึทื, ืืืจ ืืืขื ืืึธืื ืฆื ืืืืกืืจืึทืืื ื ืึธื ืืขืงืึทื ืืืึทืื ืืืึธืก ืจืืึฟ ืืกืชึผืื ืืึธืื ืืืืขืจ ื ืืืขืจืืง ืขืคืขืงืืืืืงืืึทื (ืืืฉื, ืจืืืจืืืืื ื ืคืื ืื ืืึทืืึทืืืืก ืึทืืข ืจืขืงืึธืจืืก ืืื ืื ืืืขืจื update_time
ืืขืืขืจ ืืื ืึท ืืขืืขืื ืืืื ืขืจ ืืื ืคึผืจืึธืืืฆืืจื ืึท ืืืืขืจ ื ืืืขืจ ืคืื ืจืขืงืึธืจืืก, ืกืืึทืจืืื ื ืคืื ืึท ืืืืขืจ ืคืึธืืึธ ืคืื ืื ืึธื ืืืื ืคืื ืื ืืืกืืขืจ).
ืืืจ ืงืขื ืขื ืคึฟืึทืจืืขืกืขืจื ืื ืขืคืขืงืืืืืงืืึทื ืคืื ืืึทืื ืึทืจืืืขืจืคืืจื ืืืจื ืึท ืืืกื ืืืคึผืจืืืืื ื ืื ืคืจืืขืจืืืงืข ืฆืืืึทื ื. ืฆื ืืึธื ืืึธืก, ืืืจ ืืืขืื ื ืืฆื ืื ืื ืืึทืืืฉืขืจ ืืืคึผ (ืืึทื ื ืื ืืึทืืืฉืขืจ) ืืื ืื ืืืึทื ืคืขืื ืืืึทืืืขืก ืคึฟืึทืจ ืืจืึทืงืื ื ืขื ืืขืจืื ืืขื. ืืื ืก ื ืึธืืขื ืื ืืืึทื row_ver
. ืื ืคืขืื ืืืขืจื ืคืื ืืขื ืืืึทื ืืืื ื ืึธื ืืืื ืฉืืขืื / ืืขืจืืืึทื ืืืงื ืืขืืขืจ ืืึธื ืึท ืจืขืงืึธืจื ืืื ืืืฉืืคื / ืืึทืืึทืคืืื. ืืืขืจ ืืื ืืขื ืคืึทื, ืื ืคืขืื ืืืขื ื ืืฉื ืืืื ืึทืกืืื ื ืื ืงืจืึทื ื ืืึทืืข-ืฆืืื, ืึธืืขืจ ืื ืืืขืจื ืคืื ืขืืืขืืข ืืึธืืืึทื ืง, ืืขืืืืงืกื ืืื ืืืื. ืืื ืึท ืจืขืืืืืึทื, ืื ืืืึทื row_ver
ืืืขื ืึทื ืืืึทืืื ืืื ืฆืืง ืืืึทืืืขืก ืืื ืงืขื ืขื ืืืื ืืขืืืืื ื ื ืื ืืืืื ืฆื ืืืืึทืื "ืืขืืืึท" ืืึทืื (ืืึทืืึท ืฆืืืขืืขืื / ืืฉืืื ืืืฉื ืืื ื ืื ืกืืฃ ืคืื ืื ืคืจืืขืจืืืงืข ืืืขืงืกื ืกืขืกืืข), ืึธืืขืจ ืืืื ืฆื ืคืฉืื ืืื ืืคืขืงืืืืืื ืฆืขืืืืื ืขืก ืืื ืืืขืืขืจ.
ืื ืืขืฆืืข ืคืืจืืขืืืืื ืืืคึฟื ืคืื ืืื ืึทืืืืืื ื ืื ืกืืืข ืคืื โโืืึทืื ืืจืึทื ืกืคืขืจื ืืื ืื ืคืจืืืืืืขืจืง ืคืื ืืืื-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื ืืืื ื ืฆื ืืืจ ืื ืืขืจืกื ืึธืคึผืืืืึทื ืืื ืื ืืืืขืจืกืึทื. ืืื ืก ืงืืง ืืื ืขืก ืืื ืืขืจ ืืขืืึทื.
ืคืึธืจื ืืึทืื ืืื ืึท ืจืืืขืจื ืืืขืจืกืืข ืงืึธืื ืืขืจ
ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื ืกืขืจืืืขืจ / ืืขื ืืืื
ืืื MS SQL Server, ืขืก ืืื ืึท ืกืคึผืขืฆืืขื ืืืึทื ืืืคึผ ืฆื ืื ืกืืจืืืขื ื ืืขื ืฆืืืึทื ื - rowversion
. ืืขืืขืจ ืืึทืืึทืืืืก ืืื ืึท ืืึธืืืึทื ืง ืืืึธืก ืื ืงืจืืกืื ืืื ืืืื ืืขืืขืจ ืืึธื ืึท ืจืขืงืึธืจื ืืื ืฆืืืขืืขืื / ืืขืืืื ืืื ืึท ืืืฉ ืืืึธืก ืืื ืึท ืืืึทื ืืื rowversion
. ืื ืืืขืจื ืคืื ืืขื ืืึธืืืึทื ืง ืืื ืืืืืึธืืึทืืืฉ ืึทืกืืื ื ืฆื ืื ืคืขืื ืคืื ืืขื ืืืึทื ืืื ืื ืฆืืืขืืขืื / ืืฉืืื ืืืฉื ืจืขืงืึธืจื. ืื Tarantool DBMS ืืื ื ืืฉื ืึท ืขื ืืขื ืืขืืืื-ืืื ืืขืงืึทื ืืืึทื. ืึธืืขืจ, ืืื Tarantool ืขืก ืืื ื ืืฉื ืฉืืืขืจ ืฆื ืื ืกืืจืืืขื ื ืขืก ืืึทื ืืืึทืื. ืืื ืก ืงืืง ืืื ืืื ืืึธืก ืืื ืืขืืื.
ืขืจืฉืืขืจ, ืึท ืืืกื ืืขืจืืื ืึธืืึธืืืข: ืืืฉื ืืื Tarantool ืืขื ืขื ืืขืจืืคึฟื ืกืคึผืืืกืึทื, ืืื ืจืขืงืึธืจืืก ืืขื ืขื ืืขืจืืคึฟื ืืืคึผืืขืก. ืืื Tarantool ืืืจ ืงืขื ืขื ืืึทืื ืกืืงืืืึทื ืกืื. ืกืืงืืืึทื ืกืื ืืขื ืขื ืืึธืจื ืืฉื ืืขืจ ืืื ืืขืืืืกื ืืขื ืขืจืึทืืึธืจืก ืคืื ืึธืจืืขืจื ืื ืืึทืืืฉืขืจ ืืืึทืืืขืก. ืืขื ืข. ืืึธืก ืืื ืคึผืื ืงื ืืืึธืก ืืืจ ืืึทืจืคึฟื ืคึฟืึทืจ ืืื ืืืขืจ ืฆืืืขืงื. ืื ืืขืจ ืืืจ ืืืขืื ืืึทืื ืึทืืึท ืึท ืกืืงืืืึทื ืก.
ืืืืืขืจ ืืืจ ืืืจืืคืืจื ืงืืื ืืึทืืึทืืืืก ืึธืคึผืขืจืึทืฆืืข ืืื Tarantool, ืืืจ ืืึทืจืคึฟื ืฆื ืืืืคื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
box.cfg{}
ืืื ืึท ืจืขืืืืืึทื, Tarantool ืืืขื ืึธื ืืืืื ืฉืจืืืื ืืืืืึทืืืืก ืกื ืึทืคึผืฉืึทืฅ ืืื ืืจืึทื ืกืึทืงืืืึธื ืืึธืืก ืฆื ืื ืงืจืึทื ื ืืืขืืืืืึทืืขืจ.
ืืื ืก ืืึทืื ืึท ืกืืงืืืึทื ืก row_version
:
box.schema.sequence.create('row_version',
{ if_not_exists = true })
ืึธืคึผืฆืืข if_not_exists
ืึทืืึทืื ืื ืฉืึทืคืื ื ืฉืจืืคื ืฆื ืืืื ืขืงืกืึทืงืืืืึทื ืงืืืคื ืืื: ืืืื ืื ืืืืคืขืฅ ืืืืืกืฅ, Tarantool ืืืขื ื ืืฉื ืคึผืจืืืืจื ืฆื ืืึทืื ืขืก ืืืืืขืจ. ืืขืจ ืึธืคึผืฆืืข ืืืขื ืืืื ืืขืืืืื ื ืืื ืึทืืข ืกืึทืืกืึทืงืืืึทื ื DDL ืงืึทืืึทื ืื.
ืืื ืก ืืึทืื ืึท ืคึผืืึทืฅ ืืื ืึท ืืืึทืฉืคึผืื.
box.schema.space.create('goods', {
format = {
{
name = 'id',
type = 'unsigned'
},
{
name = 'name',
type = 'string'
},
{
name = 'code',
type = 'unsigned'
},
{
name = 'row_ver',
type = 'unsigned'
}
},
if_not_exists = true
})
ืืึธ ืืืจ ืฉืืขืื ืื ื ืึธืืขื ืคืื ืื ืคึผืืึทืฅ (goods
), ืคืขืื ื ืขืืขื ืืื ืืืืขืจ ืืืืคึผืก.
ืึทืืืึธ ืื ืงืจืึทืืึทื ืืื ื ืคืขืืืขืจ ืืื Tarantool ืืขื ืขื ืืืื ืืืฉืืคื ืืื ืกืืงืืืึทื ืกืื. ืืึธืืืจ ืืึทืื ืึทื ืึทืืืึธ ืื ืงืจืึทืืึทื ืืื ื ืขืจืฉืืืง ืฉืืืกื ืืืจื ืคืขืื id
:
box.schema.sequence.create('goods_id',
{ if_not_exists = true })
box.space.goods:create_index('primary', {
parts = { 'id' },
sequence = 'goods_id',
unique = true,
type = 'HASH',
if_not_exists = true
})
Tarantool ืฉืืืฆื ืขืืืขืืข ืืืืคึผืก ืคืื ืื ืืขืงืกืื. ืื ืืขืจืกื ืงืึทืืึทื ืื ืืขืืืืื ื ืื ืืขืงืกืื ืืขื ืขื ืืจื ืืื ืืึทืฉ ืืืืคึผืก, ืืืึธืก ืืขื ืขื ืืืืืจื ืืืืฃ ืกืืจืึทืงืืฉืขืจื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืฆื ืืขื ื ืึธืืขื. ืืจื ืืื ืื ืืขืจืกื ืืืขืจืกืึทืืึทื ืืื ืืขืงืก ืืืคึผ. ืขืก ืึทืืึทืื ืืืจ ืฆื ืฆืืจืืงืงืจืืื ืืึทืื ืืื ืึท ืึธืจืืึทื ืืืืจื ืฉืืืืืขืจ. ืึธืืขืจ ืคึฟืึทืจ ืืงืืืึทืืึทืื ืกืขืืขืงืฆืืข, HASH ืืื ืืขืจ ืคึผืึทืกืืง. ืึทืงืงืึธืจืืื ืืื, ืขืก ืืื ืงืขืืืึทืืง ืฆื ื ืืฆื HASH ืคึฟืึทืจ ืื ืขืจืฉืืืง ืฉืืืกื (ืืืึธืก ืืื ืืืึธืก ืืืจ ืืืื).
ืฆื ื ืืฆื ืื ืืืึทื row_ver
ืฆื ืึทืจืืืขืจืคืืจื ืืขืืืื ืืึทืื, ืืืจ ืืึทืจืคึฟื ืฆื ืืื ืื ืกืืงืืืึทื ืก ืืืึทืืืขืก ืฆื ืื ืคืขืืืขืจ ืคืื ืืขื ืืืึทื row_ver
. ืืืขืจ ื ืื ืขื ืืขื ืื ืขืจืฉืืืง ืฉืืืกื, ืื ืืืึทื ืคืขืื ืืืขืจื row_ver
ืืึธื ืคืึทืจืืจืขืกืขืจื ืืื ืืืื ื ืื ืืืืื ืืืขื ืึทืืื ื ื ืืึท ืจืขืงืึธืจืืก, ืึธืืขืจ ืืืื ืืืขื ืืฉืึทื ืืื ื ืืืืืกืืื ื ืึธื ืขืก. ืืืจ ืงืขื ืขื ื ืืฆื ืืจืืืขืจื ืคึฟืึทืจ ืืขื. Tarantool ืืื ืฆืืืื ืืืืคึผืก ืคืื ืคึผืืึทืฅ ืืจืืืขืจื: before_replace
ะธ on_replace
. ืืจืืืขืจื ืืขื ืขื ืคืืืขืจื ืืืขื ืื ืืึทืื ืืื ืื ืคึผืืึทืฅ ืขื ืืขืจืื ืืขื (ืคึฟืึทืจ ืืขืืขืจ ืืืคึผืืข ืึทืคืขืงืืึทื ืืืจื ืื ืขื ืืขืจืื ืืขื, ืึท ืฆืื ืื ืคืื ืงืฆืืข ืืื ืืึธื ืืฉื). ื ืื ืขื ืืขื on_replace
, before_replace
-ืืจืืืขืจืก ืืึธืื ืืืจ ืฆื ืืึธืืืคืืฆืืจื ืื ืืึทืื ืคืื ืื ืืืคึผืืข ืคึฟืึทืจ ืืืึธืก ืื ืฆืื ืื ืืื ืขืงืกืึทืงืืืืึทื. ืึทืงืงืึธืจืืื ืืื, ืื ืืขืฆืืข ืืืคึผ ืคืื ืืจืืืขืจื ืืื ืคึผืึทืกืืง ืคึฟืึทืจ ืืื ืื.
box.space.goods:before_replace(function(old, new)
return box.tuple.new({new[1], new[2], new[3],
box.sequence.row_version:next()})
end)
ืื ืคืืืืขื ืืข ืฆืื ืื ืจืืคึผืืืืกืื ืื ืคืขืื ืืืขืจื row_ver
ืกืืึธืจื ืืืคึผืืข ืฆื ืืขืจ ืืืืึทืืขืจ ืืืขืจื ืคืื ืื ืกืืงืืืึทื ืก row_version
.
ืืื ืกืืจ ืฆื ืงืขื ืขื ืฆื ืขืงืกืืจืึทืงื ืืึทืื ืคืื ืคึผืืึทืฅ goods
ืืืจื ืืืึทื row_ver
, ืืืืืจ ืืืื ืื ืืื ืืขืงืก:
box.space.goods:create_index('row_ver', {
parts = { 'row_ver' },
unique = true,
type = 'TREE',
if_not_exists = true
})
ืืื ืืขืงืก ืืืคึผ - ืืืื (TREE
), ืืืืึทื ืืืจ ืืึทืจืคึฟื ืฆื ืขืงืกืืจืึทืงื ืื ืืึทืื ืืื ืึทืกืขื ืืื ื ืกืืจ ืคืื ืื ืืืึทืืืขืก ืืื ืื ืืืึทื row_ver
.
ืืึธืืืจ ืืืืื ืขืืืขืืข ืืึทืื ืฆื ืื ืคึผืืึทืฅ:
box.space.goods:insert{nil, 'pen', 123}
box.space.goods:insert{nil, 'pencil', 321}
box.space.goods:insert{nil, 'brush', 100}
box.space.goods:insert{nil, 'watercolour', 456}
box.space.goods:insert{nil, 'album', 101}
box.space.goods:insert{nil, 'notebook', 800}
box.space.goods:insert{nil, 'rubber', 531}
box.space.goods:insert{nil, 'ruler', 135}
ืืืืึทื ืืขืจ ืขืจืฉืืขืจ ืคืขืื ืืื ืึทื ืึทืืืึธ ืื ืงืจืึทืืึทื ืืื ื ืืึธืืืึทื ืง; ืืืจ ืคืึธืจื ื ืืื ืึทื ืฉืืึธื. Tarantool ืืืขื ืืืืืึธืืึทืืืฉ ืคืึทืจืืืึทืื ืื ืืืืึทืืขืจ ืืืขืจื. ืกืืืืืึทืจืื, ืืื ืื ืืืขืจื ืคืื ืื ืืืึทื ืคืขืืืขืจ row_ver
ืืืจ ืงืขื ืขื ืคืึธืจื ื ืื - ืึธืืขืจ ื ืืฉื ืกืคึผืขืฆืืคืืฆืืจื ืื ืืืขืจื ืืืึท ืึทืืข, ืืืืึทื ืืขื ืืืึทื ืึทืงืืึทืคึผืืื ืื ืืขืฆืืข ืฉืืขืืข ืืื ืืขื ืคึผืืึทืฅ.
ืืื ืก ืงืึธื ืืจืึธืืืจื ืื ืื ืกืขืจืฉืึทื ืจืขืืืืืึทื:
tarantool> box.space.goods:select()
---
- - [1, 'pen', 123, 1]
- [2, 'pencil', 321, 2]
- [3, 'brush', 100, 3]
- [4, 'watercolour', 456, 4]
- [5, 'album', 101, 5]
- [6, 'notebook', 800, 6]
- [7, 'rubber', 531, 7]
- [8, 'ruler', 135, 8]
...
ืืื ืืืจ ืงืขื ืขื ืืขื, ืืขืจ ืขืจืฉืืขืจ ืืื ืืขืฆืืข ืคืขืืืขืจ ืืขื ืขื ืึธื ืืขืคืืื ืืืืืึธืืึทืืืฉ. ืืืฆื ืขืก ืืืขื ืืืื ืืจืื ื ืฆื ืฉืจืืึทืื ืึท ืคืื ืงืฆืืข ืคึฟืึทืจ ืืืึทื-ืืื-ืืืึทื ืืคึผืืึธืึทืืื ื ืคึผืืึทืฅ ืขื ืืขืจืื ืืขื goods
:
local page_size = 5
local function get_goods(row_ver)
local index = box.space.goods.index.row_ver
local goods = {}
local counter = 0
for _, tuple in index:pairs(row_ver, {
iterator = 'GT' }) do
local obj = tuple:tomap({ names_only = true })
table.insert(goods, obj)
counter = counter + 1
if counter >= page_size then
break
end
end
return goods
end
ืื ืคึฟืื ืงืฆืืข ื ืขืื ืืื ืึท ืคึผืึทืจืึทืืขืืขืจ ืื ืืืขืจื row_ver
, ืกืืึทืจืืื ื ืคืื ืืืึธืก ืขืก ืืื ื ืืืืืง ืฆื ืึทื ืืึธืื ืขื ืืขืจืื ืืขื, ืืื ืงืขืจื ืึท ืืืื ืคืื ืื ืืขืืืื ืืึทืื.
ืืึทืืึท ืืืกืืขืจืื ื ืืื Tarantool ืืื ืืืจืืืขืงืึธืื ืืืจื ืื ืืขืงืกืื. ืคึฟืื ืงืฆืืข get_goods
ื ืืฆื ืึทื ืืืขืจืึทืืึธืจ ืืืจื ืืื ืืขืงืก row_ver
ืฆื ืืึทืงืืืขื ืืขืืืื ืืึทืื. ืืืขืจืึทืืึธืจ ืืืคึผ ืืื GT (ืืจืขืกืขืจ ืืื, ืืจืขืกืขืจ ืืื). ืืขื ืืืื ืึทื ืืขืจ ืืืขืจืึทืืึธืจ ืืืขื ืกืึทืงืืืขื ืืฉืึทืื ืืืจืืืืื ืื ืืื ืืขืงืก ืืืึทืืืขืก ืกืืึทืจืืื ื ืคืื ืื ืืืจืืืขืืื ืืขื ืฉืืืกื (ืคืขืื ืืืขืจื row_ver
).
ืืขืจ ืืืขืจืึทืืึธืจ ืงืขืจื ืืืคึผืืขืก. ืืื ืกืืจ ืฆื ืืขืจื ืึธื ืงืขื ืขื ืึทืจืืืขืจืคืืจื ืืึทืื ืืืจื ืืืืคึผ, ืขืก ืืื ื ืืืืืง ืฆื ืืืึทืื ืื ืืืคึผืืขืก ืฆื ืึท ืกืืจืืงืืืจ ืืืึธืก ืืื ืืึทืงืืืขื ืคึฟืึทืจ ืกืึทืืกืึทืงืืืึทื ื ืกืืจืืึทืืืืืืฉืึทื. ืืขืจ ืืืึทืฉืคึผืื ื ืืฆื ืื ื ืึธืจืืึทื ืคืื ืงืฆืืข ืคึฟืึทืจ ืืขื tomap
. ืึทื ืฉืืึธื ืคืื ื ืืฆื tomap
ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืืืื ืืืืื ืคึฟืื ืงืฆืืข. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืืืื ืืืขืื ืฆื ืจืขื ืึทืืข ืึท ืคืขืื name
, ื ืืฉ ื ืคืืจื ืฒ ืืข ื ืคืขืื code
ืืื ืืืืื ืึท ืคืขืื comment
:
local function unflatten_goods(tuple)
local obj = {}
obj.id = tuple.id
obj.goods_name = tuple.name
obj.comment = 'some comment'
obj.row_ver = tuple.row_ver
return obj
end
ืื ืืืึทื ืืจืืืก ืคืื ืืขืจ ืจืขืืืืืึทื ืืึทืื (ืื ื ืืืขืจ ืคืื ืจืขืงืึธืจืืก ืืื ืืืื ืืืง) ืืื ืืืฉืืืกื ืืืจื ืื ืืืึทืืขืืืืืง page_size
. ืืื ืืขื ืืืึทืฉืคึผืื ืื ืืืขืจื page_size
ืืื 5. ืืื ืึท ืคืึทืงืืืฉ ืคึผืจืึธืืจืึทื, ืื ืืืึทื ืืจืืืก ืืื ืืืืฉืึทืืืึทืื ืืขืจ ืืืืืืืง. ืขืก ืืขืคึผืขื ืืก ืืืืฃ ืื ืืืจืืฉื ืืืืขื ืืจืืืก ืคืื ืืขื ืคึผืืึทืฅ ืืืคึผืืข. ืื ืึธืคึผืืืืึทื ืืืึทื ืืจืืืก ืงืขื ืขื ืืืื ืืืฉืืืกื ืขืืคึผืืจืืงืึทืืื ืืืจื ืืขืกืื ืืึทืื ืึทืจืืืขืจืคืืจื ืฆืืื. ืื ืืจืขืกืขืจืข ืื ืืืึทื ืืจืืืก, ืื ืงืืขื ืขืจืขืจ ืื ื ืืืขืจ ืคืื ืจืึธืื ืืืจืืคึผืก ืฆืืืืฉื ืื ืฉืืงื ืืื ืจืืกืืืืื ื ืืืืื. ืืขื ืืืขื ืืืจ ืงืขื ืขื ืจืขืืืฆืืจื ืื ืงืืืืขืืืืง ืฆืืื ืคึฟืึทืจ ืืึทืื ืืึธืืืื ื ืขื ืืขืจืื ืืขื. ืึธืืขืจ, ืืืื ืื ืืืึทื ืืจืืืก ืืื ืฆื ืืจืืืก, ืืืจ ืืืขืื ืคืึทืจืืจืขื ืืขื ืฆื ืืึทื ื ืืืืฃ ืื ืกืขืจืืืขืจ ืกืืจืืึทืืืืืื ื ืื ืืืกืืขืจ. ืืื ืึท ืจืขืืืืืึทื, ืขืก ืงืขื ืืืื ืืืืืื ืืื ืคึผืจืึทืกืขืกืื ื ืื ืืขืจืข ืจืืงืืืขืก ืืืึธืก ืงืืืขื ืฆื ืื ืกืขืจืืืขืจ. ืคึผืึทืจืึทืืขืืขืจ page_size
ืงืขื ืขื ืืืื ืืึธืืืื ืคืื ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืขืงืข. ืคึฟืึทืจ ืืขืืขืจ ืืจืึทื ืกืืืืืขื ืคึผืืึทืฅ, ืืืจ ืงืขื ืขื ืฉืืขืื ืืืึทื ืืืืื ืืืขืจื. ืึธืืขืจ, ืคึฟืึทืจ ืจืืึฟ ืกืคึผืืืกืึทื ืื ืคืขืืืงืืึทื ืืืขืจื (ืืืฉื, 100) ืงืขื ืืืื ืคึผืึทืกืืง.
ืืื ืก ืืืกืคืืจื ืื ืคึฟืื ืงืฆืืข get_goods
:
tarantool> get_goods(0)
---
- - row_ver: 1
code: 123
name: pen
id: 1
- row_ver: 2
code: 321
name: pencil
id: 2
- row_ver: 3
code: 100
name: brush
id: 3
- row_ver: 4
code: 456
name: watercolour
id: 4
- row_ver: 5
code: 101
name: album
id: 5
...
ืืื ืก ื ืขืืขื ืื ืคืขืื ืืืขืจื row_ver
ืคืื ืื ืืขืฆืืข ืฉืืจื ืืื ืจืืคื ืื ืคึฟืื ืงืฆืืข ืืืืืขืจ:
tarantool> get_goods(5)
---
- - row_ver: 6
code: 800
name: notebook
id: 6
- row_ver: 7
code: 531
name: rubber
id: 7
- row_ver: 8
code: 135
name: ruler
id: 8
...
ื ืืืืืื:
tarantool> get_goods(8)
---
- []
...
ืืื ืืืจ ืงืขื ืขื ืืขื, ืืืขื ืืขืืืืื ื ืืขื ืืืขื, ืื ืคึฟืื ืงืฆืืข ืงืขืจื ืึทืืข ืคึผืืึทืฅ ืจืขืงืึธืจืืก ืืืึทื ืคึฟืึทืจ ืืืึทื goods
. ืื ืืขืฆืืข ืืืึทื ืืื ื ืืืืขืืื ืืขื ืืืจื ืึท ืืืืืืง ืกืขืืขืงืฆืืข.
ืืึธืืืจ ืืึทืื ืขื ืืขืจืื ืืขื ืฆื ืื ืคึผืืึทืฅ:
box.space.goods:update(4, {{'=', 6, 'copybook'}})
box.space.goods:insert{nil, 'clip', 234}
box.space.goods:insert{nil, 'folder', 432}
ืืืจ ืืึธืื ืืขืืืื ืืขื ืคืขืื ืืืขืจื name
ืคึฟืึทืจ ืืืื ืคึผืึธืืืฆืืข ืืื ืฆืืืขืืขืื ืฆืืืื ื ืืึทืข ืืืื ืกื.
ืืึธืืืจ ืืืืขืจืืืจื ืื ืืขืฆืืข ืคึฟืื ืงืฆืืข ืจืืฃ:
tarantool> get_goods(8)
---
- - row_ver: 9
code: 800
name: copybook
id: 6
- row_ver: 10
code: 234
name: clip
id: 9
- row_ver: 11
code: 432
name: folder
id: 10
...
ืื ืคึฟืื ืงืฆืืข ืืึธื ืืืืืขืงืขืจื ืื ืืขืืืื ืืื ืฆืืืขืืขืื ืจืขืงืึธืจืืก. ืึทืืื ืื ืคึฟืื ืงืฆืืข get_goods
ืึทืืึทืื ืืืจ ืฆื ืืึทืงืืืขื ืืึทืื ืืืึธืก ืืึธืื ืืขืืืื ืืื ื ืืืื ืืขืฆืืข ืจืืคื, ืืืึธืก ืืื ืื ืืงืขืจ ืคืื ืื ืจืขืคึผืืึทืงืืืฉืึทื ืืืคึฟื ืืื ืืขืจ ืืึทืืจืึทืืืื ื.
ืืืจ ืืืขืื ืืึธืื ืื ืึทืจืืืกืืขืื ืคืื ืจืขืืืืืึทืื ืืืจื ืืืืคึผ ืืื ืื ืคืึธืจืขื ืคืื JSON ืึทืจืืืก ืื ืคืึทืจื ืขื ืคืื ืืขื ืึทืจืืืงื. ืืืจ ืงืขื ืขื ืืืืขื ืขื ืืืขืื ืืขื ืืึธ:
ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืขืจ ืงืืืขื ื / ืฉืงืืึทืฃ ืืืื
ืืื ืก ืงืืง ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื ืจืืกืืืืื ื ืืืึทื ืงืืงื ืืื. ืืึธืืืจ ืืึทืื ืึท ืคึผืืึทืฅ ืืืืฃ ืื ืจืืกืืืืื ื ืืืึทื ืฆื ืงืจืึธื ืื ืืึทืื ืืึธืืืื ืืึทืื:
box.schema.space.create('goods', {
format = {
{
name = 'id',
type = 'unsigned'
},
{
name = 'name',
type = 'string'
},
{
name = 'code',
type = 'unsigned'
}
},
if_not_exists = true
})
box.space.goods:create_index('primary', {
parts = { 'id' },
sequence = 'goods_id',
unique = true,
type = 'HASH',
if_not_exists = true
})
ืื ืกืืจืืงืืืจ ืคืื ืื ืคึผืืึทืฅ ืจืืืขืืืึทืื ืื ืกืืจืืงืืืจ ืคืื ืื ืคึผืืึทืฅ ืืื ืื ืืงืืจ. ืืืขืจ ืืื ื ืืืจ ืืขื ืขื ื ืืฉื ืืขืืื ืืขื ืฆื ืคืึธืจื ืื ืืืงืืืขื ืืึทืื ืขืจืืขืฅ ืึทื ืืขืจืฉ, ืื ืืืึทื row_ver
ืืื ื ืืฉื ืืื ืืขื ืืึทืงืืืขืจ ืก ืคึผืืึทืฅ. ืืื ืคืขืื id
ืืงืืจ ืืืขื ืืืคืืขืจืก ืืืขื ืืืื ืจืขืงืึธืจืืขื. ืืขืจืืืขืจ, ืืืืฃ ืื ืืคื ืขืืขืจ ืืืึทื ืขืก ืืื ื ืื ืืึทืจืคึฟื ืฆื ืืึทืื ืขืก ืึทืืืึธ ืื ืงืจืึทืืึทื ืืื ื.
ืืื ืืขืจืฆื, ืืืจ ืืึทืจืคึฟื ืึท ืคึผืืึทืฅ ืฆื ืจืึทืืขืืืขื ืืืึทืืืขืก row_ver
:
box.schema.space.create('row_ver', {
format = {
{
name = 'space_name',
type = 'string'
},
{
name = 'value',
type = 'string'
}
},
if_not_exists = true
})
box.space.row_ver:create_index('primary', {
parts = { 'space_name' },
unique = true,
type = 'HASH',
if_not_exists = true
})
ืคึฟืึทืจ ืืขืืขืจ ืืึธืืืื ืคึผืืึทืฅ (ืคืขืื space_name
) ืืืจ ืืืขืื ืจืึทืืขืืืขื ืื ืืขืฆืืข ืืึธืืืื ืืืขืจื ืืึธ row_ver
(ืคืขืื value
). ืืขืจ ืืืึทื ืึทืงื ืืื ืืขืจ ืขืจืฉืืืง ืฉืืืกื space_name
.
ืืื ืก ืฉืึทืคึฟื ืึท ืคึฟืื ืงืฆืืข ืฆื ืืึธืื ืคึผืืึทืฅ ืืึทืื goods
ืืืจื ืืืืคึผ. ืฆื ืืึธื ืืึธืก, ืืืจ ืืึทืจืคึฟื ืึท ืืืืืืึธืืขืง ืืืึธืก ืืืคึผืืึทืืึทื ืฅ ืึท ืืืืคึผ ืงืืืขื ื. ืื ืคืืืืขื ืืข ืฉืืจื ืืึธืืื ืื ืืืืืืึธืืขืง ืืื ืื ืกืืึทื ืืืึทืืขืก ืื HTTP ืงืืืขื ื:
local http_client = require('http.client').new()
ืืืจ ืืืื ืืึทืจืคึฟื ืึท ืืืืืืึธืืขืง ืคึฟืึทืจ ืืืฉืกืึธื ืืขืกืขืจืืึทืืืืืืฉืึทื:
local json = require('json')
ืืึธืก ืืื ืืขื ืื ืฆื ืฉืึทืคึฟื ืึท ืืึทืื ืืึธืืืื ื ืคืื ืงืฆืืข:
local function load_data(url, row_ver)
local url = ('%s?rowVer=%s'):format(url,
tostring(row_ver))
local body = nil
local data = http_client:request('GET', url, body, {
keepalive_idle = 1,
keepalive_interval = 1
})
return json.decode(data.body)
end
ืื ืคึฟืื ืงืฆืืข ืขืงืกืึทืงืืืฅ ืึท ืืืืคึผ ืืขืื ืฆื ืื URL ืึทืืจืขืก ืืื ืกืขื ืื ืขืก row_ver
ืืื ืึท ืคึผืึทืจืึทืืขืืขืจ ืืื ืงืขืจื ืื ืืขืกืขืจืืึทืืืืขื ืจืขืืืืืึทื ืคืื ืื ืืขืื.
ืื ืคืื ืงืฆืืข ืคึฟืึทืจ ืฉืคึผืึธืจื ืืืงืืืขื ืืึทืื ืงืืงื ืืื ืืึธืก:
local function save_goods(goods)
local n = #goods
box.atomic(function()
for i = 1, n do
local obj = goods[i]
box.space.goods:put(
obj.id, obj.name, obj.code)
end
end)
end
ืฆืืงื ืคืื ืฉืคึผืึธืจื ืืึทืื ืฆื ืคึผืืึทืฅ goods
ืืขืฉืืขืื ืืื ืึท ืืจืึทื ืกืึทืงืืืึธื (ืื ืคึฟืื ืงืฆืืข ืืื ืืขื ืืฆื ืคึฟืึทืจ ืืขื box.atomic
) ืฆื ืจืขืืืฆืืจื ืื ื ืืืขืจ ืคืื ืืืกืง ืึทืคึผืขืจืืืฉืึทื ื.
ืฆืื ืกืืฃ, ืื ืืืืข ืคึผืืึทืฅ ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคืื ืงืฆืืข goods
ืืื ืึท ืืงืืจ ืืืจ ืงืขื ืขื ืื ืกืืจืืืขื ื ืขืก ืืื ืืึธืก:
local function sync_goods()
local tuple = box.space.row_ver:get('goods')
local row_ver = tuple and tuple.value or 0
โโ set your url here:
local url = 'http://127.0.0.1:81/test/goods/list'
while true do
local goods = load_goods(url, row_ver)
local count = #goods
if count == 0 then
return
end
save_goods(goods)
row_ver = goods[count].rowVer
box.space.row_ver:put({'goods', row_ver})
end
end
ืขืจืฉืืขืจ ืืืจ ืืืืขื ืขื ืื ืคืจืืขืจ ืืขืจืืืขืืืขื ืืืขืจื row_ver
ืคึฟืึทืจ ืคึผืืึทืฅ goods
. ืืืื ืขืก ืืื ืคืขืื ืืืง (ืืขืจ ืขืจืฉืืขืจ ืืืขืงืกื ืกืขืกืืข), ืืืจ ื ืขืืขื ืขืก ืืื row_ver
ื ืื. ืืืืึทืืขืจ ืืื ืืขื ืฆืืงื ืืืจ ืืืจืืคืืจื ืึท ืืืึทื-ืืืจื-ืืืึทื ืืจืืคืงืืคืืข ืคืื โโืื ืคืืจืขื ืืขืจื ืืึทืื ืคืื ืื ืืงืืจ ืืื ืื ืกืคึผืขืกืึทืคืืื URL. ืืื ืืขืืขืจ ืืืขืจืึทืืืึธื, ืืืจ ืจืึทืืขืืืขื ืื ืืืงืืืขื ืืึทืื ืฆื ืื ืฆืื ืขืืขื ืืืืข ืคึผืืึทืฅ ืืื ืืขืจืืืึทื ืืืงื ืื ืืืขืจื row_ver
(ืืื ืคึผืืึทืฅ row_ver
ืืื ืืื ืื ืืืขืจืืึทืืึทื row_ver
) - ื ืขืืขื ืื ืืืขืจื row_ver
ืคืื ืื ืืขืฆืืข ืฉืืจื ืคืื ืืึธืืืื ืืึทืื.
ืฆื ืืึทืฉืืฆื ืงืขืื ืึทืงืกืึทืืขื ืืึทื ืืืคึผืื ื (ืืื ืคืึทื ืคืื ืึท ืืขืืช ืืื ืื ืคึผืจืึธืืจืึทื), ืื ืฉืืืืฃ while
ืงืขื ืขื ืืืื ืจืืคึผืืืืกื ืืืจื for
:
for _ = 1, max_req do ...
ืืื ืึท ืจืขืืืืืึทื ืคืื ืขืงืกืึทืงืืืืื ื ืื ืคึฟืื ืงืฆืืข sync_goods
ืคึผืืึทืฅ goods
ืืขืจ ืืคื ืขืืขืจ ืืืขื ืึทื ืืืึทืืื ืื ืืขืฆืืข ืืืขืจืกืืขืก ืคืื ืึทืืข ืคึผืืึทืฅ ืจืขืงืึธืจืืก goods
ืืื ืืขืจ ืืงืืจ.
ืืึธื, ืืึทืื ืืืืืฉืึทื ืงืขื ืขื ื ืื ืืืื ืืจืึธืืงืึทืกื ืืื ืืขื ืืืขื. ืืืื ืึทืืึท ืึท ื ืืื ืืืืืกืฅ, ืืืจ ืงืขื ืขื ื ืืฆื ืึท ืืืืืฉืึทื ืฆืืืื. ืืืื ืฆื ืคึผืืึทืฅ goods
ืืืืืึทื ืคืขืื is_deleted
ืืื ืึทื ืฉืืึธื ืคืื ืคืืืืงืื ืืืกืืขืงื ืึท ืจืขืงืึธืจื, ืืืจ ื ืืฆื ืืึทืืืฉืืงืึทื ืืืืืฉืึทื - ืืืจ ืฉืืขืื ืื ืคืขืื ืืืขืจื is_deleted
ืืื ืืืึทืืฉ true
. ืืื ืึทื ืฉืืึธื ืคืื ืึท ืืืืึทื ืคืขืื is_deleted
ืขืก ืืื ืืขืจ ืืึทืงืืืขื ืฆื ื ืืฆื ืืขื ืคืขืื deleted
, ืืืึธืก ืกืืึธืจื ืื ืืึทืืข-ืฆืืื ืคืื ืื ืืึทืืืฉืืงืึทื ืืืืืฉืึทื ืคืื ืื ืจืขืงืึธืจื. ื ืึธื ืคึผืขืจืคืึธืจืืื ื ืึท ืืึทืืืฉืืงืึทื ืืืกืืขืงื, ืื ืจืขืงืึธืจื ืื ืืขืฆืืืื ื ืคึฟืึทืจ ืืืืืฉืึทื ืืืขื ืืืื ืืจืึทื ืกืคืขืจื ืคืื ืื ืืงืืจ ืฆื ืื ืืขืกืืื ืืืฉืึทื (ืืืื ืื ืืึธืืืง ืืืกืงืึทืกื ืืืืื).
ืกืืงืืืึทื ืก row_ver
ืงืขื ืขื ืืืขืจื ืืขื ืืฆื ืฆื ืึทืจืืืขืจืคืืจื ืืึทืื ืคืื ืื ืืขืจืข ืกืคึผืืืกืึทื: ืขืก ืืื ื ืื ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืึท ืืึทืืื ืืขืจ ืกืืงืืืึทื ืก ืคึฟืึทืจ ืืขืืขืจ ืืจืึทื ืกืืืืืขื ืคึผืืึทืฅ.
ืืืจ ืืขืงืืงื ืืืืฃ ืึท ืขืคืขืงืืืื ืืืขื ืคืื ืืืื-ืืืจืื ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืึทืคึผืืึทืงืืืฉืึทื ื ื ืืฆื ืื Tarantool DBMS.
ืคืืื ืืื ืื
- Tarantool DBMS ืืื ืึท ืึทืืจืึทืงืืืื, ืคึผืจืึทืืึทืกืื ื ืคึผืจืึธืืืงื ืคึฟืึทืจ ืงืจืืืืืื ื ืืืื-ืืึทืกืข ืึทืคึผืืึทืงืืืฉืึทื ื.
- ืืืื-ืืืจืื ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื ืืื ืึท ื ืืืขืจ ืคืื ืึทืืืืึทื ืืืืืฉืื ืืืืขืจ ื ืืืขืจืืง-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื.
- ืื ืืืื-ืืืจืื ืจืขืคึผืืึทืงืืืฉืึทื ืืืคึฟื ืืืกืงืึทืกื ืืื ืืขื ืึทืจืืืงื ืึทืืึทืื ืืืจ ืฆื ืืื ืึทืืืื ืื ืกืืืข ืคืื โโืืจืึทื ืกืคืขืจื ืืึทืื ืืืจื ืืจืึทื ืกืคืขืจืื ื ืืืืื ืื ืจืขืงืึธืจืืก ืืืึธืก ืืึธืื ืืขืืืื ืืื ื ืื ืืขืฆืืข ืืืขืงืกื ืกืขืกืืข.
ืืงืืจ: www.habr.com