2013-05-10 2 views
2

Я пытаюсь удалить все элементы из таблицы aws dynamodb с помощью hashkey. Я вижу много дискуссий об этом в Интернете, но никаких примеров кода и всех моих попыток не удалось.Как удалить записи в Amazon Dynamodb на основе hashkey?

Что я делаю неправильно здесь, или есть лучший помощник?

List<Document> results = null; 
var client = new AmazonDynamoDBClient("myamazonkey", "myamazonsecret"); 
var table = Table.LoadTable(client, "mytable"); 

var search = table.Query(new Primitive("hashkey"), new RangeFilter()); 
do { 
results = search.GetNextSet(); 
search.Matches.Clear(); 
foreach (var r in results) 
        { 
         client.DeleteItem(new DeleteItemRequest() 
          { 
           Key = new Key() { HashKeyElement = new AttributeValue() { S = "hashkey"}, RangeKeyElement = new AttributeValue() { N = r["range-key"].AsString() } } 
          }); 
        } 
} while(results.Count > 0); 

ответ

2

Проблема решена с использованием функциональной возможности записи AWS. Я разорвал рудник в 25 штук, но я думаю, что api может занять до 100.

List<Document> results = null; 
var client = new AmazonDynamoDBClient("myamazonkey", "myamazonsecret"); 
var table = Table.LoadTable(client, "mytable"); 
var batchWrite = table.CreateBatchWrite(); 
var batchCount = 0; 

var search = table.Query(new Primitive("hashkey"), new RangeFilter()); 
do { 
    results = search.GetNextSet(); 
    search.Matches.Clear(); 
    foreach (var document in results) 
    { 
    batchWrite.AddItemToDelete(document); 
    batchCount++; 
    if (batchCount%25 == 0) 
    { 
     batchCount = 0; 
     try 
     { 
     batchWrite.Execute(); 
     } 
     catch (Exception exception) 
     { 
     Console.WriteLine("Encountered an Amazon Exception {0}", exception); 
     } 

     batchWrite = table.CreateBatchWrite(); 
    } 
    } 
    if (batchCount > 0) batchWrite.Execute(); 
    } 
} while(results.Count > 0); 
+0

Можете ли вы подтвердить, что API может принимать 100 предметов? Согласно [этим документам] (http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html), я считаю, что это может сделать только 25, как ваш образец кода. –

+0

Да, похоже, что get позволит 100, но запись ограничена 25. – brendan

Смежные вопросы