如何按字母数字排序具有不同翻译的值?

时间:2016-08-24 07:30:46

标签: azure azure-cosmosdb

想象一下,您希望将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查询中,您能给我一个提示吗?

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题,并且有利有弊,您需要根据这些方法进行权衡:

  • 如您所述,在DocumentDB中,您只存储英文术语。然后从客户端,您可以阅读所有需要的术语(使用必要的过滤器等),然后将英语术语翻译成您想要的任何其他语言,并根据翻译结果从客户端进行排序。使用此方法,可以在DocumentDB端保存存储。但是,您需要在客户端自行进行排序。

  • 正如David所提到的,您可以将英语术语和翻译后的术语存储在DocumentDB中,然后使用DocumentDB SDK对翻译的术语执行ORDER BY查询。您需要在DocumentDB中存储更多数据。但是,好处是您不需要自己管理和排序数据。 DocumentDB SDK和服务为您处理所有麻烦,特别是如果您的集合是分区的。更新翻译术语的问题不会禁止您采用方法,因为DocumentDB会有效地处理更新和替换文档。您还可以在需要更改转换时对JSON文档进行版本控制并添加新文档,而不是修改现有文档。您还可以向现有文档添加新字段并保留多个翻译的术语。 DocumentDB具有这种灵活性,因为它是无模式的。

  • 如果您只需要根据翻译的术语对文档进行排序,而不是将翻译后的术语存储在DocumentDB中,您甚至可以在文档中存储一个专门用于ORDER BY目的的序数字段。该序数字段需要尊重您所翻译的术语的顺序。根据翻译的术语数量和更新频率,这可能是一个很好的选择,可以平衡存储和易用性。

希望有所帮助。

最佳,

冷凝管

P.S。 DocumentDB支持Unicode。因此,如果需要,您可以在DocumentDB中存储任何已翻译的术语。