【发布时间】:2013-06-05 09:17:44
【问题描述】:
我正在尝试针对每笔交易更新用户信用/计数信息。如果我们每秒交易超过 2/4 次,则以下更新不会更新计数/用户信用信息。
基本上是两个问题。
- 有时更新未发生并显示 NO,错误消息。
- 更新失败并出现错误消息:412:失败:代码:412 值:前提条件失败详细信息(如果有):UpdateConditionNotSatisfied 未满足请求中指定的更新条件。 RequestId:1beb3fa9-9ad2-46f7-b8ee-af3a09300db7 时间:2013-06-09T16:12:17.6797130Z。
我正在使用 Azure 为 SMS API 制作从 RDMBS 迁移到 NoSQL 的原型。不知道为什么会发生这样的事情。
下面的代码粘贴
public function update_credit_to_azure_table () {
// Create table REST proxy.
$tableRestProxy = ServicesBuilder::getInstance()
->createTableService($this->connectionString);
$result = $tableRestProxy->getEntity("tblapilogin", $this->apiusr , $this->apiusr);
$entity = $result->getEntity();
$new_api_balance = $this->global_api_credit - $this->credittodeduct;
$credit_used = $this->api_credit_used + $this->credittodeduct;
$entity->setPropertyValue("global_api_credit", $new_api_balance); //Update Balance.
$entity->setPropertyValue("api_credit_used", $credit_used); //credit used Updated .
try {
$tableRestProxy->updateEntity("tblapilogin", $entity);
echo "<br>New Blance is: " . $new_api_balance;
echo "<br>credit_used is: " . $credit_used;
}
catch(ServiceException $e) {
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code.": ".$error_message."<br />";
}
}
乐观并发的更新函数是这里的主要测试。
【问题讨论】:
-
第一种应该基本不会发生。第二个是正常的,如果您正在尝试更新一个实体但它已经(同时)被另一个事务更新,那么 updateEntity 将失败,您将不得不重试。
-
这就像每秒少于 10 个事务,即使第二个行为也不会发生。我相信 azure table storage 声称每秒有超过 400 个事务。 (不确定更新是否非常有限)。我听说 Etag 的东西在这里是相关的,如果需要控制,如何将它与 API 调用一起应用?
-
我可能错了,因为我没有阅读限制,但我相信每秒 400 次是每个分区的批量更新,而不是单个实体上的单个更新。
-
另外,this link 可能会有所帮助。
-
我关闭了唠叨,但我没有看到性能有任何提高...我尝试每秒对同一实体进行少于 10 次更新。 (我在表中有一个实体,其行键和分区键为“as234q243”,它只是表中的一个实体,具有相同的行和分区键)并且性能如此糟糕。不确定表存储是否仅用于插入。
标签: azure azure-storage azure-blob-storage azure-table-storage