.net core DynamoDB如何使用.NETCore获取分区键的项目数?

.net core DynamoDB如何使用.NETCore获取分区键的项目数?,.net-core,amazon-dynamodb,dynamodb-queries,amazon-dynamodb-streams,.net Core,Amazon Dynamodb,Dynamodb Queries,Amazon Dynamodb Streams,如何使用.net内核(最好使用对象持久性接口或文档接口)获取特定分区键的项目数 因为我在任何地方都看不到任何文档,所以目前我通过检索所有项目并获取其数量来获取项目数量,但是读取成本非常高 此类物品盘点请求的最佳实践是什么?谢谢。dynamodb主要是一个面向文档的键值数据库;所以它并没有针对公共关系数据库函数的功能(如项目计数)进行优化 要最小化传输的数据并提高速度,您可能需要执行以下操作: 创建返回项目计数的Lambda函数 避免在AWS之外传输数据;这既慢又贵 查询选项 仅在投影表达式中使用

如何使用.net内核(最好使用对象持久性接口或文档接口)获取特定分区键的项目数

因为我在任何地方都看不到任何文档,所以目前我通过检索所有项目并获取其数量来获取项目数量,但是读取成本非常高


此类物品盘点请求的最佳实践是什么?谢谢。

dynamodb主要是一个面向文档的键值数据库;所以它并没有针对公共关系数据库函数的功能(如项目计数)进行优化

要最小化传输的数据并提高速度,您可能需要执行以下操作:

创建返回项目计数的Lambda函数

避免在AWS之外传输数据;这既慢又贵

查询选项

仅在投影表达式中使用键, 减少从数据库传输的数据

最大
页面大小
,减少所需呼叫数

流选项 流也可用于保持计数;e、 g.如中所述

相关SO问题


我刚刚意识到,在QueryRequest中使用低级接口可以设置
Select=“COUNT”
,然后在调用
querySync()
Query()
时,只会将计数作为整数返回。请参考下面的代码示例

private static QueryRequest getStockRecordCountQueryRequest(string tickerSymbol, string prefix)
        {
            string partitionName = ":v_PartitionKeyName";
            string sortKeyPrefix = ":v_sortKeyPrefix";

            var request = new QueryRequest
            {
                TableName = Constants.TableName,
                ReturnConsumedCapacity = ReturnConsumedCapacity.TOTAL,
                Select = "COUNT",
                KeyConditionExpression = $"{Constants.PartitionKeyName} = {partitionName} and begins_with({Constants.SortKeyName},{sortKeyPrefix})",
                ExpressionAttributeValues = new Dictionary<string, AttributeValue>
                {
                    { $"{partitionName}", new AttributeValue {
                        S = tickerSymbol
                    }},
                    { $"{sortKeyPrefix}", new AttributeValue {
                        S = prefix
                    }}
                },
                // Optional parameter.
                ConsistentRead = false,
                ExclusiveStartKey = null,
            };
            return request;
        }
私有静态查询请求getStockRecordCountQueryRequest(字符串tickerSymbol,字符串前缀)
{
字符串partitionName=“:v_PartitionKeyName”;
字符串sortKeyPrefix=“:v_sortKeyPrefix”;
var请求=新的QueryRequest
{
TableName=Constants.TableName,
ReturnConsumedCapacity=ReturnConsumedCapacity.TOTAL,
选择=“计数”,
KeyConditionExpression=$“{Constants.PartitionKeyName}={partitionName}并以{Constants.SortKeyName},{sortKeyPrefix}开头”,
ExpressionAttributeValues=新字典
{
{$“{partitionName}”,新的AttributeValue{
S=股票代码
}},
{$“{sortKeyPrefix}”,新属性值{
S=前缀
}}
},
//可选参数。
一致性阅读=错误,
ExclusiveStartKey=null,
};
返回请求;
}
但我想指出的是,这仍然会消耗与检索所有项相同的读取单位,并自行获取其计数。但是,由于它只是以整数形式返回计数,因此它比跨线传输整个项目列表要高效得多

我认为使用DynamoDB流可以更恰当地获得大型项目的计数。实施起来要复杂得多。

相关的qa和更多细节: