AWS SimpleDB Ruby v1 SDK删除方法不起作用



我正试图使用AWS Ruby SDK(v1)中Item类的delete方法删除AWS SimpleDB域中的一堆记录,例如

expected_total = # fetched using a count(*) query
actually_deleted = 0
query = "select * from MyDomain where Attr = '#{attr_value}'"
token = nil
begin 
   if token == nil then
      resp = sdb.select(select_expression: query)
   else
      resp = sdb.select(
         select_expression: query,
         next_token: token)
   end
   token = resp[:next_token]
   resp[:items].each do |item|
      item.delete({})
      actually_deleted += 1
      print "rDeleted #{actually_deleted} records..." if actually_deleted % 250 == 0
   end
end while token != nil && token != ''
puts "nComplete. Expected: #{expected_total} Actual: {actually_deleted}"

当它完成时,它报告已经删除了预期数量的记录,但它们没有。它们仍然存在于SimpleDB中。我最初认为这可能是一个复制品问题,我检查得太早了。但不管我运行了多少次脚本,它都不会删除记录。

这是我正在使用的删除方法的文档。

我最终可以删除我想要的记录,但我不得不使用v2 SDK。我做了这样的事:

item_batch = []
token = nil
begin 
   if token == nil then
      resp = sdb.select(select_expression: query)
   else
      resp = sdb.select(
         select_expression: query,
         next_token: token)
   end
   token = resp[:next_token]
   resp[:items].each do |item|
      item_batch << { name: item[:name] }
      if item_batch.size == 25 then
         sdb.batch_delete_attributes({domain_name: domain_name, items: item_batch })
         item_batch = []
         actually_deleted += 25
      end
      print "rDeleted #{actually_deleted} records..." if actually_deleted % 250 == 0
   end
end while token != nil && token != ''
if not item_batch.empty? then
   sdb.batch_delete_attributes({domain_name: domain_name, items: item_batch })
   actually_deleted += item_batch.size
end

此外,客户端需要像Aws::SimpleDB::Client.new而不是AWS::SimpleDB::Client.new那样初始化。

这可能会帮助其他人,尽管您可能会被v1 SDK卡住。我不接受这个答案,因为它不能解决我问题中的问题。

相关内容

  • 没有找到相关文章

最新更新