rethinkdb: "RqlRuntimeError: Array over limit size" даже при использовании limit()
Я пытаюсь получить доступ к постоянному количеству последних документов таблицы, упорядоченных по ключу "дата". Обратите внимание, что дата, к сожалению, была реализована (не мной...) так, что значение устанавливается в виде строки, например, "2014-01-14" или иногда "2014-01-14 22:22:22", Я получаю "RqlRuntimeError: Array over size limit 102173"
сообщение об ошибке при использовании следующего запроса:
r.db('awesome_db').table("main").orderBy(r.desc("date"))
Я попытался преодолеть эту проблему, указав постоянный лимит, так как на данный момент мне нужны только последние 50:
r.db('awesome_db').table("main").orderBy(r.desc("date")).limit(50)
Который закончился с той же ошибкой. Итак, мои вопросы:
Как я могу получить постоянное количество последних документов по дате?
Возможно ли упорядочение по строковому полю даты? Эта проблема как-то связана с моим первым вопросом?
3 ответа
Причина, по которой вы получаете ошибку, состоит в том, что orderBy
оценивается до limit
поэтому он упорядочивает всю таблицу в памяти, которая превышает предел массива. Способ исправить это с помощью и индексации. Попробуйте сделать следующее:
table.indexCreate("date")
table.indexWait()
table.orderBy({index: r.desc("date")}).limit(50)
Это должно быть эквивалентно тому, что у вас есть, но использует индекс, чтобы не требовать загрузки всей таблицы в память.
Этот код является решением проблемы.
ro: = r.RunOpts {ArrayLimit: 500000}
r.DB ("wrk"). Table ("log"). Run (sessionArray [0],ro)
// Этот код для Python r.db('awesome_db'). Table("main"). Run(sesion, r.runOpts{arrayLimit: 500000})