App Engine: как "сбросить" хранилище данных?

Ну, я разрабатываю в App Engine (Java), и после многих попыток и развертываний мне нужно сброс хранилище данных. Есть много случайных данных, которые я добавил для тестирования производительности, и кроме того, объекты сильно изменились, поэтому мне нужно удалить все: данные, таблицы, индексы.

Как я могу это сделать?

15 ответов


в SQL нет встроенной команды, эквивалентной DROP TABLE или TRUNCATE TABLE. Вам просто нужно создать страницу "удалить все" в вашем приложении, а затем повторно вызвать эту страницу с помощью скрипта. На этой странице вы хотите удалить столько объектов, сколько еще можно ожидать до истечения времени ожидания запроса. Точный код зависит от того, используете ли вы JDO/JPA или низкоуровневый API. (API низкого уровня будет быстрее, потому что вы можете использовать пакет оперативный.)

этой так что вопрос в значительной степени тот же, только для Python


Извините, что разбудил эту тему, но на всякий случай я хотел бы добавить совет для таких, как я (наконец, нашел ответ в документации google):

Если вы хотите сбросить местные хранилище данных (например, при разработке с помощью eclipse) все сразу, выключите сервер, найдите файл'local_db.бин' в вашем проекте (должен быть в каталоге WEB-INF/appengine-generated/) и удалите его.

отлично работает с java, не пробовал с питон пока.

++


очистка хранилища данных сервера разработки

веб-сервер разработки использует локальную версию хранилища данных для тестирования приложения, используя временные файлы. Данные сохраняются до тех пор, пока существуют временные файлы, и веб-сервер не сбрасывает эти файлы, если вы не попросите его сделать это.

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

dev_appserver.py --clear_datastore файл HelloWorld/

через хранилища данных


просто выполните запрос без фильтра, чтобы получить все объекты и удалить их один за другим.

import javax.servlet.http.*;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

public class MyServlet extends HttpServlet {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        DatastoreService datastore = 
                    DatastoreServiceFactory.getDatastoreService();

    Query mydeleteq = new Query();
    PreparedQuery pq = datastore.prepare(mydeleteq);
    for (Entity result : pq.asIterable()) {
        datastore.delete(result.getKey());      
    }   
}

извините, что так поздно, но я просто пытался сделать то же самое сам...

Я вошел в свою учетную запись (appengine.google.com) и нашел возможность просматривать хранилище данных с помощью утилиты администратора (datastore / dataviewer)... это позволяет создавать / обновлять / удалять.


согласно документам GAE вы можете удалить несколько объектов в JDO, вызовите deletePersistentAll (...) метод с коллекцией объектов.

PersistenceManager pm = PMF.get().getPersistenceManager();

Query query = pm.newQuery("select from " + Your.class);

List<Your> objs = (List<Your>) query.execute();

pm.deletePersistentAll(objs);

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

чтобы включить эту функцию, просто включите следующее встроенное приложение.файл yaml:

builtins:
- datastore_admin: on

добавление этих строк в приложение.yaml включает страницу "администратор хранилища данных" в консоли администратора вашего приложения


Если вы используете maven в своем проекте, вы можете просто сделать "чистую установку mvn". Что сбросит хранилища локально конечно.


удаление локальных данных можно сделать, открыв http://localhost:8000/datastore


в моем случае (работа с Eclipse plugin и Play framework) мне пришлось остановить приложение, удалить файл /приложения/crud-gae/tmp/datastore, а затем перезапустить приложение

Это сработало для меня... работает, конечно, на месте...


при работе локально в Windows 7 файл является user\UserName\AppData\Local\Temp\dev_appserver.хранилище данных


я использовал App engine с Google Coursebuilder и должен был использовать эту команду, чтобы очистить хранилище данных:

python dev_appserver.py --clear_datastore /path/to/app

из контекста для Java dev, но так как документации мало, вот как это сделать в go:

keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)

чтобы добавить еще один бит полезной информации: если вы используете Eclipse и хотите очистить локальное хранилище данных, найдите эту консоль msg:

INFO: Local Datastore initialized: 
Storage: C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin

он появляется только после того, как вы делаете что-то, чтобы принудительно инициализировать хранилище данных, например, которое может обновлять список сущностей на странице администратора. Затем остановите сервер и удалите файл, и при перезапуске вы увидите:

INFO: The backing store, C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.

Это не работает для меня.

У меня есть приложение GAE, где я должен войти в меня в начале.

Я удалил свой local_db.bin file (у меня есть больше файлов в этой папке: datastore-indexes-auto.xml и local_search.bn). Я снова открыл свой проект и запустил его как. Когда я запускаю свой main .jsp, это запрос загрузки из моего хранилища данных, но у меня нет данных в моем хранилище данных и спрашивает меня о моем PMF (persistent manager factory).

должен ли я удалить больше вещи?

точно, я пытаюсь открыть: localhost: 8888/_ah/admin/ но он не найден.

Диего.