2015-08-04 4 views
2

Я пытаюсь реализовать пейджинг в своем приложении в google-приложении, используя python datastore api. Мое требование - отображать пользовательские данные, используя бесконечный список. Моя текущая реализация использует курсор с чем-то вроде этого:поисковый движок google app и курсор

//retrieve current_cursor 
    all_data = my_data.all().order('-created') 
    data = all_data.fetch(limit=10, start_cursor=current_cursor) 
    current_cursor = all_data.cursor() 
    //save current_cursor 

В моем понимании, курсор работает на запрашиваемый result_set, что позволяет экономить время последующих запросов (но не первый), я правильно?

Я обеспокоен тем, что если у нас есть большой объем данных, первый запрос всегда будет слишком медленным. Для того чтобы сделать запрос в первый раз быстрее, я считаю, что вместо запроса всех данных я разбиваю запрос на несколько меньших, например, устанавливая фильтр с помощью ('created >', certain_date) и используя курсор для получения результатов в каждом наборе.

Однако недостатком является то, что я должен буду поддерживать certain_date самостоятельно, и если вы не выбрали его с умом, это может стоить мне большого количества прочитанных баз данных.

Итак, мой вопрос: правильно ли я понимаю курсор? Кроме того, существуют ли более эффективные способы использования Google Datastore для поддержки этого или любых предложений в целом для реализации этого? Благодаря!

+0

Есть ли [это] (http://stackoverflow.com/questions/6557791/how-to-understand-cursor-correctly) помощь? Вы действительно испытываете проблемы с производительностью? – tx802

+0

Спасибо! Я прочитал сообщение раньше, но все еще не мог понять, и все еще чувствовал, что первый запрос занял больше времени. Теперь похоже, что это могут быть другие вещи. Я вернусь, чтобы проверить мои коды. –

ответ

2

Нет, первый запрос не будет медленнее. Преимущество использования курсора заключается в том, что он обрабатывает только определенный набор, в зависимости от положения курсора и предела, в отличие от комбинации смещения и предела, которая обрабатывает весь набор данных и просто показывает вам нужную часть.

Курсоры запросов позволяют приложению получать результаты запроса в удобных партиях, не налагая накладные расходы на смещение запроса.

Что касается предложения, для нумерации страниц, курсор является лучшим вариантом, другие предложения должны использовать Projections, постарайтесь, чтобы наилучшим образом использовать кэш с помощью get_by_id.

+0

Ах. Так что в первый раз он не будет запрашивать все это, но только количество результатов, которые я получаю? Похоже, я был неправ. Благодарю. Я также посмотрю Прогнозы. –

Смежные вопросы