将复杂查询计为单个请求

时间:2019-04-17 13:19:33

标签: c# asp.net-core amazon-dynamodb

你好,我有PHP + Mysql api,现在我正在改用asp.net核心+ dynamoDB api,在php中,我有5个mysql查询,它们全部使用不同的参数,现在我要进行相同的查询dynamoDB,但使用dynamoDb文档,它仅显示为单计数。

现在我可以创建五个查询并执行它们,但是我担心这会使它自身对api造成很大的重载(db包含超过1万行),是否有可能使count方法成为dynamodb,扫描和过滤器似乎最合逻辑使用它们的方式,但是它们返回整行,并且由于dynamoDb限制返回的数据仅为1mb,并且由于我只需要足以满足查询条件的数字,而不是整行数据。

$select = "(SELECT COUNT(User) FROM `userst` WHERE `User` != '' LIMIT 0,1) AS usercount,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `Score` > '$PersonalRow[0]' LIMIT 0,1) AS score,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `BookWidth` > '$PersonalRow[1]' AND `BookHeight` > '$PersonalRow[2]' AND `BookWeight` > '$PersonalRow[3]' LIMIT 0,1) AS Books,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `HouseHeight` > '$PersonalRow[4]' AND `HouseWidht` > '$PersonalRow[5]' LIMIT 0,1) AS Houses,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `Bandwidth` > '$PersonalRow[6]' AND `Speed` < '$PersonalRow[7]' AND `Bandwidth` > '$PersonalRow[8]' AND `CableSize` > '$PersonalRow[9]' LIMIT 0,1) AS Net,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `BuildNumber` > '$PersonalRow[10]' LIMIT 0,1) AS Builds,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `Density` > '$PersonalRow[11]' AND `Pressure` > '$PersonalRow[12]' AND `stage` > '$PersonalRow[13]' AND `Frequency` > '$PersonalRow[14]' LIMIT 0,1) AS Hybrids,";
    $select .= "(SELECT COUNT(User) FROM `userst` WHERE `temperature` > '$PersonalRow[15]' LIMIT 0,1) AS heats";
mysqli_query($select)

这是我的php代码的样子

现在我的ASP网络代码如下:

public void Count()
{
 UserTableItem UserTable = new UserTableItem();
List<ScanCondition> Conditions= new List<ScanCondition>
{
   new ScanCondition(nameof(UserTable.Name), ScanOperator.NotEqual, string.Empty
};

 List<UserTableItem> list =  await Context.ScanAsync<UserTable>(Conditions).GetRemainingAsync();
Debug.WriteLine(list.Count);
}

我当前的代码显示了我将如何进行下一个查询,但是由于aws限制,此代码在达到1mb输出大小后将失败,我不需要行数据,我只需要满足查询条件的数字。谢谢。

编辑1:我读到aws dynamoDb支持hiveql,这意味着我可以获得与mysql相同的查询,但是我应该如何将hiveql集成到ASP网络核心中?

0 个答案:

没有答案