【问题标题】:Amazon SimpleDB - Is there a way to list all Attributes in a Domain?Amazon SimpleDB - 有没有办法列出域中的所有属性?
【发布时间】:2010-05-05 11:16:50
【问题描述】:

我正在使用 C# 和来自 Amazon 的 AWSSDK 库来测试 SimpleDB 中的一些内容。到目前为止一切顺利。

但是,我试图想出一种简洁的方法来检索适用于域的所有属性。事实证明,在不必检索项目的情况下这很棘手,显然我可以得到属性列表。但是如果我在一个域中有 100,000 个项目怎么办。假设“Person”域中的前 70,000 个项目具有:

名字、姓氏、地址

然后我点击了一个有

的项目

名字、姓氏、地址、电话

然后我在 80,000 大关附近找到另一个项目:

名字、姓氏、电子邮件、电话

在上面的示例中,对于 Person 域,我将如何获得包含以下内容的列表:

名字、姓氏、地址、电子邮件、电话

...没有执行数量荒谬的选择语句?

非常感谢!

【问题讨论】:

    标签: c# dns attributes amazon-simpledb


    【解决方案1】:

    您应该能够对包含许多项目的域使用随机抽样方法获得高度准确的属性列表。这是一些 C#-ish 伪代码:

    int domainCount = "select count(*) from Person";
    int avgSkipCount = domainCount/2500;
    int processedCount = 0;
    string nextToken = null;
    Set attributeNames;
    
    do
    {
      int nextSkipCount = Random.Next(0, avgSkipCount*2);
      string nextToken = "select count(*) from Person limit " + nextSkipCount;
      var countRequest = new SelectRequest
      {
        NextToken = nextToken,
        SelectExpression = "select count(*) from Person limit " + nextSkipCount
      };
      var countResponse = SimpleDb.Select(countRequest);
      nextToken = countResponse.NextToken;
      processedCount += countResponse.Count;
    
      var getRequest = new SelectRequest 
      {
        NextToken = nextToken,
        SelectExpression = "select * from Person limit 1"
      };
      var getResponse = SimpleDb.Select(getRequest);
      nextToken = getResponse.NextToken;
      processedCount++;
    
      attributeNames.Add(getResponse.AttributeNames);
    
    } while (domainCount > processedCount);
    

    这取决于您可以使用从 select count(*) 查询返回的 NextToken 来跳过 SimpleDB 中的记录这一事实。 Mocky 写了an excellent explanation of how to accomplish this。我已经解释了how to accomplish efficient paging like this with Simple Savant

    这将为您提供 99% 的大多数数据集的准确度,这对于大多数实际使用来说应该足够好。统计理论表明,对于任何大小的数据集,2500 的样本量实际上可以为您提供相同的准确度,因此这种方法甚至可以扩展到数百万个项目。

    这显然不理想,因为它仍然需要大量查询,但如果您的数据集的属性变化数量相对有限,您应该能够用更小的样本量完成同样的事情。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2021-07-12
      • 2017-11-07
      • 2021-12-30
      相关资源
      最近更新 更多