我試圖根據使用掃描請求的搜索條件從Dynamo DB檢索數據。我正在按照http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelDotNetScanning.html頁面中提到的步驟操作,我的DynamoDB表包含超過100萬條記錄,我知道通過使用do-while循環和ExclusiveStartKey,我們可以從發電機DB獲取記錄,但在我的情況下,我不能等待直到搜索過程完成,因爲這會掛我angularJS UI,而不是我想逐步加載與進行等待搜索過程來完成數據的,我們如何能做到這一點使用AWSSDK.net(核心版本3.3.5和AWSSDK.DynamoDBv2版本3.3.1)從DynamoDB檢索數據
樣品要求:。。?
var lastEvaluatedKey = new Dictionary<string, AttributeValue>(); ;
AmazonDynamoDBClient amazonDynamoDbClient= new AmazonDynamoDBClient()
var filterExpression = "#aws_s3_bucket = :v_aws_s3_bucket and contains(#aws_s3_key,:v_aws_s3_key)";
var projectExpression = "#aws_s3_key,filename,#region,aws_s3_bucket,#projecttype,folder,#siteid,locationname,createdon,modifiedon";
do
{
var request = new ScanRequest
{
TableName = "Test1",
ExclusiveStartKey=lastEvaluatedKey,
FilterExpression = filterExpression,
ExpressionAttributeNames = new Dictionary<string, string>
{
{ "#region", "region" },
{ "#siteid", "siteid" },
{ "#projecttype", "projecttype" },
{ "#aws_s3_key", "aws_s3_key" },
{ "#aws_s3_bucket", "aws_s3_bucket" }
},
ExpressionAttributeValues = new Dictionary<string, AttributeValue> {
{":v_aws_s3_bucket", new AttributeValue { S = "sampleBucket"}},
{":v_aws_s3_key", new AttributeValue { S = "92226"}}
},
ConsistentRead = true,
ProjectionExpression = projectExpression
};
response = amazonDynamoDbClient.Scan(request);
lastEvaluatedKey = response.LastEvaluatedKey;}while(lastEvaluatedKey!=null && lastEvaluatedKey.count()!=0)
我試着用do-while循環執行上面的請求,並保存了ExclusiveStartKey,以便發出下一個請求錯誤:「提供的起始鍵無效:一個或多個pa rameter值無效:空屬性值類型的值必須爲true「。
在這個問題上的任何幫助,將有助於...
你在哪裏存儲lastEvaluatedKey?您需要從存儲對象中獲取鍵值並明確設置開始鍵值。 – notionquest
抱歉,我錯過了此行我的文章請在下面找到詳細信息。 來自ScanReponse對象,我正在檢索上次掃描的按鍵。 lastEvaluatedKey = response.LastEvaluatedKey; – user3656240
更新了包含lastEvaluatedKey設置的邏輯。 – user3656240