2016-03-30 21 views
2

users alanından bazı kayıtları almam gerekiyor. Bu alan ikincil bir dizin category_status_rating sahip. Ben rating<=123456789, category=1, status=1 ile seçkin kullanıcıları gerekir: Bildiğim kadarıylaTarantool: index.indexName içinde limit/ofset: çift çağrı

for _, user in box.space.users.index.category_status_rating:pairs({ 1, 1, 123456789 }, { limit = 20, offset = 5, iterator = box.index.LE }) do 
    if user[categoryIdx] ~= 1 or user[statusIdx] ~= 1 then break end 
    table.insert(users, user) 
end 

, indexName:pairs ile yineleme limit desteklemez ve sadece kullanıcı kendi sayacı can. Peki ya offset? Bu paramı kullanabilir ve ihtiyacım olan "sayfa" dan başlayabilir miyim? Veya offset olmadan yinelemeli kayıtlar (yaklaşık 100000) ve "sayfa" başladığımda table.insert(users, user)'a geçecek mi? Teşekkürler!

+1

neden istediğini yapıp yapmadığını denemiyorsun? – Piglet

cevap

3

Ofset kullanmak yerine, gerçekten ihtiyacınız varsa, konumunuzu (en son kontrol edilen tuple) kaydedebilirsiniz. örneğin:

local last = 123456789 
for i = 1, 2 do 
    local users = box.space.users.index.category_status_rating:pairs({1, 1, last}, { iterator = box.index.LE }):take_n(20):map(function(user) 
     last = user[LAST_INDEX_FIELD] 
     return user 
    end):totable() 
    -- process your tuples 
end 

Documentation on LuaFun, embedded into Tarantool olup: luafun kullanılarak (drop_n limit analogudur, last içine tasarruf ofsetin analogu)

local last = 123456789 
for i = 1, 2 do 
    local count = 0 
    for _, user in box.space.users.index.category_status_rating:pairs({1, 1, last}, { iterator = box.index.LE }) do 
     if user[categoryIdx] ~= 1 or user[statusIdx] ~= 1 or count > 20 then 
      break 
     end 
     table.insert(users, user) 
     last = user[LAST_INDEX_FIELD] 
     count = count + 1 
    end 
    -- process your tuples 
end 

veya.

+0

Hmm ... Peki ya 'derecelendirme' benzersiz bir değer değilse? Bu, “ilk 20 kayıttan” kayıtların “son” pozisyonunu kullanacaksam ikinci 20 kayıtta olabileceği anlamına mı geliyor? –

+0

O zaman, işleme koyduğunuz 'son' derecesine sahip tuple sayısını saymanız ve (örneğin) drop_n işlevini kullanmanız gerekir. – bigbes