我在DynamoDB中获得了这个架构
accessToken.Authorization
我需要将对象的翻译存储在DynamoDB数据库中,以便能够高效地查询它们。例如。我的查询必须类似于“给我所有翻译数组包含的对象”
问题是,这真的是一个愚蠢的主意吗?有6500种语言,这意味着我将强制所有条目都包含一个包含数千个属性的数组,其中99%为空字符串值。有什么更好的方法? 谢谢,
答案 0 :(得分:1)
我宁愿另存为。
{
"primaryKey" : "orange",
"SecondaryKey": "en-GB"
"timestamp" : "",
"Metadata" : {
"name" : "orange",
}
并创建一个以SecondaryKey为PK和primaryKey为SK的二级索引。
通过此操作,您可以查询
用en-GB给我橙色。
en-GB中存在的所有密钥是什么
如果要一次更新多个项目。您可以这样创建1个对象
{
"KeyName" : "orange",
"SecondaryKey": "master"
"timestamp" : "",
"fruit" : {
"name" : "orange",
"translations" : [
{
"en-GB" : "orange"
},
{
"sv-SE" : "apelsin"
},
....
]
}
并创建一个lambda函数,该函数对上述对象进行反规范化,并在dynamodb中创建多个实体。但是,您还必须创建删除元素。如果在新对象中没有某种语言。
答案 1 :(得分:1)
除非您愿意让DynamoDB进行表扫描以获取结果,否则我认为您使用了错误的工具。考虑通过Firehose之类的方式将事务流式传输到AWS ElasticSearch。 Firehose将为您提供很多便利,并可以帮助您轮换交易索引。 ElasticSearch应该能够存储该结构并运行查询。
如果您不走这条路,那么,如果您实际上并未使用语言代码,则至少应考虑将其放入您的结构中。只需排列一系列水果的独特拼写即可。我可能会尝试对多个查询而不是单个查询进行这种查询。从水果名称的拼写到一个水果UUID,然后可以针对它查询。