2017-09-06 27 views

答えて

2

はい、あなたはTarantool中やRedisの中よりもはるかに柔軟な方法でデータを期限切れにすることができます。空間はスペースなしでTarantoolのデータのコンテナ(他のデータベースシステムのデータベースやテーブルなど)であるため、これをスペースなしで行うことはできません。

データを期限切れにするには、tarantoolctl rocks install expirationdコマンドを使用してexpirationd tarantool rockをインストールする必要があります。 expirationdデーモンの全文はhereです。

#!/usr/bin/env tarantool 

package.path = './.rocks/share/tarantool/?.lua;' .. package.path 

local fiber = require('fiber') 
local expirationd = require('expirationd') 


-- setup the database 

box.cfg{} 
box.once('init', function() 
    box.schema.create_space('test') 
    box.space.test:create_index('primary', {parts = {1, 'unsigned'}}) 
end) 

-- print all fields of all tuples in a given space 
local print_all = function(space_id) 
    for _, v in ipairs(box.space[space_id]:select()) do 
     local s = '' 
     for i = 1, #v do s = s .. tostring(v[i]) .. '\t' end 
     print(s) 
    end 
end 

-- return true if tuple is more than 10 seconds old 
local is_expired = function(args, tuple) 
    return (fiber.time() - tuple[3]) > 10 
end 

-- simply delete a tuple from a space 
local delete_tuple = function(space_id, args, tuple) 
    box.space[space_id]:delete{tuple[1]} 
end 

local space = box.space.test 

print('Inserting tuples...') 

space:upsert({1, '0 seconds', fiber.time()}, {}) 
fiber.sleep(5) 
space:upsert({2, '5 seconds', fiber.time()}, {}) 
fiber.sleep(5) 
space:upsert({3, '10 seconds', fiber.time()}, {}) 

print('Tuples are ready:\n') 

print_all('test') 

print('\nStarting expiration daemon...\n') 

-- start expiration daemon 
-- in a production full_scan_time should be bigger than 1 sec 
expirationd.start('expire_old_tuples', space.id, is_expired, { 
    process_expired_tuple = delete_tuple, args = nil, 
    tuples_per_iteration = 50, full_scan_time = 1 
}) 

fiber.sleep(5) 
print('\n\n5 seconds passed...') 
print_all('test') 

fiber.sleep(5) 
print('\n\n10 seconds passed...') 
print_all('test') 

fiber.sleep(5) 
print('\n\n15 seconds passed...') 
print_all('test') 

os.exit() 

は、以下のサンプルコードを使用してお気軽に

関連する問題