Amazon SimpleDB:响应消息与请求参数不一致

时间:2010-10-20 23:52:47

标签: amazon-simpledb

我正在使用亚马逊的SimpleDB为iPhone游戏创建一个简单的高分数据库,并且遇到了一些奇怪的问题,其中SimpleDB的响应消息似乎与我发送的请求或者甚至状态无关。服务器上的数据。

在应用中提交高分的预期事件序列是:

  1. 创建了一个PutAttributes请求 试图覆盖当前 使用新值进行评分但仅限于 它比最后的已知更大 分数的价值。

  2. 如果预期值与服务器上的值不匹配,SimpleDB的响应消息可让应用知道实际值是什么,并使用它作为新的预期值创建新请求。

  3. 此过程一直持续到任何一个 回应说明了一切 没问题,或者直到得分 服务器返回高于 我们试图提交的分数 (即如果某人有更高的人 在此提交的分数 来回奔波)

  4. (如果它是相关的,我正在使用ASIHTTPRequest类来处理请求,并且我在创建它们时通过将每个请求的缓存策略设置为ASIIgnoreCachePolicy来明确地关闭缓存。)

    然而,实际发生的事情有点奇怪......

    1. 第一个回复带有预期结果。例如,应用程序提交分数为200并且期望服务器上的分数为0但实际上为100. SimpleDB响应条件检查失败并让应用程序知道服务器上的实际值(100)。

    2. 应用程序发送一个具有更新期望值的请求,但SimpleDB响应的响应与第一次相同,即使预期值已更改(例如,响应表示实际值为100且我们通过了预期值即使我们刚刚将其更改为100),仍为0。

    3. 应用程序发送第三个请求,其得分和预期值与第二个请求完全相同(例如,两者都为100),SimpleDB报告条件再次失败,因为实际值为200.

      < / LI>

      所以看起来第二次尝试确实有效,即使SimpleDB报告失败并且给出了我传入的参数的错误帐户。这种奇怪的行为也非常一致 - 每次我尝试用预期更新得分与服务器上的值不匹配的值,出现完全相同的序列。

      我现在已经对此感到头疼了一段时间,而且我的想法很简陋,所以如果有任何比我更多SimpleDB经验的人能够对此有所了解,我会非常感激。

      下面是一个请求和响应的示例序列,以便更好地描述情况而不是我上面的折磨解释(这些值来自实际请求和响应,但我已经删除了相关部分请求)。

      请求1
      (此时服务器上的分数为100)

      Attribute.1.Name =分数
      Attribute.1.Replace =真
      Attribute.1.Value = 200
      Expected.1.Name =分数
      Expected.1.Value = 000
      一致=真

      回应1
      条件检查失败。属性(分数)值是(100)但是预期(000)

      请求2
      (该应用程序更新为正确的分数但基于响应SimpleDB似乎忽略了更改)

      Attribute.1.Name =分数
      Attribute.1.Replace =真
      Attribute.1.Value = 200
      Expected.1.Name =分数
      Expected.1.Value = 100
      一致=真

      回复2
      条件检查失败。属性(分数)值是(100)但是预期(000)

      请求3
      (这次SimpleDB获得了正确的预期值,但也报告了分数已更新,即使之前的所有响应都另有说明)

      Attribute.1.Name =分数
      Attribute.1.Replace =真
      Attribute.1.Value = 200
      Expected.1.Name =分数
      Expected.1.Value = 100
      一致=真

      回应3
      条件检查失败。属性(得分)值是(200)但是预期(100)

      更新(10/21/10)
      我检查过以确保从服务器返回的requestID都是唯一的,实际上它们都是唯一的。

1 个答案:

答案 0 :(得分:0)

尝试在请求中传递ConsistentRead = true。