如何以最少的重复量将翻译存储在nosql DB中?

时间:2019-08-09 10:52:02

标签: database database-design nosql amazon-dynamodb data-modeling

我在DynamoDB中获得了这个架构

accessToken.Authorization

我需要将对象的翻译存储在DynamoDB数据库中,以便能够高效地查询它们。例如。我的查询必须类似于“给我所有翻译数组包含的对象”

问题是,这真的是一个愚蠢的主意吗?有6500种语言,这意味着我将强制所有条目都包含一个包含数千个属性的数组,其中99%为空字符串值。有什么更好的方法? 谢谢,

2 个答案:

答案 0 :(得分:1)

我宁愿另存为。

{
"primaryKey" : "orange",
"SecondaryKey": "en-GB"
"timestamp" : "",
"Metadata" : {
    "name" : "orange",

}

并创建一个以SecondaryKey为PK和primaryKey为SK的二级索引。

通过此操作,您可以查询

  1. 用en-GB给我橙色。

  2. 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,然后可以针对它查询。