Хранилище данных высокой репликации GAE (HRD) с транзакцией - PullRequest
2 голосов
/ 19 февраля 2012

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

Поймите, что нетранзакционные (не предшествующие) запросы могут видеть все, некоторые или ни одного из результатов ранее совершенной транзакции.

Проблема, с которой я столкнулся сейчас: После совершения транзакции для добавления новой записи в db

  Transaction tx = pm.currentTransaction();
  tx.begin();
  pm.makePersistent(object);
  tx.commit();
  • Следуйте по запросу зафиксированной записи, иногда она будет возвращать результат, а некоторое время просто возвращается как ноль

      Query q = pm.newQuery(queryStatement);        
      CompanyProfile result = (CompanyProfile) q.execute();
    

p / s: при выключении HRD работает отлично.

Есть ли обходной путь?

Спасибо Rgds SJ

Ответы [ 3 ]

1 голос
/ 19 февраля 2012

Обойти это невозможно: HRD всегда в конечном итоге непротиворечивы: http://code.google.com/appengine/docs/python/datastore/queries.html#Setting_the_Read_Policy_and_Datastore_Call_Deadline

Одним из способов будет использование get вместо запроса.Get / put / delete строго согласованы в HRD, в то время как запрос в конечном итоге согласован: http://code.google.com/appengine/docs/java/datastore/hr/

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

0 голосов
/ 21 февраля 2012

Если следующий запрос также выполняется в рамках той же транзакции, он должен вернуть правильный результат. Однако все остальные запросы в конечном итоге согласованы, к сожалению, это характер хранилища данных.

0 голосов
/ 19 февраля 2012

Возможно, вы захотите взглянуть на Google Cloud SQL, если хотите использовать модель реляционной базы данных: https://developers.google.com/cloud-sql/ Я сам не пробовал, но в своем приложении я не использую транзакции.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...