Я работаю над небольшим проектом, чтобы узнать о Google App Engine, проект на Java и имеет объекты Customer,
экземпляры Клиента могут иметь политику. Каждый клиент находится в своей собственной группе сущностей, так что транзакции могут быть использованы для
изменить клиента.
На главной странице сайта находится список клиентов, при добавлении нового клиента список клиентов снова отображается.
Поскольку каждый клиент находится в своей собственной группе сущностей, бывают случаи, когда вновь добавленный клиент не появляется в
новый список клиентов, обновление списка клиентов через несколько секунд, и клиент появится. Похожая проблема
существует при удалении клиентов, вы удаляете клиента, но он появляется в общем списке на несколько секунд. я понимаю
что этого следует ожидать в Google App Engine из-за возможной согласованности, которую обеспечивает хранилище данных.
Итак, я попытался обойти эту проблему, используя memcache для хранения клиентов, которые были недавно добавлены или недавно
удален. Код, который я использую ниже.
public List<Customer> getCustomers() {
List<Customer> cachedCustomers = myCache.getCached();
List<Customer> recentlyDeleted = myCache.getDeleted();
// Calls the real datastore.
List<Customer> dbCustomers = customerDao.getCustomerList();
Set<Customer> allCustomers = new HashSet<Customer>();
// Add cached first as these are most the most up todate.
allCustomers.addAll(cachedCustomers);
allCustomers.addAll(dbCustomers);
allCustomers.removeAll(recentlyDeleted);
List<Customer> allList = new ArrayList<Customer>();
allList.addAll(allCustomers);
Collections.sort(allList);
return allList;
}
Я спрашиваю здесь, потому что я думаю, что то, как я это делаю, не чувствует «правильный» способ сделать это и хотел бы
услышать от тех, кто знает лучшие способы обойти проблемы, которые создает возможная последовательность.