2013-03-01 22 views
6

私は、範囲条件で同じIDのアイテムを削除する方法を探していました。 Table.DeleteItemのオーバーロードのいずれも、範囲条件(範囲のみ)をとらないようです。IDと範囲条件で行を削除しますか?

1時間以上経過したすべてのエントリを削除する方法はありますか?

一致するハッシュキー行をすべて取得して、特定の範囲キーで各行を手動で削除する必要はありません。

私は主に.NET SDKを使用していますが、ヒントは高く評価されています。

いくつかのバッチ書込みの例がありますが、全体的な範囲はありません。

private static void SingleTableBatchWrite() 
{ 
    Table productCatalog = Table.LoadTable(client, "ProductCatalog"); 
    var batchWrite = productCatalog.CreateBatchWrite(); 

    var book1 = new Document(); 
    book1["Id"] = 902; 
    book1["Title"] = "My book1 in batch write using .NET Helper API"; 
    book1["ISBN"] = "902-11-11-1111"; 
    book1["Price"] = 10; 
    book1["ProductCategory"] = "Book"; 
    book1["Authors"] = new List<string> { "Author 1", "Author 2", "Author 3" }; 
    book1["Dimensions"] = "8.5x11x.5"; 
    batchWrite.AddDocumentToPut(book1); 
    // Specify delete item using overload that takes PK. 
    batchWrite.AddKeyToDelete(12345); 
    Console.WriteLine("Performing batch write in SingleTableBatchWrite()"); 
    batchWrite.Execute(); 
} 

答えて

4

この機能はDynamoDBにはありません。

あなたができることは、適切な項目を問い合わせて、検索した各キーを手動で削除することです。クエリ時にハッシュと範囲キーの属性のみを要求することで、帯域幅を節約できますが、これは読み取り容量を節約しません。その属性のサブセットを返すとき、DynamoDBはアイテムのフルサイズに対してあなたに請求します。

一部の人々は、各時間期間(より一般的には1時間よりも1時間)ごとに別のテーブルを作成することによって、この一時的な問題に取り組んできました。が

  • スケール残り
  • この「データの分離」よりも、今日の表が高くない テーブルをドロップすることによって

    • は「自由のための」古いデータを削除します。そうすれば、あなたはいくつかの興味深いことを行うことができますDynamoDBのモデルのように思えるほど悪いです。アイテムを取得する必要がありますか?あなたはすでに時間的範囲キーを持っているので、どのテーブルを尋ねるかを知っています。質問する必要がありますか?範囲条件は時間ベースでなければならないので、どのテーブルを尋ねるかを知る必要があります。

    +0

    すべてのフィールドを返す必要はありません。取得する属性を指定できます。削除を実行したいので、ハッシュ/範囲のみを取得します。 – FlavorScape

    +0

    範囲条件でクエリを実行できますが、削除できない理由を理解することは難しいです。索引付きメモリの線形システムではかなり簡単です。たぶん、彼らは削除する貴重な帯域幅単位を消費することを望んでいます。 – FlavorScape

    +0

    @FlavorScape私は最初の段落であなたの最初のコメントをカバーしたと思います。ただし、ハッシュ/範囲を取得するだけでも、アイテムの全サイズを支払うことに注意してください。 –

    関連する問題