понедельник, мая 17, 2010

Удалить индекс в GAE для Java проекта

Для тех кто мучается с этой задачей, вот решение из гуглогруп:

1) скачайте GAE python sdk
2) в вашем java проекте создайте файл app.yaml с таким содержимым:

application: YOURJAVA_APPID
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
script: main.py

3) из директории вашего java проекте запустите (предполагается appcfg.py прописан в PATH)
appcfg.py vacuum_indexes .

4) удалите индексы которые хотите удалить

5) удалите файл app.yaml

6) зазвездите здесь чтобы не приходилось так извращаться: http://code.google.com/p/googleappengine/issues/detail?id=1893

P.S. А вообще это какой-то позор и дискриминация.

5 комментариев:

OZKA комментирует...

А вопрос небольшой, что-то или плохо искал или...На одно приложение может быть максимум 100 индексов или это оплачиваемая квота?

p.s. За Issue проголосовал.

Лаврентий Палыч комментирует...

За деньги уже 200 дают ( http://code.google.com/appengine/docs/quotas.html#Datastore ) . И думаю можно запросить и больше если надо. Хотя мне сложно представить чтобы понадобилось 200 индексов в одном приложении.

OZKA комментирует...

Ясно, спасибо! Я просто только начал знакомиться с возможностями GAE. Я просто до конца не очень понимаю, где кроме ключевых полей еще могут использоваться индексы?

Я когда первый раз читал доки, то вообще подумал что они должны быть построены по всем полям, по которым нужно осуществлять поиск(where)/сортировку(order by), но на практике во всяком случае для сортировки они вроде не нужны.

Лаврентий Палыч комментирует...

Для каждого поля которое индексируемого типа (те не блоб и не text например) индекс по нему присутствует по умолчанию. Но если у тебя запрос типа "select from ATypae where Field1==param1 && Field2==param2 order by Field3 desc", то тебе уже понадобиться составной индекс по этим 3-м полям. В девелопмент сервере он у тебя может строится автоматически(там где-то указывается это в настройках вроде), но как только ты выкатишь приложение на appspot то сразу получишь в логи сообщения что тебе нужен тот или иной индекс для выполнения запроса.

OZKA комментирует...

Ясно, спасибо за информацию.