首页 > 解决方案 > 如何以最少的重复将翻译存储在 nosql DB 中?

问题描述

我在 DynamoDB 中得到了这个模式

{
"timestamp" : "",
"fruit" : {
    "name" : "orange",
    "translations" : [
        { 
            "en-GB" : "orange" 
        },
        {
            "sv-SE" : "apelsin"
        },
        ....
    ]
}

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

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

标签: databasedatabase-designnosqlamazon-dynamodbdata-modeling

解决方案


我宁愿另存为。

{
"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 中创建多个实体。但是您也必须创建删除元素。如果在新对象中不存在某种语言。


推荐阅读