2015-12-17 4 views
0

Я пытаюсь уменьшить стоимость хранилища данных с помощью Projection. Я прочитал, что запрос Проекции стоит только 1 операции чтения, но в моем случае стоимость Проекции идет больше, чем 1. Вот код:Затраты проекции на Google App Engine более 1

 Query<Finders> q = ofy().load().type(Finders.class).project("Password","Country"); 
     for(Finders finder:q) 
     { 
      resp.getWriter().println(finder.getCountry()+" "+finder.getPassword()); 
     } 

На выполнении этого д-объект содержит 6 пунктов и в извлеките эти 6 элементов, которые требуется 6 операций чтения, как показано в Appstats. Может ли кто-нибудь сказать мне, что здесь не так?

+0

Я ничего не знаю об объективизации, но я считаю, что вы можете либо получить результаты в виде списка, либо установить скорость запроса (пакетной) в запросе. Вы можете обнаружить, что итерация извлекает каждый результат в виде отдельных операций. –

+0

@TimHoffman. Моя основная задача - получить все элементы с одной операцией чтения. Поэтому я хотел использовать проекционный запрос. –

ответ

0

Чтобы прочитать все элементы (с одной операцией чтения, если они все подходят), вызовите .list() по запросу, чтобы получить List<Finders>. Вместо этого вы выбрали итерацию по запросу, и это вполне вероятно, что вы не будете полагаться на один, возможно, огромный, который читается из хранилища данных, но детали посылки больше.

В каких проекциях ввести изображение совсем другое: если у вас есть объекты с полями или некоторые очень большие поля, и в определенном случае вы знаете, что вам нужно только определенное подмножество полей (особенно если это не требуется «некоторые очень большие поля»), то проекция - очень мудрая идея, потому что она избегает чтения вещей, которые вам не нужны.

Это делает более вероятным то, что определенная выборка (например, 10 сущностей) займет одно чтение данных - есть байт-лимиты на то, сколько может исходить из одного хранилища данных, поэтому, если путем тщательного выбора и выбора поля, на которые вы действительно нуждаетесь, вы читаете только (скажем) 10 тыс. на объект, а не (скажем) 500 тыс. на сущность, то, очевидно, вам может потребоваться меньше чтений из хранилища данных.

Но если вы не делаете одного большого массива, прочитанного с .list(), но сущность по-сущности, читаемая итерацией, то, скорее всего, вы все равно получите несколько чтений - по существу, путем повторения, вы сказали вы хотите это! -)

+0

Спасибо за ответ! ... Я заберу максимум 100 объектов, поэтому, если я использую .list(), это приведет к 1 операции чтения или 100 операций чтения? –

+0

Я использовал операцию .list() в запросе, но он показывает 6 операций чтения. Итак, как я могу использовать list() для извлечения записей, используя только 1 операцию чтения? –

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

  • Нет связанных вопросов^_^