Мне нравится простота, масштабируемость и простота использования хранилища данных; и улучшения, обнаруженные в новой библиотеке ndb, являются сказочными.ищет идеи/альтернативы предоставлению количества страниц/элементов/навигации элементов, соответствующих запросу хранилища данных GAE
Насколько я понимаю лучшие практики хранилища данных, не следует писать код, чтобы указать количество элементов и/или количество совпадающих результатов запроса, когда количество элементов, соответствующих запросу, велико; потому что единственный способ сделать это - получить все результаты, которые являются ресурсоемкими.
Однако во многих приложениях, в том числе и у нас, существует общее желание увидеть количество совпадающих элементов и предоставить пользователю возможность перейти к определенной странице этих результатов. Проблема подкачки хранилища данных еще более усложняется требованием обходить ограничения выборки (предел, смещение = X), как указано в статье Paging Through Large Datasets. Чтобы поддержать рекомендуемый подход, данные должны включать столбцы с уникальной оценкой, которые можно упорядочить так, как должны отображаться результаты. Этот столбец будет определять начальное значение для каждой страницы результатов; экономя его, мы можем получить соответствующую страницу эффективно, позволяя навигацию на определенной или следующей странице по мере необходимости. Поэтому, если вы хотите показать результаты, упорядоченные несколькими способами, возможно, потребуется сохранить несколько таких столбцов.
Следует отметить, что с SDK v1.3.1, Query Cursors рекомендуется использовать подкачку datastore. У них есть некоторые ограничения, в том числе отсутствие поддержки операторов IN и! = Filter. В настоящее время некоторые из наших важных запросов используют IN, но мы попробуем их написать, используя ИЛИ для использования с курсорами запросов.
Следуя инструкциям, предложенных, пользователь может быть дан (Next) и (Prev) навигационные кнопки, а также кнопки конкретные страницы, как навигация протекала. Например, если пользователь нажал (Next) 3 раза, приложение может отображать следующие кнопки, помня о уникальной стартовой записи или курсоре для каждого, чтобы сохранить эффективность навигации: (Pre-) (Страница-1) (Страница-1)) (Страница-3) (Страница-4) (далее).
Некоторые из них предложили отслеживать счета отдельно, но этот подход нецелесообразен, когда пользователям будет разрешено запрашивать богатый набор полей, которые будут отличаться от полученных результатов.
Я ищу идеи по этим вопросам в целом и следующие вопросы конкретно:
Какие навигационных вариантами результатов запроса вы предоставляете в хранилище данных приложений, чтобы работать вокруг этих ограничений?
Если предоставления пользователям эффективных результатов подсчетов и навигации по страницам всего набора результатов запроса является одним из приоритетов, следует использовать в датасторе отказаться в пользу GAE MySql solution сейчас предлагается.
Есть ли какие-либо изменения в архитектуре большой таблицы или реализация хранилища данных, которая обеспечит дополнительную возможность для эффективно подсчет результатов запроса?
Большое спасибо за вашу помощь.
Предполагая, что мы используем подход C = query.count (N), чтобы показать пользователю «1-20 из C» или «1-20 из многих», как мы определяем разумную стоимость, затратную для N. В нашем использовании случай 100 будет слишком маленьким. Любые предложения о том, как наилучшим образом оценить это, чтобы сохранить стоимость $ вниз? Из документов NDB: «Обратите внимание, что count(), а быстрее, чем fetch(), все равно выполняет много работы каждый раз, когда он вызывается «Сколько квот используется? Guido, Спасибо за Python, NDB и вашу помощь :) IMO-страницы и навигация - отличная возможность для некоторых приложений, потому что пользователи могут оценивать и корректировать размер данных, соответствующих их параметрам перед сверлением. –
Вы можете вычислить стоимость, используя эту страницу: http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Costs. AFAIK a Count() похож на запрос только для ключей. (в зависимости от про Если у вас ограниченное количество отсчетов для кеширования, вы можете хранить счета в хранилище данных, используя шаблон с зачеркнутым счетчиком.) –
Также обновление по запросам IN/OR: вы можете превратить любой запрос в курсор -поддерживая запрос, добавив заказ __key__ в конце существующего порядка сортировки. Например. в NDB: 'Employee.query (Employee.name.IN (['Joe', 'Jane'])). order (Employee.name, Employee.key) .fetch_page (N)' - без заказа Employee.key он вызывает BadArgumentError. –