ben*_*ben 36 random record amazon-web-services amazon-dynamodb
有关如何从DynamoDB表中随机选择项目/记录的任何想法?我不相信API中有任何相关规定.
我想维护一个NumericId | MyOtherKey("NumericIdTable")表,然后生成一个介于0和我拥有的记录总数之间的随机数,然后从NumericIdTable获取该项,但从长远来看它不会起作用.
欢迎思想/想法.
nen*_*nTi 30
我想出了一种从DynamoDB表中选择一个随机项的方法:
例如,如果您使用UUID作为RangeKey的标识符,您可以获得如下的随机项
RandomRangeKey = new UUID
RandomItem = Query( "HashKeyValue": "KeyOfRandomItems",
"RangeKeyCondition": { "AttributeValueList":
"RandomRangeKey",
"ComparisonOperator":"GT"},
"Limit": 1 )
Run Code Online (Sandbox Code Playgroud)
这样您就可以得到一个随机项,只消耗1个读取容量.
通过生成比表中使用的最小UUID更小的UUID,有可能错过随机变量的第一个查询.这个机会随着桌子放大而缩小,您可以使用相同随机密钥的SmallerThan Comparison轻松发送另一个请求,然后确保随机项目的命中.
如果您的Tabledesign不允许随机化的RangeKeys,您可以按照您的方法创建一个单独的RandomItem表并将ID存储在可随机化的RangeKey下.可能的表结构是
*RandomItemTable
TableName - HashKey
UUID - Rangekey
ItemId
Run Code Online (Sandbox Code Playgroud)
请记住,对于此方法,您需要管理原始表和随机化表之间的冗余.
cmi*_*lam 21
如果您使用GUID作为表的哈希键,则可以执行以下操作:
var client = new AmazonDynamoDBClient();
var lastKeyEvaluated = new Dictionary<string, AttributeValue>()
{
{ "YOUR_HASH_KEY", new AttributeValue(Guid.NewGuid().ToString()) }
};
var request = new ScanRequest()
{
TableName = YOUR_TABLE_NAME,
ExclusiveStartKey = lastKeyEvaluated,
Limit = 1
};
var response = client.Scan(request);
Run Code Online (Sandbox Code Playgroud)
这将为您提供随机记录,因为它生成随机GUID作为lastKeyEvaluated.
| 归档时间: |
|
| 查看次数: |
9901 次 |
| 最近记录: |