Google App Engine: как ускорить запрос к базе данных по свойству с короткой строкой?

#java #google-app-engine

#java #google-app-engine

Вопрос:

У меня довольно простой запрос к базе данных:

 Query q = new Query("person");
q.addFilter("name", Query.FilterOperator.EQUAL, req.getParameter("n"));
PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asList(FetchOptions.Builder.withDefaults())) {
// ...
}
  

Итак, это простой поиск по всем записям для данного имени. Имя не уникально и содержит максимум 16 символов. Насколько я знаю, индекс для коротких строк (<500 символов) генерируется автоматически.

В таблице около 100000 записей. Для запроса базы данных требуется более 8 секунд, чтобы получить все (около 10) объектов.

Теперь вопрос в том, как его ускорить?

Комментарии:

1. Насколько велики эти объекты в целом?

2. Объекты довольно маленькие. Всего: 3 целых числа, 1 строка и 1 дата.

3. Это в рабочей среде или на сервере приложений разработчика в sdk?

4. Я только что запустил его на dev-appserver в sdk, запустил с eclipse (google-plugin). Как вы думаете, он будет готов на рабочем сервере за несколько миллисекунд?

5. С точки зрения производительности существует большая разница между средами разработки и производства. Не беспокойтесь о производительности в среде разработки, вместо этого заботьтесь о правильности.

Ответ №1:

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

Поэтому не вставляйте так много данных в сервер приложений разработчика. Используйте его для тестирования базовой функциональности, затем развертывания и вставки ваших 1000000 объектов вместо этого в рабочий app Engine appserver, где фактически генерируются и используются индексы.

Комментарии:

1. Существует также возможность иметь тестовую версию вашего приложения (технически отдельное приложение), которую вы развертываете для тестирования производительности.