1
我有一個表~8000 quiz questions
。 他們分爲25 categories
。 每個類別都有一個屬性max_questions
,它告訴我有多少個問題需要我選擇randomly
來生成測驗。RethinkDB:獲取每個類別的隨機文檔
e.g
Category 1 -> 2 questions
Category 2 -> 3 questions
Category 3 -> 1 question
我想出了一個解決方案,但我大約需要。 2秒鐘執行。
r.table('categories').pluck('id', 'max_questions').orderBy('id').run(conn, function(err, cursor) {
if(err) return next(new Error(err.msg));
cursor.toArray(function(err, categories) {
if(err) return next(new Error(err.msg));
async.concat(categories, function(category, callback) {
r.table('questions').filter({category_id: category.id }).sample(category.max_questions).run(conn, callback);
}, function(err, questions) {
if(err) return next(new Error(err.msg));
res.json(questions);
});
});
});
有沒有更快的方式來檢索RethinkDB的問題?提出25個請求並撥打25次.sample()
進行一次測驗對我來說聽起來不太合適。
我真的很感謝你的幫忙!
這正是我想要的。它現在執行530ms。非常感謝! –
另外,如果你想讓這個更快,你可以創建一個索引category_id字段。 –
我將.filter({category_id:cat('id')})方法更改爲.getAll(cat('id'),{index:'category_id'})並獲得了大量性能改進。用rethinkdb 1.12.1 filter()花費~1.2秒,getAll()只花費〜150ms。任何想法爲什麼? –