2013-03-01 2 views
6

Я искал и искал способ удаления элементов с одинаковым идентификатором по условию диапазона. Ни одна из перегрузок для Table.DeleteItem, похоже, не принимает условие диапазона, а только диапазон.Удалить строки по id и условиям диапазона?

Есть ли другой подход к удалению всех записей старше часа?

Я бы предпочел не получать все соответствующие строки hashkey и вручную удалять каждую строку с помощью определенного ключа диапазона.

В основном я использую .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 по-прежнему будет взимать плату за полный размер элемента при возврате подмножества его атрибутов.

Некоторые люди решали эту временную проблему, создавая отдельную таблицу для каждого периода времени (чаще всего день, чем один час). Таким образом, вы можете сделать некоторые интересные вещи:

  • удалить старые данные «бесплатно», понижая таблицу
  • Масштаб сегодня таблице выше остальных

это «разделение данных» не является так же плохо, как кажется из-за модели DynamoDB. Нужно получить товар? У вас уже есть временный диапазон-ключ, поэтому вы знаете, какую таблицу задать. Нужно запросить? Состояние вашего диапазона должно быть основано на времени, поэтому вы знаете, какие таблицы задавать.

+0

Вам не нужно возвращать все поля - вы можете указать, какие атрибуты получить - поскольку вы хотите сделать удаление, вы получите только хэш/диапазон. – FlavorScape

+0

Мне сложно понять, почему вы можете запрашивать условие диапазона, но не удалять. Это кажется довольно простым в линейной системе индексированной памяти. Возможно, они хотят, чтобы вы уничтожили их, чтобы удалить единицы пропускной способности. – FlavorScape

+0

@FlavorScape Я думаю, что я рассмотрел ваш первый комментарий в первом абзаце; но помните, что вы по-прежнему платите за полный размер элемента, даже если только получить хэш/диапазон. –

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