AppEngine, преодоление лимита в 1000 элементов на запрос

Google app engine, очень удобная и гибкая платформа, для веб разработки, но к сожалению постоянно приходится думать об ограничениях, налагаемых на процессорное время, объем занимаемой памяти, запросы к хранилищу, тем самым, организовывая нас, заставляя писать более оптимизированный код. С другой стороны, а что если действительно нужно выполнять сложную операцию, или «тяжелый запрос»? Тогда хотелось бы «спрятать», сложности и ограничения app engine внутрь изящного синтаксиса python. В данном случае предлагается использовать питоновые итератиры, для того, что бы прозрачно для пользователя, выбирать неограниченное количество записей из app engine. Хотя, как видно из кода, все-таки некоторые ограничения встроены в класс, в ствойстве _debug_limit.

Вот код итератора:

class QueryIter():

    _limit_fetch = 1000
    _items = None
    _cursor = None
    _debug_limit = 10000

    def __init__(self, query):
        self._query = query
        self._fetchNext()        

    def _fetchNext(self):
        self._items = iter(self._query.fetch(self._limit_fetch))
        self._cursor = self._query.cursor()        

    def __iter__(self):
        return self

    def next(self):
        self._debug_limit -= 1
        if self._debug_limit < = 0:
            raise StopIteration
        else:
            try:
                result = self._items.next()
            except StopIteration, e:
                self._query.with_cursor(self._cursor)
                self._fetchNext()
                result = self._items.next() # raised exception stop the loop
            return result

А вот, пример применения:

query = MyModel.all()
for i in QueryIter(query):
    print i

Comments

comments

7 comments On AppEngine, преодоление лимита в 1000 элементов на запрос

  • Ну почему никто не комментирует? Ведь изящнейшее решение!

  • А у _debug_limit откуда ноги растут? Это ограничение Gae на максимальное кол-во элементов в выборке? Или это вы сами добавили? Может стоит тогда последовательно вызывать проверку на наличие записей, и порождать новый цикл итераций?

  • _debug_limit это собственное ограничение, так сказать, здравого смысла, когда вы точно знаете что больше чем 100000 записей нет смыла выбирать

  • Ошибка в заголовке: “елементов” => “элементов”.

  • Спасибо. Исправил.

  • “Вод код”.
    Решение удобное, можно в библиотеку его вынести.

  • dendperhyvi1977

    _, Useful article – I am often interested in relevant articles. Some other sources you like to share? Will be checking back again to get a response =)

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

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

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: