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)

Который закончился с той же ошибкой. Итак, мои вопросы:

  1. Как я могу получить постоянное количество последних документов по дате?

  2. Возможно ли упорядочение по строковому полю даты? Эта проблема как-то связана с моим первым вопросом?

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})

Другие вопросы по тегам