如何对具有不同翻译的字母数字值进行排序?
How to sort values alphanumerically that have different translations?
假设您想将 JSON 数据存储在 Azure DocumentDB 中,例如
[{
id: 1,
caption: "Name1"
state: 'created'
},
{
id: 2,
caption: "Name2",
state: 'active'
}]
在用户界面中,状态值将被转换
created: Created (Lang 1) / Angelegt (Lang2)
active: Active (Lang 1) / Bearbeitung (Lang2)
查询SELECT * FROM c ORDER BY c.state
的结果集会按id 2, id 1
的顺序得到文档。用户界面会将翻译后的数据显示为“Active
”和“Created
”。对于第二种语言,它将是“Bearbeitung
”和“Angelegt
”。
对于第一种语言,感知到的排序顺序是 升序,对于第二种语言,感知到的排序顺序是 降序。如果用户查看翻译后的值,您可以轻松构建一个示例,其中 没有感知到的排序顺序 。
我正在寻找一种解决方案,为用户提供翻译值的排序顺序。当然,一种解决方案是从 DocumentDB 查询所有项目并在客户端进行排序。但我想避免这种情况(较大分页结果集的性能损失)。
如果有可能的解决方案将这种排序操作放在 DocumentDB 查询中,您能给我一个提示吗?
有多种方法可以解决这个问题,并且各有利弊,您需要根据这些方法进行权衡:
如您所述,在 DocumentDB 中,您只存储英文术语。然后从客户端,你可以阅读所有需要的术语(有必要的过滤器等),然后将英文术语翻译成你想要的任何其他语言,并根据翻译结果从客户端排序。使用这种方法,您可以节省 DocumentDB 端的存储空间。但是,您需要在客户端自行排序。
正如 David 提到的,您可以在 DocumentDB 中存储英文术语和翻译术语,然后使用 DocumentDB SDK 对翻译术语执行 ORDER BY 查询。您确实需要在 DocumentDB 中存储更多数据。但是,好处是您不需要自己管理和排序数据。 DocumentDB SDK 和服务会为您处理所有麻烦,尤其是当您的集合已分区时。更新翻译术语的问题不会阻止您采用 DocumentDB 有效处理更新和替换文档的方法。您还可以对 JSON 文档进行版本控制,并在需要更改翻译时添加新文档,而不是修改现有文档。您还可以向现有文档添加新字段并保留多个翻译的术语。 DocumentDB 具有这种灵活性,因为它是无模式的。
如果您只需要根据翻译的术语对文档进行排序,而不是将翻译后的术语存储在 DocumentDB 中,您甚至可以在文档中存储一个序号字段,专门用于按目的订购。该序数字段需要尊重您拥有的已翻译术语的顺序。根据翻译术语的数量和更新频率,这可能是一个平衡存储和易用性的好选择。
希望对您有所帮助。
最佳,
冷宁
P.S。 DocumentDB 支持 Unicode。因此,如果需要,您可以将任何已翻译的术语存储在 DocumentDB 中。
假设您想将 JSON 数据存储在 Azure DocumentDB 中,例如
[{
id: 1,
caption: "Name1"
state: 'created'
},
{
id: 2,
caption: "Name2",
state: 'active'
}]
在用户界面中,状态值将被转换
created: Created (Lang 1) / Angelegt (Lang2)
active: Active (Lang 1) / Bearbeitung (Lang2)
查询SELECT * FROM c ORDER BY c.state
的结果集会按id 2, id 1
的顺序得到文档。用户界面会将翻译后的数据显示为“Active
”和“Created
”。对于第二种语言,它将是“Bearbeitung
”和“Angelegt
”。
对于第一种语言,感知到的排序顺序是 升序,对于第二种语言,感知到的排序顺序是 降序。如果用户查看翻译后的值,您可以轻松构建一个示例,其中 没有感知到的排序顺序 。
我正在寻找一种解决方案,为用户提供翻译值的排序顺序。当然,一种解决方案是从 DocumentDB 查询所有项目并在客户端进行排序。但我想避免这种情况(较大分页结果集的性能损失)。
如果有可能的解决方案将这种排序操作放在 DocumentDB 查询中,您能给我一个提示吗?
有多种方法可以解决这个问题,并且各有利弊,您需要根据这些方法进行权衡:
如您所述,在 DocumentDB 中,您只存储英文术语。然后从客户端,你可以阅读所有需要的术语(有必要的过滤器等),然后将英文术语翻译成你想要的任何其他语言,并根据翻译结果从客户端排序。使用这种方法,您可以节省 DocumentDB 端的存储空间。但是,您需要在客户端自行排序。
正如 David 提到的,您可以在 DocumentDB 中存储英文术语和翻译术语,然后使用 DocumentDB SDK 对翻译术语执行 ORDER BY 查询。您确实需要在 DocumentDB 中存储更多数据。但是,好处是您不需要自己管理和排序数据。 DocumentDB SDK 和服务会为您处理所有麻烦,尤其是当您的集合已分区时。更新翻译术语的问题不会阻止您采用 DocumentDB 有效处理更新和替换文档的方法。您还可以对 JSON 文档进行版本控制,并在需要更改翻译时添加新文档,而不是修改现有文档。您还可以向现有文档添加新字段并保留多个翻译的术语。 DocumentDB 具有这种灵活性,因为它是无模式的。
如果您只需要根据翻译的术语对文档进行排序,而不是将翻译后的术语存储在 DocumentDB 中,您甚至可以在文档中存储一个序号字段,专门用于按目的订购。该序数字段需要尊重您拥有的已翻译术语的顺序。根据翻译术语的数量和更新频率,这可能是一个平衡存储和易用性的好选择。
希望对您有所帮助。
最佳,
冷宁
P.S。 DocumentDB 支持 Unicode。因此,如果需要,您可以将任何已翻译的术语存储在 DocumentDB 中。