แƒขแƒแƒ แƒแƒœแƒขแƒฃแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜แƒ•แƒ” แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ

แƒขแƒแƒ แƒแƒœแƒขแƒฃแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜แƒ•แƒ” แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ

แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒ”แƒ‘แƒจแƒ˜ แƒขแƒฃแƒžแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฌแƒ›แƒ”แƒœแƒ“แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ“แƒแƒ’แƒ•แƒฎแƒ•แƒ“แƒ แƒขแƒแƒ แƒแƒœแƒขแƒฃแƒšแƒ˜. แƒ“แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ แƒแƒ แƒ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒชแƒ แƒขแƒแƒ แƒแƒœแƒขแƒฃแƒšแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒฃแƒ™แƒ•แƒ” แƒแƒ›แƒแƒ”แƒฌแƒฃแƒ แƒ, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ“แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒ—. แƒแƒ› แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก tarantool-แƒก แƒแƒฅแƒ•แƒก Lua-แƒ–แƒ” แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”.แƒฌ แƒ•แƒแƒ“แƒ˜แƒก แƒ’แƒแƒกแƒ•แƒšแƒ. แƒแƒ› แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ›แƒแƒ™แƒšแƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ˜แƒ•แƒฎแƒ•แƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒแƒ  แƒ˜แƒงแƒ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜: แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒ’แƒแƒฌแƒ›แƒ”แƒœแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒšแƒฃแƒ GC-แƒจแƒ˜ แƒฉแƒแƒ›แƒแƒ˜แƒฎแƒ แƒฉแƒ. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”แƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒ–แƒ”, แƒ˜แƒ› แƒ˜แƒ›แƒ”แƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  แƒ”แƒœแƒแƒ–แƒ” แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒแƒ“ แƒ›แƒแƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒก.

แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ˜แƒงแƒ แƒขแƒแƒ แƒแƒœแƒขแƒฃแƒšแƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒ”.แƒฌ memcached. แƒ›แƒแƒกแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒก, แƒ แƒแƒ› แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒจแƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒชแƒแƒšแƒ™แƒ” แƒ•แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒขแƒฃแƒžแƒšแƒ˜แƒก แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ”แƒ–แƒ”, แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, ttl. แƒคแƒแƒœแƒฃแƒ แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒก, แƒแƒ“แƒแƒ แƒ”แƒ‘แƒก TTL-แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ“แƒ แƒแƒก แƒ“แƒ แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒฌแƒแƒจแƒแƒšแƒแƒก แƒ—แƒฃ แƒแƒ แƒ แƒขแƒฃแƒžแƒšแƒ˜. Memcached แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒ”แƒšแƒ”แƒ’แƒแƒœแƒขแƒฃแƒ แƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒซแƒแƒšแƒ˜แƒแƒœ แƒ–แƒแƒ’แƒแƒ“แƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒ˜แƒก แƒแƒ  แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒขแƒ˜แƒžแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒจแƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒ˜แƒจแƒšแƒ”แƒ‘แƒ. แƒ›แƒ”แƒแƒ แƒ”แƒช, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒฃแƒฆแƒ”แƒšแƒขแƒ”แƒฎแƒ˜แƒšแƒ–แƒ” แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒขแƒแƒžแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒ˜แƒงแƒแƒก. แƒ“แƒ แƒ—แƒฃ แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒจแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ›แƒแƒ’แƒ•แƒแƒ แƒ“แƒ (แƒฎแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒ™แƒšแƒแƒกแƒแƒ“ แƒ˜แƒงแƒ แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜), แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ”แƒแƒ แƒ”แƒก แƒ›แƒแƒ˜แƒœแƒช แƒแƒ  แƒ›แƒ˜แƒฃแƒฅแƒชแƒ”แƒ•แƒ˜แƒ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ. แƒแƒ› แƒกแƒแƒ›แƒ›แƒ แƒžแƒฃแƒœแƒฅแƒขแƒ›แƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ“.

แƒแƒฆแƒฌแƒ”แƒ แƒ

แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ tarantool แƒแƒฅแƒ•แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ™แƒแƒ แƒ’แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ˜ C-แƒจแƒ˜. แƒฃแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ”แƒก แƒงแƒแƒ•แƒšแƒ˜แƒกแƒ, แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒ’แƒแƒ”แƒชแƒœแƒแƒ— แƒ›แƒแƒก, แƒ แƒแƒ—แƒ แƒ’แƒแƒ˜แƒ’แƒแƒ— แƒ˜แƒก แƒฉแƒแƒœแƒแƒ แƒ—แƒ”แƒ‘แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—แƒ แƒ“แƒ แƒ™แƒแƒ“แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒฅแƒ•แƒ”แƒ›แƒแƒ—. แƒแƒกแƒ”แƒ•แƒ” แƒฆแƒ˜แƒ แƒก แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฅแƒชแƒ”แƒ•แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก, แƒ™แƒ”แƒ แƒซแƒแƒ“ แƒงแƒฃแƒ—แƒ˜, แƒแƒžแƒขแƒ˜แƒ™แƒฃแƒ , แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ ะธ txn.

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒจแƒแƒ แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜:

fiber = require('fiber')
net_box = require('net.box')
box.cfg{listen = 3300}
box.schema.func.create('libcapped-expirationd.start', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.start')
box.schema.func.create('libcapped-expirationd.kill', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.kill')
box.schema.space.create('tester')
box.space.tester:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
capped_connection = net_box:new(3300)

แƒกแƒ˜แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒ˜แƒ— tarantool แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ libcapped-expirationd.so แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ. แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒ“แƒแƒœ แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ: แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒ™แƒ•แƒšแƒ. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒ แƒšแƒฃแƒแƒกแƒ’แƒแƒœ box.schema.func.create แƒ“แƒ box.schema.user.grant แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒกแƒ˜แƒ•แƒ แƒชแƒ”, แƒ แƒแƒ›แƒšแƒ˜แƒก tuples แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒ› แƒ•แƒ”แƒšแƒก: แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜, แƒ›แƒ”แƒแƒ แƒ” แƒแƒ แƒ˜แƒก แƒ”แƒšแƒคแƒแƒกแƒขแƒ แƒ“แƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒแƒ แƒ˜แƒก แƒขแƒฃแƒžแƒšแƒ˜แƒก แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ— แƒฎแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒšแƒ˜แƒก แƒ—แƒแƒ•แƒ–แƒ” แƒ“แƒ แƒ•แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก แƒฉแƒ•แƒ”แƒœแƒก แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒกแƒ—แƒแƒœ.

แƒ›แƒแƒกแƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ:

capped_connection:call('libcapped-expirationd.start', {'non-indexed', box.space.tester.id, box.space.tester.index.primary, box.space.tester.index.primary, 3, 1024, 3600})

แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ”แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒกแƒ”แƒ•แƒ” แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒšแƒฃแƒ-แƒ–แƒ”แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜. แƒ›แƒ”แƒแƒ แƒ” แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜. แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒแƒ แƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒขแƒฃแƒžแƒšแƒ”แƒ‘แƒ˜ แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ. แƒ›แƒ”แƒแƒ—แƒฎแƒ” แƒแƒ แƒ˜แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ’แƒแƒ˜แƒ•แƒšแƒ˜แƒแƒœ แƒขแƒแƒžแƒ”แƒ‘แƒก. แƒ›แƒ”แƒฎแƒฃแƒ—แƒ” แƒแƒ แƒ˜แƒก แƒ“แƒฃแƒ‘แƒšแƒ˜แƒก แƒ•แƒ”แƒšแƒ˜แƒก แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜ แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ (แƒœแƒฃแƒ›แƒ”แƒ แƒแƒชแƒ˜แƒ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ 1-แƒ“แƒแƒœ แƒ“แƒ แƒแƒ แƒ 0-แƒ“แƒแƒœ!). แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ“แƒ แƒ›แƒ”แƒจแƒ•แƒ˜แƒ“แƒ” แƒแƒ แƒ˜แƒก แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜. 1024 แƒแƒ แƒ˜แƒก แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒœแƒแƒฎแƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ”แƒ แƒ— แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜. 3600 โ€” แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜.

แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒก แƒชแƒแƒชแƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒฌแƒแƒจแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒฎแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒแƒ“แƒแƒ™แƒ•แƒ”แƒ—แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒžแƒแƒขแƒแƒ แƒ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒฃแƒคแƒ แƒ แƒ“แƒ˜แƒ“แƒ–แƒ”. แƒ—แƒฃ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒฎแƒ•แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฐแƒ”แƒจแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒแƒ“แƒแƒ™แƒ•แƒ”แƒ—แƒ แƒฎแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ˜, แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ—แƒ˜ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—. แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒกแƒ›แƒแƒกแƒฃแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜ แƒ“แƒแƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ— แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜.

แƒ›แƒแƒ“แƒ˜แƒ— แƒฉแƒแƒ•แƒกแƒ•แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒแƒžแƒ˜ แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒจแƒ˜ 60 แƒฌแƒแƒ›แƒ˜แƒก แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ˜แƒ—:

box.space.tester:insert{0, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{1, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{2, '[email protected]', math.floor(fiber.time()) + 60}

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ—, แƒ แƒแƒ› แƒฉแƒแƒกแƒ›แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ:

tarantool> box.space.tester.index.primary:select()
---
- - [0, '[email protected]', 1576418976]
  - [1, '[email protected]', 1576418976]
  - [2, '[email protected]', 1576418976]
...

แƒ’แƒแƒ•แƒ˜แƒ›แƒ”แƒแƒ แƒแƒ— แƒแƒ แƒฉแƒ”แƒ•แƒ 60+ แƒฌแƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ (แƒ˜แƒ—แƒ•แƒšแƒ˜แƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒขแƒแƒžแƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜แƒ“แƒแƒœ) แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒแƒ› แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ:

tarantool> box.space.tester.index.primary:select()
---
  - []
...

แƒจแƒ”แƒ•แƒแƒฉแƒ”แƒ แƒแƒ— แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ:

capped_connection:call('libcapped-expirationd.kill', {'non-indexed'})

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ›แƒ”แƒแƒ แƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก, แƒกแƒแƒ“แƒแƒช แƒชแƒแƒšแƒ™แƒ” แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ crawl-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

fiber = require('fiber')
net_box = require('net.box')
box.cfg{listen = 3300}
box.schema.func.create('libcapped-expirationd.start', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.start')
box.schema.func.create('libcapped-expirationd.kill', {language = 'C'})
box.schema.user.grant('guest', 'execute', 'function', 'libcapped-expirationd.kill')
box.schema.space.create('tester')
box.space.tester:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
box.space.tester:create_index('exp', {unique = false, parts = {3, 'unsigned'}})
capped_connection = net_box:new(3300)

แƒแƒฅ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ, แƒ แƒแƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ— แƒฎแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒก แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ•แƒ”แƒšแƒ˜แƒก แƒ—แƒแƒ•แƒ–แƒ” แƒ“แƒ แƒ•แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ— แƒ›แƒแƒก exp. แƒ”แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜, แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜ แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ. แƒ’แƒแƒ“แƒแƒ™แƒ•แƒ”แƒ—แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ”แƒฅแƒกแƒžแƒšแƒฃแƒแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ—, แƒฎแƒแƒšแƒ แƒฌแƒแƒจแƒšแƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฎแƒกแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒ“แƒ แƒ” แƒแƒ แƒ˜แƒ•แƒ” แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ›แƒแƒกแƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒขแƒแƒ แƒ”แƒ‘แƒ— แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก แƒแƒฎแƒแƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒ—:

capped_connection:call('libcapped-expirationd.start', {'indexed', box.space.tester.id, box.space.tester.index.primary, box.space.tester.index.exp, 3, 1024, 3600})

แƒ›แƒแƒ“แƒ˜แƒ— แƒ™แƒ•แƒšแƒแƒ• แƒฉแƒแƒ•แƒกแƒ•แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒแƒžแƒ˜ แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒจแƒ˜ 60 แƒฌแƒแƒ›แƒ˜แƒก แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ˜แƒ—:

box.space.tester:insert{0, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{1, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{2, '[email protected]', math.floor(fiber.time()) + 60}

30 แƒฌแƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒแƒžแƒก:

box.space.tester:insert{3, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{4, '[email protected]', math.floor(fiber.time()) + 60}
box.space.tester:insert{5, '[email protected]', math.floor(fiber.time()) + 60}

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ—, แƒ แƒแƒ› แƒฉแƒแƒกแƒ›แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ:

tarantool> box.space.tester.index.primary:select()
---
- - [0, '[email protected]', 1576421257]
  - [1, '[email protected]', 1576421257]
  - [2, '[email protected]', 1576421257]
  - [3, '[email protected]', 1576421287]
  - [4, '[email protected]', 1576421287]
  - [5, '[email protected]', 1576421287]
...

แƒ’แƒแƒ•แƒ˜แƒ›แƒ”แƒแƒ แƒแƒ— แƒแƒ แƒฉแƒ”แƒ•แƒ 60+ แƒฌแƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ (แƒ˜แƒ—แƒ•แƒšแƒ˜แƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒขแƒแƒžแƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜แƒ“แƒแƒœ) แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒแƒ› แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜ แƒ•แƒแƒ“แƒแƒ’แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ:

tarantool> box.space.tester.index.primary:select()
---
- - [3, '[email protected]', 1576421287]
  - [4, '[email protected]', 1576421287]
  - [5, '[email protected]', 1576421287]
...

แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒจแƒ˜ แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ“แƒแƒ แƒฉแƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒแƒžแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ™แƒ˜แƒ“แƒ”แƒ• 30 แƒฌแƒแƒ›แƒ˜ แƒ”แƒฅแƒœแƒ”แƒ‘แƒแƒ— แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ”. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒฌแƒงแƒ“แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒ“แƒแƒ˜แƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ“แƒ แƒขแƒแƒžแƒ˜แƒ“แƒแƒœ ID 2-แƒ˜แƒ— แƒ“แƒ แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ 1576421257 แƒขแƒฃแƒžแƒšแƒ–แƒ” ID 3-แƒ˜แƒ— แƒ“แƒ 1576421287 แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒแƒ–แƒ”. แƒ”แƒฅแƒกแƒžแƒšแƒฃแƒแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ“แƒแƒœแƒแƒ–แƒแƒ’แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒแƒช แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœแƒ•แƒ” แƒ’แƒ•แƒ˜แƒœแƒ“แƒแƒ“แƒ.

แƒจแƒ”แƒ•แƒแƒฉแƒ”แƒ แƒแƒ— แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ:

capped_connection:call('libcapped-expirationd.kill', {'indexed'})

ะ ะตะฐะปะธะทะฐั†ะธั

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒ—แƒฅแƒ›แƒ”แƒšแƒแƒ“ แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒ–แƒ แƒ›แƒ˜แƒกแƒ˜ แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒฌแƒงแƒแƒ แƒแƒ. แƒ™แƒแƒ“แƒ˜! แƒžแƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒแƒก แƒ’แƒแƒ•แƒแƒ›แƒแƒฎแƒ•แƒ˜แƒšแƒ”แƒ‘แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ แƒžแƒฃแƒœแƒฅแƒขแƒ”แƒ‘แƒ–แƒ”, แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒ•แƒšแƒ˜แƒ—แƒ˜ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ”แƒ‘แƒ–แƒ”.

แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒชแƒ”แƒ›แƒ— แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒก, แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ expirationd_task:

struct expirationd_task
{
  char name[256];
  uint32_t space_id;
  uint32_t rm_index_id;
  uint32_t it_index_id;
  uint32_t it_index_type; 
  uint32_t field_no;
  uint32_t scan_size;
  uint32_t scan_time;
};

แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜. space_id แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜. rm_index_id แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒฌแƒงแƒšแƒ”แƒ‘แƒ˜ แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ. it_index_id แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ. it_index_type แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒขแƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ. filed_no แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก tuple แƒ•แƒ”แƒšแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. scan_size แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ— แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜. scan_time แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒ แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒจแƒ แƒแƒ›แƒแƒขแƒ”แƒ•แƒแƒ“แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— msgpuck. แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒจแƒ•แƒแƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ Lua-แƒ“แƒแƒœ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ mp_map แƒขแƒ˜แƒžแƒ˜แƒก, แƒ“แƒ แƒแƒ แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒก mp_bool, mp_double, mp_int, mp_uint แƒ“แƒ mp_array. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒแƒ‘แƒ, แƒ’แƒแƒ›แƒแƒ—แƒ•แƒแƒšแƒแƒ— แƒขแƒ˜แƒžแƒ˜ แƒ“แƒ แƒแƒ›แƒแƒ˜แƒฆแƒแƒ— แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒฉแƒแƒ›แƒแƒ•แƒ—แƒ•แƒšแƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

bool expirationd_parse_name(struct expirationd_task *task, const char **pos);
bool expirationd_parse_space_id(struct expirationd_task *task, const char **pos);
bool expirationd_parse_rm_index_id(struct expirationd_task *task, const char **pos);
bool expirationd_parse_rm_index_unique(struct expirationd_task *task, const char **pos);
bool expirationd_parse_rm_index(struct expirationd_task *task, const char **pos);
bool expirationd_parse_it_index_id(struct expirationd_task *task, const char **pos);
bool expirationd_parse_it_index_type(struct expirationd_task *task, const char **pos);
bool expirationd_parse_it_index(struct expirationd_task *task, const char **pos);
bool expirationd_parse_field_no(struct expirationd_task *task, const char **pos);
bool expirationd_parse_scan_size(struct expirationd_task *task, const char **pos);
bool expirationd_parse_scan_time(struct expirationd_task *task, const char **pos);

แƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ–แƒ” - แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒแƒ•แƒšแƒ˜แƒ— แƒ“แƒ แƒขแƒฃแƒžแƒšแƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒแƒ–แƒ”. แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ scan_size-แƒก, แƒ“แƒแƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜. แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ”แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒšแƒ˜แƒ; แƒ—แƒฃ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ›แƒแƒฎแƒ“แƒ, แƒ˜แƒก แƒฃแƒ™แƒแƒœ แƒ˜แƒฎแƒ”แƒ•แƒ. expirationd_iterate แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒ“แƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜ แƒ˜แƒขแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒกแƒ™แƒ”แƒœ, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒแƒœ แƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ. แƒ”แƒก แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—, แƒกแƒแƒœแƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒ  แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒกแƒ˜แƒ•แƒ แƒชแƒ” แƒแƒ›แƒแƒ˜แƒฌแƒฃแƒ แƒ”แƒ‘แƒ แƒแƒœ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ expirationd_expired แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก tuple-แƒ˜แƒก แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ”แƒก, expirationd_delete แƒฌแƒแƒจแƒšแƒ˜แƒก แƒขแƒแƒžแƒก, expirationd_breakable แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก, แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ.

Expirationd_iterate แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

static bool
expirationd_iterate(struct expirationd_task *task, box_iterator_t **iterp)
{
  box_iterator_t *iter = *iterp;
  box_txn_begin();
  for (uint32_t i = 0; i < task->scan_size; ++i) {
    box_tuple_t *tuple = NULL;
    if (box_iterator_next(iter, &tuple) < 0) {
      box_iterator_free(iter);
      *iterp = NULL;
      box_txn_rollback();
      return false;
    }
    if (!tuple) {
      box_iterator_free(iter);
      *iterp = NULL;
      box_txn_commit();
      return true;
    }
    if (expirationd_expired(task, tuple))
      expirationd_delete(task, tuple);
    else if (expirationd_breakable(task))
      break;
  }
  box_txn_commit();
  return true;
}

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ expirationd_expired:

static bool
expirationd_expired(struct expirationd_task *task, box_tuple_t *tuple)
{
  const char *buf = box_tuple_field(tuple, task->field_no - 1);
  if (!buf || mp_typeof(*buf) != MP_UINT)
    return false;
  uint64_t val = mp_decode_uint(&buf);
  if (val > fiber_time64() / 1000000)
    return false;
  return true;
}

Expirationd_delete แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

static void
expirationd_delete(struct expirationd_task *task, box_tuple_t *tuple)
{
  uint32_t len;
  const char *str = box_tuple_extract_key(tuple, task->space_id, task->rm_index_id, &len);
  box_delete(task->space_id, task->rm_index_id, str, str + len, NULL);
}

Expirationd_breakable แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

static bool
expirationd_breakable(struct expirationd_task *task)
{
  return task->it_index_id != task->rm_index_id && task->it_index_type == ITER_GT;
}

แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก

แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒฅ แƒแƒฅ!

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ