gpt4 book ai didi

amazon-web-services - 在dynamodb aws中搜索列表数据类型

转载 作者:行者123 更新时间:2023-12-04 08:01:16 29 4
gpt4 key购买 nike

我们正在使用 dynamo db 作为我们网站之一的数据库解决方案。我们按照下面给定的 json 将数据存储在 dynamo db 中。

我们有属于一个/多个流派的视频,所以我们选择列表数据类型并将数据存储到其中,并将流派制作为 GSI(全局二级索引)

我面临着几个问题。

1) 当我将 genre 定义为索引时,aws 只提供了三种数据类型(字符串、二进制、数字),不允许我们存储列表类型的数据。它给出了意外的数据类型错误。

2) 如果我不将其定义为索引,则不允许获取数据。 DynamoDB 要求哈希键,这在我的情况下是不可能的,因为我正在获取不应依赖于哈希键(主键)的列表。

{
"description": "********",
"genre": [
"Kids",
"Documentary"
],
"language": "******",
"status": "0",
"thumb_url": "******",
"title": "******",
"uploaded_by": "****** ",
"url": "******",
"video_id": 1330051052
}

获取数据的代码

$DynamoDbClient = AWS::get('DynamoDb');
$result = $DynamoDbClient->query(array(
'TableName' => 'videos',
'IndexName' => 'genre-index',
'AttributesToGet' => array('video_id', 'language', 'description'),
'KeyConditions' => array(
// Key attribute
// This is non-key attribute
'genre' => array(
'ComparisonOperator' => 'EQ',
'AttributeValueList' => array(
array("S" => "Kids"),
)
),
),
));

在上面的代码中,我正在寻找子类型的视频。但如果我不将流派声明为索引,它会返回空白并给出错误。同一视频可以属于多种类型。

那么我是否可以在列表中进行搜索,或者我是否没有以正确的方式使用 API?始终感谢您的帮助。

最佳答案

关于 NoSQL 的一个问题是它不会适用于所有地方,但我的客户也遇到过类似情况,这是我的解决方案:

videoMaster (videoId(hash), desc, link ..etc)
tagDetail (tagId(hash), videoId(Range))

现在你可以通过传递tagId(kids, study..etc)来查询你会得到特定标签的所有视频

您在 tagDetail 中的数据将类似于:

kids -> video1
kids -> video2
Education -> video1
Education -> video3

上述解决方案的问题:如果您在一个特定标签中有数十亿个视频,那么您的性能将受到影响,因为哈希分布不正确。

小提示:您可以为您的表读取实现缓存机制,这样您就不必每次都查询您的数据库。

关于amazon-web-services - 在dynamodb aws中搜索列表数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34332787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com