我在Google App Engine上使用Java,而且我最熟悉JDO数据存储区界面。我正在尝试实现一个简单的下载计数器,它将其数据存储在App Engine数据存储区中。
我只希望每月下载几千个,所以我的柜台的更新率会非常低。因此,我对分析计数器并不感兴趣。
务实地我可能会忽略锁定并接受我偶尔会丢失更新。但是,我想知道正确的方法是做什么而不会丢失任何更新。我知道在纯Java中我会使用同步,但我不清楚数据存储区中的等效机制是什么。
答案 0 :(得分:1)
根据您的要求,有很多方法可以做到这一点,包括分片。另一个选项是here。
答案 1 :(得分:0)
我在另一个答案中找到了这个:
int retries = 0;
int NUM_RETRIES = 10;
while (true) // break out below
{
retries++;
pm.currentTransaction().begin();
Object obj = pm.getObjectById(getTargetClass(), getKey());
// Make update to obj
try
{
pm.currentTransaction().commit();
break;
}
catch (JDOCanRetryException ex)
{
if (retries == NUM_RETRIES)
{
throw ex;
}
}
}
显然,如果被查询的实体自事务启动以来已更新,则提交调用将引发异常。