BatchWriteItem using DynamoDB and AWSSDK.net

本文关键字:AWSSDK net and DynamoDB using BatchWriteItem | 更新日期: 2023-09-27 18:02:54

我目前在使用DynamoDB调用BatchWriteItem请求时遇到问题。我得到以下错误

"无法将数据保存到DB。"超出了为表配置的已供应吞吐量级别。考虑使用UpdateTable API"

"来提高配置级别。配置:

ThroughPut: Read = 5;

这是我的场景:我需要一个接一个地对同一个表执行2组数据写请求-使用聚合数据(932KB:分成63KB的块,大约15个块)-非聚合数据(940kb:分成63KB的块,大约15个块)

在写操作之前,我根据hash键和range键值删除dynamo-db表中的所有项(对于聚合数据:删除16项)。

代码如下:

public void PutItems(string tableName, string id, string message, bool aggregated)
    {
         if (aggregated)
             id = "a_" + id;
         else
             id = "r_" + id;
        List<WriteRequest> writeRequests = new List<WriteRequest>();
        List<WriteRequest> DeleteWriteRequest = new List<WriteRequest>();
        var itemsToDelete = GetItemsToDelete(tableName, id);
        if (itemsToDelete.Count > 0)
        {
            foreach (Tuple<string, int> item in itemsToDelete)
            {
                DeleteRequest deleteRequest = new DeleteRequest
                {
                    Key = new Key
                    {
                        HashKeyElement = new AttributeValue { S = item.Item1 },
                        RangeKeyElement = new AttributeValue { N = item.Item2.ToString() }
                    }
                };
                WriteRequest deleteReq = new WriteRequest();
                deleteReq.DeleteRequest = deleteRequest;
                DeleteWriteRequest.Add(deleteReq);
            }
            logger.Info(this.GetType().ToString(), string.Format(".....Deleting Old Data..........."));
            foreach (IEnumerable<WriteRequest> ls in LinqExtensions.Partition(DeleteWriteRequest, SplitLevel))
            {
                BatchWriteItemRequest delWriteRequest = new BatchWriteItemRequest();
                delWriteRequest.WithRequestItems(new KeyValuePair<string, List<WriteRequest>>(tableName, ls.ToList()));
                CallBatchWriteTillCompletion(delWriteRequest);
            }
            logger.Info(this.GetType().ToString(), string.Format(".....Delete Complete!..........")); 
        }
        int MaxLength = 64512; //64KB = 65536 Bytes ; 60KB = 61440 Bytes
        logger.Info(this.GetType().ToString(), string.Format("Message Size : {0}", message.Length)); 
        var str = SplitToChunks(message, MaxLength).ToList();
        for (int i = 0; i < str.Count; i++)
        {

            PutRequest putRequest = new PutRequest
            {
                Item = new Dictionary<string, AttributeValue>()
                    {
                        {"Received", new AttributeValue {S = id}},
                        {"SequenceNum" , new AttributeValue {N = i.ToString()}},
                        {"Message", new AttributeValue {S = str[i]}}
                    }
            };
            WriteRequest request = new WriteRequest();
            request.PutRequest = putRequest;
            writeRequests.Add(request);
        }
        logger.Info(this.GetType().ToString(), string.Format(".....Writing Data..........."));
        foreach (IEnumerable<WriteRequest> ls in LinqExtensions.Partition(writeRequests, SplitLevel))
        {
                System.Threading.Thread.Sleep(1000);
                BatchWriteItemRequest writeRequest = new BatchWriteItemRequest();
                writeRequest.WithRequestItems(new KeyValuePair<string, List<WriteRequest>>(tableName, ls.ToList()));
                CallBatchWriteTillCompletion(writeRequest);

        }
        logger.Info(this.GetType().ToString(), string.Format(".....Write Complete!.........."));
    }

    private void CallBatchWriteTillCompletion(BatchWriteItemRequest request)
    {
        BatchWriteItemResponse response;
        int callCount = 0;
        do
        {
            if (callCount > 0)
            {
                System.Threading.Thread.Sleep(1000);
            }
            logger.Info(this.GetType().ToString(), string.Format("Making Request"));
            response = Instance.Client.BatchWriteItem(request);
            callCount++;
            // Check the response.
            var result = response.BatchWriteItemResult;
            var responses = result.Responses;
            var unprocessed = result.UnprocessedItems;
            logger.Info(this.GetType().ToString(), string.Format("Response"));
            foreach (var resp in responses)
            {
                logger.Info(this.GetType().ToString(), string.Format("{0} - {1}", resp.Key, resp.Value.ConsumedCapacityUnits));
            }
            logger.Info(this.GetType().ToString(), string.Format("Unprocessed"));
            foreach (var unp in unprocessed)
            {
                logger.Info(this.GetType().ToString(), string.Format("{0} - {1}", unp.Key, unp.Value.Count));
            }
            // For the next iteration, the request will have unprocessed items.
            request.RequestItems = unprocessed;
        } while (response.BatchWriteItemResult.UnprocessedItems.Count > 0);
        logger.Info(this.GetType().ToString(), string.Format("Total # of batch write API calls made: {0}", callCount));
    }

    //This method is use to split a string message of smaller chunks of 64KB.
    private static IEnumerable<String> SplitToChunks(String str, int maxLength)
    {
            for (int index = 0; index < str.Length; index += maxLength)
            {
                yield return str.Substring(index, Math.Min(maxLength, str.Length - index));
            }          
    }
静态类LinqExtensions{
    public static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> source, int size)
    {
        T[] array = null;
        int count = 0;
        foreach (T item in source)
        {
            if (array == null)
            {
                array = new T[size];
            }
            array[count] = item;
            count++;
            if (count == size)
            {
                yield return new ReadOnlyCollection<T>(array);
                array = null;
                count = 0;
            }
        }
        if (array != null)
        {
            Array.Resize(ref array, count);
            yield return new ReadOnlyCollection<T>(array);
        }
    }
}
你能告诉我我哪里做错了吗?我在多个地方增加了1秒的延迟,这样吞吐量就不会超过。我还附上了一个文本文件与日志它有ConsumedCapacityUnits.
2013-03-06 21:20:21.6093 INFO     
2013-03-06 21:20:21.7031 INFO     .........Writing Aggregated Messages to DynamoDB ...
2013-03-06 21:20:21.7343 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:20:22.2500 INFO     Working mode: MASTER.
2013-03-06 21:20:22.3750 INFO     Heartbeat message '3/6/2013 9:20:22 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:20:22.9062 INFO     .....Deleting Old Data...........
2013-03-06 21:20:22.9531 INFO     Making Request
2013-03-06 21:20:23.1250 INFO     Response
2013-03-06 21:20:23.1562 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 320
2013-03-06 21:20:23.2031 INFO     Unprocessed
2013-03-06 21:20:23.2500 INFO     Total # of batch write API calls made: 1
2013-03-06 21:20:23.2812 INFO     Making Request
2013-03-06 21:20:23.4218 INFO     Response
2013-03-06 21:20:23.5468 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 320
2013-03-06 21:20:23.5937 INFO     Unprocessed
2013-03-06 21:20:23.6406 INFO     Total # of batch write API calls made: 1
2013-03-06 21:20:23.6718 INFO     Making Request
2013-03-06 21:20:26.1406 INFO     Response
2013-03-06 21:20:26.2031 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 320
2013-03-06 21:20:26.2500 INFO     Unprocessed
2013-03-06 21:20:26.2968 INFO     Total # of batch write API calls made: 1
2013-03-06 21:20:26.3593 INFO     Making Request
2013-03-06 21:20:28.6875 INFO     Response
2013-03-06 21:20:28.7187 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 54
2013-03-06 21:20:28.7500 INFO     Unprocessed
2013-03-06 21:20:28.7968 INFO     Total # of batch write API calls made: 1
2013-03-06 21:20:28.8750 INFO     .....Delete Complete!..........
2013-03-06 21:20:28.9218 INFO     Message Size : 1022580
2013-03-06 21:20:28.9687 INFO     .....Writing Data...........
2013-03-06 21:20:30.0000 INFO     Making Request
2013-03-06 21:20:33.2812 INFO     Response
2013-03-06 21:20:33.3125 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 128
2013-03-06 21:20:33.3437 INFO     Unprocessed
2013-03-06 21:20:33.3906 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 3
2013-03-06 21:20:34.4218 INFO     Making Request
2013-03-06 21:20:36.2343 INFO     Response
2013-03-06 21:20:36.2656 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 128
2013-03-06 21:20:36.2968 INFO     Unprocessed
2013-03-06 21:20:36.3281 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 1
2013-03-06 21:20:36.6093 INFO     
2013-03-06 21:20:36.6406 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:20:37.0156 INFO     Working mode: MASTER.
2013-03-06 21:20:37.0781 INFO     Heartbeat message '3/6/2013 9:20:37 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:20:37.3750 INFO     Making Request
2013-03-06 21:20:38.0781 INFO     Response
2013-03-06 21:20:38.1093 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:20:38.1406 INFO     Unprocessed
2013-03-06 21:20:38.1718 INFO     Total # of batch write API calls made: 3
2013-03-06 21:20:39.2187 INFO     Making Request
2013-03-06 21:20:42.2812 INFO     Response
2013-03-06 21:20:42.3125 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 128
2013-03-06 21:20:42.3437 INFO     Unprocessed
2013-03-06 21:20:42.3906 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 3
2013-03-06 21:20:43.4218 INFO     Making Request
2013-03-06 21:20:45.2187 INFO     Response
2013-03-06 21:20:45.2500 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 128
2013-03-06 21:20:45.2968 INFO     Unprocessed
2013-03-06 21:20:45.3281 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 1
2013-03-06 21:20:46.3593 INFO     Making Request
2013-03-06 21:20:47.0156 INFO     Response
2013-03-06 21:20:47.0625 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:20:47.0937 INFO     Unprocessed
2013-03-06 21:20:47.1250 INFO     Total # of batch write API calls made: 3
2013-03-06 21:20:48.1718 INFO     Making Request
2013-03-06 21:20:51.2968 INFO     Response
2013-03-06 21:20:51.3437 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 128
2013-03-06 21:20:51.3906 INFO     Unprocessed
2013-03-06 21:20:51.4218 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 3
2013-03-06 21:20:51.6093 INFO     
2013-03-06 21:20:51.6406 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:20:52.0000 INFO     Working mode: MASTER.
2013-03-06 21:20:52.0781 INFO     Heartbeat message '3/6/2013 9:20:52 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:20:52.4531 INFO     Making Request
2013-03-06 21:20:54.2656 INFO     Response
2013-03-06 21:20:54.3125 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 128
2013-03-06 21:20:54.3437 INFO     Unprocessed
2013-03-06 21:20:54.3750 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 1
2013-03-06 21:20:55.6718 INFO     Making Request
2013-03-06 21:20:56.3281 INFO     Response
2013-03-06 21:20:56.3750 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:20:56.4375 INFO     Unprocessed
2013-03-06 21:20:56.5312 INFO     Total # of batch write API calls made: 3
2013-03-06 21:20:57.5937 INFO     Making Request
2013-03-06 21:20:58.1875 INFO     Response
2013-03-06 21:20:58.2343 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 54
2013-03-06 21:20:58.3281 INFO     Unprocessed
2013-03-06 21:20:58.5625 INFO     Total # of batch write API calls made: 1
2013-03-06 21:20:58.5937 INFO     .....Write Complete!..........
2013-03-06 21:20:58.6875 INFO     .........Writing Complete! ...
2013-03-06 21:20:58.7187 INFO     .........Writing Raw Messages to DynamoDB ...
2013-03-06 21:21:00.8437 INFO     .....Deleting Old Data...........
2013-03-06 21:21:00.8906 INFO     Making Request
2013-03-06 21:21:06.0000 INFO     New Message Received
2013-03-06 21:21:06.6093 INFO     
2013-03-06 21:21:06.6562 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:21:07.0468 INFO     Working mode: MASTER.
2013-03-06 21:21:07.1250 INFO     Heartbeat message '3/6/2013 9:21:07 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:21:08.2343 INFO     Response
2013-03-06 21:21:08.2812 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 39
2013-03-06 21:21:08.3281 INFO     Unprocessed
2013-03-06 21:21:08.4062 INFO     Total # of batch write API calls made: 1
2013-03-06 21:21:08.4843 INFO     .....Delete Complete!..........
2013-03-06 21:21:08.5156 INFO     Message Size : 1006556
2013-03-06 21:21:08.5625 INFO     .....Writing Data...........
2013-03-06 21:21:09.6093 INFO     Making Request
2013-03-06 21:21:15.7187 INFO     Response
2013-03-06 21:21:15.7656 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:21:15.7968 INFO     Unprocessed
2013-03-06 21:21:15.8437 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 4
2013-03-06 21:21:16.8750 INFO     Making Request
2013-03-06 21:21:21.6093 INFO     
2013-03-06 21:21:21.6562 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:21:23.4687 INFO     Working mode: MASTER.
2013-03-06 21:21:24.1406 INFO     Heartbeat message '3/6/2013 9:21:23 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:21:27.3593 INFO     Response
2013-03-06 21:21:27.4062 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:21:27.4531 INFO     Unprocessed
2013-03-06 21:21:27.5000 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 3
2013-03-06 21:21:28.5312 INFO     Making Request
2013-03-06 21:21:36.6093 INFO     
2013-03-06 21:21:36.9687 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:21:38.1718 INFO     Working mode: MASTER.
2013-03-06 21:21:38.2343 INFO     Heartbeat message '3/6/2013 9:21:38 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:21:40.2031 INFO     Response
2013-03-06 21:21:40.2500 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:21:40.3281 INFO     Unprocessed
2013-03-06 21:21:40.3593 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 2
2013-03-06 21:21:41.3906 INFO     Making Request
2013-03-06 21:21:51.6093 INFO     
2013-03-06 21:21:51.7500 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:21:52.1718 INFO     Working mode: MASTER.
2013-03-06 21:21:52.2500 INFO     Heartbeat message '3/6/2013 9:21:52 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:21:54.0937 INFO     Response
2013-03-06 21:21:54.1562 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:21:54.1875 INFO     Unprocessed
2013-03-06 21:21:54.2343 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 1
2013-03-06 21:21:55.2812 INFO     Making Request
2013-03-06 21:22:06.2031 INFO     New Message Received
2013-03-06 21:22:06.6093 INFO     
2013-03-06 21:22:06.6406 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:22:07.0312 INFO     Working mode: MASTER.
2013-03-06 21:22:07.5781 INFO     Response
2013-03-06 21:22:07.6406 INFO     Heartbeat message '3/6/2013 9:22:07 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:22:07.7812 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:22:07.8437 INFO     Unprocessed
2013-03-06 21:22:07.9375 INFO     Total # of batch write API calls made: 5
2013-03-06 21:22:08.9687 INFO     Making Request
2013-03-06 21:22:18.0156 INFO     Response
2013-03-06 21:22:18.0781 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:22:18.1250 INFO     Unprocessed
2013-03-06 21:22:18.1562 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 4
2013-03-06 21:22:19.2031 INFO     Making Request
2013-03-06 21:22:21.6093 INFO     
2013-03-06 21:22:21.6875 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:22:21.7031 INFO     Response
2013-03-06 21:22:21.7656 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:22:21.8281 INFO     Unprocessed
2013-03-06 21:22:21.8750 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 3
2013-03-06 21:22:22.0937 INFO     Working mode: MASTER.
2013-03-06 21:22:22.1875 INFO     Heartbeat message '3/6/2013 9:22:22 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:22:22.9375 INFO     Making Request
2013-03-06 21:22:34.9687 INFO     Response
2013-03-06 21:22:35.0156 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:22:35.0468 INFO     Unprocessed
2013-03-06 21:22:35.0781 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 2
2013-03-06 21:22:36.1093 INFO     Making Request
2013-03-06 21:22:36.6093 INFO     
2013-03-06 21:22:36.7656 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:22:38.2968 INFO     Working mode: MASTER.
2013-03-06 21:22:38.5468 INFO     Heartbeat message '3/6/2013 9:22:38 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:22:48.7968 INFO     Response
2013-03-06 21:22:48.8750 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:22:48.9062 INFO     Unprocessed
2013-03-06 21:22:48.9375 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 1
2013-03-06 21:22:50.0000 INFO     Making Request
2013-03-06 21:22:51.6093 INFO     
2013-03-06 21:22:51.8281 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:22:52.8125 INFO     Working mode: MASTER.
2013-03-06 21:22:52.8906 INFO     Heartbeat message '3/6/2013 9:22:52 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:23:02.2968 INFO     Response
2013-03-06 21:23:02.3281 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:23:02.3593 INFO     Unprocessed
2013-03-06 21:23:02.3906 INFO     Total # of batch write API calls made: 5
2013-03-06 21:23:03.4375 INFO     Making Request
2013-03-06 21:23:06.6093 INFO     
2013-03-06 21:23:06.7812 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:23:07.5000 INFO     New Message Received
2013-03-06 21:23:08.8593 INFO     Working mode: MASTER.
2013-03-06 21:23:09.3281 INFO     Heartbeat message '3/6/2013 9:23:09 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:23:15.3906 INFO     Response
2013-03-06 21:23:15.4375 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:23:15.4843 INFO     Unprocessed
2013-03-06 21:23:15.5312 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 4
2013-03-06 21:23:16.5625 INFO     Making Request
2013-03-06 21:23:21.6093 INFO     
2013-03-06 21:23:21.8593 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:23:23.7031 INFO     Working mode: MASTER.
2013-03-06 21:23:24.0468 INFO     Heartbeat message '3/6/2013 9:23:23 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:23:28.7812 INFO     Response
2013-03-06 21:23:28.8125 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 64
2013-03-06 21:23:28.8750 INFO     Unprocessed
2013-03-06 21:23:29.1718 INFO     Key: TrafficConditionsMessages_dev - Unprocessed Value Count: 3
2013-03-06 21:23:30.4375 INFO     Making Request
2013-03-06 21:23:31.6093 INFO     Run task Called......
2013-03-06 21:23:31.9375 INFO     Processing Read data Method
2013-03-06 21:23:32.7187 INFO     Saving data to DB...
2013-03-06 21:23:33.0156 INFO     .........Writing Aggregated Messages to DynamoDB ...
2013-03-06 21:23:36.8125 INFO     
2013-03-06 21:23:37.0156 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:23:37.4531 INFO     .....Deleting Old Data...........
2013-03-06 21:23:37.7500 INFO     Making Request
2013-03-06 21:23:38.5156 INFO     Working mode: MASTER.
2013-03-06 21:23:38.8593 INFO     Heartbeat message '3/6/2013 9:23:38 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:23:41.6875 INFO     Response
2013-03-06 21:23:41.9531 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 320
2013-03-06 21:23:42.2500 INFO     Unprocessed
2013-03-06 21:23:42.3593 INFO     Total # of batch write API calls made: 1
2013-03-06 21:23:42.4218 INFO     Making Request
2013-03-06 21:23:50.5468 ERROR    Unable to save data to DB. The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API
2013-03-06 21:23:50.5781 INFO     .....Save to Database Complete!..... 
2013-03-06 21:23:50.7812 INFO     Run task Complete......
2013-03-06 21:23:51.6093 INFO     
2013-03-06 21:23:51.6406 INFO     Heartbeat event fired. Processing heartbeat ...
2013-03-06 21:23:53.1718 INFO     Working mode: MASTER.
2013-03-06 21:23:53.4531 INFO     Heartbeat message '3/6/2013 9:23:53 PM|OAK-VENUGOPALP' written to SQS queue 'HeartbeatDataReceiver_dev'.
2013-03-06 21:23:53.6093 ERROR    Unable to save data to DB. The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API
2013-03-06 21:23:53.6562 INFO     .....Save to Database Complete!..... 
2013-03-06 21:23:53.8281 INFO     Run task Complete......

BatchWriteItem using DynamoDB and AWSSDK.net

这个数字大致相当于每秒KB:吞吐量:Write = 5;

如果您正在尝试写入一个63KB的条目,您将需要写入它,然后等待~13秒才能再次尝试写入。您已经配置了每秒5 KB,然后在一次突发中使用了63 KB。在接下来的13秒内,您向表写入的任何请求都可能被throttted。

根据时间戳判断,客户端正在无形地处理ProvisionedThroughputExceeded错误并重试;例如,在这里,您看到在请求期间通过了10秒:

2013-03-06 21:22:08.9687 INFO     Making Request
2013-03-06 21:22:18.0156 INFO     Response

最终,在一堆小请求之后,表被一个大请求击中:

2013-03-06 21:23:41.9531 INFO     Key: TrafficConditionsMessages_dev - Consumed Capacity Units: 320

和下一个请求花费了很长时间,您的客户端认为是时候向您显示错误了:

2013-03-06 21:23:42.4218 INFO     Making Request
2013-03-06 21:23:50.5468 ERROR    Unable to save data to DB. The ...

解决方案是提高所配置的吞吐量,根据返回的ConsumedCapacity延长睡眠时间,或者少写数据。