О том и речь. Антипаттерн, за который ругают Hibernate-оподобные framework'и (да простит меня hibernate если в последнее время там что-то поменялось) во всей красе. Но другого-то ничего нету. А хочется чтоб было :)
У вас — это вы имеете ввиду ТС или о платформе?
Если о платформе — надо на крон вешать SessionCleanupServlet, который находится в SDK, и соответственно, расположен на каждом инстансе. Кажется есть тикет, где просят сделать полностью автоматическую чистилку для контейнера приложений.
Так а никто и не говорит, что map/reduce работает эффективнее. Да, там приличный оверхед, да, там кривые медленные алгоритмы, но зато оно реально масштабируемо, и при нынешних ценах на железо это зачастую оказывается важнее.
А речь и не про mapreduce, хотя в пожирании такого количества процессорного времени, вполне возможно, виновата конкретно эта реализация. Профайлинг покажет.
Речь о том, что в нынешних облаках программисту навязывается порочный стиль общения с БД, и ему приходится изобретать оптимизатор запроса самостоятельно — то что в реляционных СУБД нужно делать достаточно редко.
Скоро введут новое хранилище, возможно основанное на том, на чем сидит bigquery, там как-то очень быстро выполняются выборки на очень-очень больших объемах данных (count(*) на 60 млрд записях выполняется за 3-6 секунд), после также посмотрим, что будет со скоростью операций чтения-записи.
Вообще они с базой в последнее время очень хорошо поработали, скоро будет много вкусного (например разрешили проблему «взрывающихся индексов»).
А MP действительно с большим оверхедом, но с помощью него вы за линейное время сможете оперировать над массивом данных абсолютно любого размера, в отличии от мускуля и пр. Каждую технологию надо применять с умом.
По поводу второй ссылки — хоть недавно лимит в 1000 и убрали, но 30 секунд на запрос никуда не делся, т.е ~25 секунд дается на использование внутреннего API. Это означает, что банально даже маленькую часть не успеем выбрать (практически все операции в store линейны по времени, ~40мс на запись весом 2 килобайта => 40.000 сек. на миллион записей), не говоря уже об удалении, что дает ~100мс на запись 2 кб =)
Кнопку нажимать совсем необязательно. Если вызывать SessionCleanupServlet с параметром clear (как и пишет Jason по указанной ссылке), то, сделав соответствующий cronjob, срабатывающий, например, каждую минуту, можно было бы за сутки решить вашу проблему. При этом вы имели бы возможность контролировать расход CPU и в случе чего остановить обработку.
контейнер приложений и использует мемкеш в связке с хранилищем. А чисто мемкеш нельзя — он у гугли не гарантирует сохранность данных на заявленное время, т.е. с небольшой вероятностью объект уже будет невозможно получить спустя очень небольшое время (секунды), хоть и клали мы его на полчаса, к примеру.
Чего стоит почистить datastore от сессий при помощи Mapper API