О вашей первой причине выбора подхода, основанного на происхождении - я не думаю, что когда-либо видел какие-либо обещания в отношении физического местоположения в хранилище данных - я думаю, что любое такое ограничение вступит в противоречие с его высокой масштабируемостью.Я бы не волновался об этом, ИМХО, выигрыш от такой оптимизации эффективности, если таковой вообще был бы, незначителен.
Вы должны знать, что конфликт не имеет прямого отношения к (сильной) согласованности (согласованность действительно сводится к нулю)только на точность результатов запроса).
Конфликт, однако, напрямую связан с одновременным доступом к одной и той же группе объектов, даже для операций чтения, а не только для записи - см. Проблемы конфликта в Google App Engine .Использование предков только ухудшает ситуацию, поскольку все сущности в дереве предков находятся в одной и той же группе сущностей.
По 2-й причине (если я правильно понимаю вашу цель) вам не нужно хранить ключи ответа в своемВопрос сущности или использование родословной.Если вы сохраняете ключ вопроса (или идентификатор ключа) в объекте ответа, вы можете получить ответы на вопрос, выполняя регулярные (не являющиеся предками) запросы для объектов ответа с соответствующим ключом / идентификатором вопроса.
«Блокировка» группы объектов видна только в транзакциях (и нет, транзакции не применяются, но дважды подумайте, прежде чем пытаться записывать внешние транзакции - произойдет непреднамеренная перезапись).Но учтите, что такая блокировка эффективна только для защиты от конфликтующих операций записи, но не от конфликтов.