Как быстро получить N последних записей из rethinkdb?
Допустим, вы хотите получить 3 первые записи из rethinkdb. Это легко сделать с помощью:
objects = r.db("db").getAll(val, {index:"index"}).limit(N)
Но для того, чтобы получить последние N записей, вы должны получить счетчик, количество объектов, а затем сделать срез следующим образом:
count = r.db("db").getAll(val, {index:"index"}).count(N)
objects = r.db("db").getAll(val, {index:"index"}).slice(count - N, count)
Существует огромная разница во времени:
Первый с.Limit в golang занимает: 63.28276ms
Второй с.Slice в Голанге занимает: 1.028439202s
дела orderBy
некоторая временная метка делает все еще медленнее.
Так что, как вы видите, это просто безумие с точки зрения скорости. Этот запрос выполнен по 26 000 документов в базе данных. Мне нужна идея, как это решить.
1 ответ
Итак, я перепробовал много вещей и получая последний N
записи будут медленными, поэтому я подхожу к проблеме по-другому. Я сделал некоторый сценарий, который ставит последний N
записывает каждый 20second
в file/redis
а затем я быстро читаю эти записи из веб-приложения Go.