到目前为止,我一直使用关系数据库(确实很高兴!)。但是,最近,我发现了Parse并发现它很好,因此决定尝试一下。但是,它带有NoSQL数据库。我仍在努力解决这个问题。所以我的问题是,您如何建议实现本地化?我可以想到以下方法,您怎么看?

  • 方法A:在文档上有一个“字符串”字段,并将所有特定于语言的数据存储在该字段中。例如,
    "strings":
    {
      "en" :
        {
          "title" : "English title"
        }
      "de" :
        {
          "title" : "Deutsch Titel"
        }
    }
    
  • 方法B:文档上有多个字段,每个字段都指向一种语言特定的文件。一个定义另一个名为字符串的文档。例如,
    "strings_en": <Pointer to a *strings* object>
    "strings_de": <Pointer to a *strings* object>
    
    // And here's one *strings* document
    {
      "title" : "My English title"
    }
    
  • 方法C:就像在关系数据库架构中一样,有一个单独的带有语言代码的字符串表。分别查询该表/文档并合并结果
  • 方法D:(新)与方法B相似,在两个文档中使用许多列,目的是将所有相关数据保留在同一文档中。
    {
      "title_en" : "English title",
      "title_de" : "Deutsch titel",
      "description_en" : "English description",
      "description_de" : "Deutsch beschreibung"
    }
    

  • 方法A:对我来说很有意义,但是我不知道一种简单的方法(在Parse框架中)仅将相关数据发送回客户端。它将所有字符串发送到客户端->冗余带宽使用

    方法B:来自关系数据库背景,我不希望有太多的列(对于30种不同的语言,它最终可能有30个不同的列),而且客户端不能只使用object.strings。它总是必须在字段名称的末尾附加语言代码,这很乏味(也很冒险)。但是这种方法对我来说最有意义。

    方法C:我听到你说“如果要使NoSQL适应关系数据库设计范例,NoSQL有什么意义”

    方法D:是的,您最终将获得很多列,但是我觉得一个主要目标是将所有必要的数据保留在一个文档中,而不是将它们分发到1个以上的文档中。字段数量根本不是问题。因此,我现在要采用这种方法。

    那么,如何在NoSQL db模式中实现本地化?

    最佳答案

    最近在RavenDB论坛上有一个关于该主题的讨论。 See Here

    像NoSQL中的大多数事情一样,有许多不同的选项。出现的一个想法是,在许多文档数据库(如RavenDB)中,您可以具有基于字符串的“语义”键。这些可以被利用来提供数据本地化。

    例如,考虑多个文档共同代表一个产品:

    products/1
    {
      "Price" : 10.00
    {
    
    products/1/en
    {
      "Name" : "ball"
    }
    
    products/1/es
    {
      "Name" : "bola"
    }
    
    products/1/fr
    {
      "Name" : "balle"
    }
    

    不可本地化的属性存储在作为主要文档 key 的products/1中。但是,可本地化的字符串可以放入与它们的键相关的其他文档中。

    为了使这项工作顺利进行-使用不同的文档会产生一些管理开销。在RavenDB中-这将由一个自定义的“捆绑包”提供。 (它尚不存在-我正在研究它。)其他数据库可能具有不同的实现细节,可能仍使这种方法可行。

    关于parsing - 如何使用NoSQL实现本地化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15729830/

    10-13 02:47