2016-08-24 80 views
0

想象一下,你要存储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查询中,您能给我一个提示吗?

+0

不知道我明白这个问题。如果您将翻译的文本存储在一个属性中,则可以按该属性排序。否则,这将取决于您的应用程序/服务器来处理,因为它必须基于翻译查找动态构建内容。你怎么做这是一个相当广泛的讨论,没有正确的解决方案/答案。 –

+0

@DavidMakogon - 是的,一种有效的方法是使用更多存储并将所有翻译存储在文档中。唉,语言相关标题可能会随时间而改变,然后所有现有数据都必须修改。但这似乎正是你提到的广泛讨论。我非常感谢,如果你有一个指针,我可以在这里阅读更多关于这个话题。我担心,我寻找的魔力不存在。 –

回答

1

有多种方法来解决这个问题,有关于你需要让你权衡得失,基于:

  • 至于你提到的在DocumentDB,你只存储英文术语。然后从客户端,您可以阅读所有必要的术语(包括必要的过滤器等),然后根据翻译结果将英语术语翻译为您希望的任何其他语言,并从客户端进行排序。通过这种方法,您可以将存储保存在DocumentDB端。但是,您需要在客户端进行排序。

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

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

希望有所帮助。

最佳,

冷凝管

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

相关问题