c# - Amazon SimpleDB - 有没有办法列出域中的所有属性?

标签 c# dns attributes amazon-simpledb

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

但是,我正在尝试想出一种巧妙的方法来检索适用于域的所有属性。事实证明,无需检索项目就很棘手,显然我可以得到属性列表。但是,如果我在一个域中有 100,000 个项目怎么办?假设“人”域中的前 70,000 个项目具有:

名字、姓氏、地址

然后我点击了一个元素

名字、姓氏、地址、电话

然后我在 80,000 大关附近击中了另一个项目,它具有:

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

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

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

...没有执行大量的选择语句?

非常感谢!

最佳答案

对于包含许多项目的域,您应该能够使用随机抽样方法获得高度准确的属性列表。这是一些 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 的样本量都能有效地提供相同的准确度,因此这种方法甚至可以扩展到数百万个项目。

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

关于c# - Amazon SimpleDB - 有没有办法列出域中的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772644/

相关文章:

c# - 从在 ITemplate 中动态创建的 ImageButton 触发 RowCommand 事件

python - Boto Route53 或 Area53 - 如何将多个 IP 地址添加到子域

c# - 反射(reflect)属性以获取属性。当它们在别处定义时怎么办?

asp.net-mvc - 如果 Hangfire 已在运行,则停止启动重复作业

c# - 哪个更利于可读性?

c# - 为什么将一个列表添加到另一个列表,使用添加范围,从第一个列表中删除元素?

url - 如何找到IP地址的端口号?

c - 有没有办法以编程方式将名称解析限制为/etc/hosts 中存在的条目?

jquery - 使用属性 End With 删除元素

c# - 分号在 C# 中的条件 block 之后做什么?