如何以最少的重复将翻译存储在 nosql DB 中?
How to store translations in nosql DB with minimal duplication?
我在 DynamoDB 中得到了这个模式
{
"timestamp" : "",
"fruit" : {
"name" : "orange",
"translations" : [
{
"en-GB" : "orange"
},
{
"sv-SE" : "apelsin"
},
....
]
}
我需要将对象的翻译存储在 DynamoDB 数据库中,以便能够高效地查询它们。例如。我的查询必须类似于 "give me all objects where translations array contains "
问题是,这个想法真的很愚蠢吗?那里有 6500 种语言,这意味着我将强制所有条目都包含一个数组,其中包含数千个属性,其中 99% 为空字符串值。什么是更好的方法?
谢谢,
我宁愿另存为。
{
"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 中创建多个实体。但是您也必须设法删除元素。如果在新对象中没有某种语言。
除非您愿意让 DynamoDB 进行 table 扫描以获得结果,否则我认为您使用了错误的工具。考虑通过 Firehose 之类的东西将您的交易流式传输到 AWS ElasticSearch。 Firehose 会给你很多好处,可以帮助你轮换事务索引。 ElasticSearch 应该能够存储该结构和 运行 您的查询。
如果您不走那条路,那么至少考虑在您的结构中删除语言代码(如果您实际上没有使用它的话)。只需制作一系列水果的独特拼写。这是我可能会尝试使用多个查询而不是单个查询来执行的查询;从水果名称的拼写到您可以查询的水果 UUID。
我在 DynamoDB 中得到了这个模式
{
"timestamp" : "",
"fruit" : {
"name" : "orange",
"translations" : [
{
"en-GB" : "orange"
},
{
"sv-SE" : "apelsin"
},
....
]
}
我需要将对象的翻译存储在 DynamoDB 数据库中,以便能够高效地查询它们。例如。我的查询必须类似于 "give me all objects where translations array contains "
问题是,这个想法真的很愚蠢吗?那里有 6500 种语言,这意味着我将强制所有条目都包含一个数组,其中包含数千个属性,其中 99% 为空字符串值。什么是更好的方法? 谢谢,
我宁愿另存为。
{
"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 中创建多个实体。但是您也必须设法删除元素。如果在新对象中没有某种语言。
除非您愿意让 DynamoDB 进行 table 扫描以获得结果,否则我认为您使用了错误的工具。考虑通过 Firehose 之类的东西将您的交易流式传输到 AWS ElasticSearch。 Firehose 会给你很多好处,可以帮助你轮换事务索引。 ElasticSearch 应该能够存储该结构和 运行 您的查询。
如果您不走那条路,那么至少考虑在您的结构中删除语言代码(如果您实际上没有使用它的话)。只需制作一系列水果的独特拼写。这是我可能会尝试使用多个查询而不是单个查询来执行的查询;从水果名称的拼写到您可以查询的水果 UUID。