.net core DynamoDB如何使用.NETCore获取分区键的项目数?
如何使用.net内核(最好使用对象持久性接口或文档接口)获取特定分区键的项目数 因为我在任何地方都看不到任何文档,所以目前我通过检索所有项目并获取其数量来获取项目数量,但是读取成本非常高.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之外传输数据;这既慢又贵 查询选项 仅在投影表达式中使用
此类物品盘点请求的最佳实践是什么?谢谢。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和更多细节: