noSQL中适当的JSON格式

时间:2018-01-20 17:39:16

标签: json nosql

我想保留一个嵌套组的数据库(例如,公司层次结构:经理管理员管理其他管理员工的经理......)

如何将此结构表示为JSON?

  1. 每个经理的名字应该是一个关键,而他下面的经理应该是一个对象吗? (假设每位经理都有一个独特的名字)
  2. { "mamanger1": { "sub_manager1": { ... }, "sub_manager2": { ... } } }

    1. 或者,JSON是否应该由“递归对象”组成,即一个键值对象,其中key是一个标识符,value是一个包含相同键值对象的数组? 在这种情况下,键值对将被称为“名称” - “雇员”。
    2. { "name": "mamanger1", "employees": [ { "name": "sub_manager1", "employees": [ ... ] }, { "name": "sub_manager2", "employees": [ ... ] }, ] }

      • 在第一个示例中,每个经理都有一个唯一的密钥(搜索效果更好?)

      • 在第二个示例中,所有对象都有保存键(更容易循环?)

1 个答案:

答案 0 :(得分:0)

在我看来,你应该使用第二种方法:

作用:

  1. 它更具可扩展性。您可以向经理实体添加更多数据 以后,如果需要的话。
  2. 轻松循环,因为您有针对每个值的字段名称。
  3. 您的方法将更具真实世界,因为经理姓名可能是也可能不是唯一的。
  4. 您将不会失去搜索性能,因为您将拥有关键的“名称”,并且值仍然是您所独有的。即使它不是唯一的,所有nosql db都存储来自同一节点上的键的值范围。
  5. 当您要求提供有关名称为“xyz”的经理/经理的详细信息时,搜索过程如下:

    1. 你打了api
    2. 节点接收请求
    3. 请求将被转发到具有xyz所属范围的节点/节点
    4. 仅扫描此节点的数据,并返回匹配的数据。
    5. 另外,按照我的说法,第一种方法是创建与经理人数一样多的关键。考虑到节点数量有限,如果您尝试将“xyz”的详细信息作为密钥,则将扫描一个节点。

      如果您在同一查询中搜索“xyz”和“xyz1”,您将在方法2中获得更好的性能。由于字符串值彼此接近,您可以在同一节点(大多数情况下)获取它。但是,在第一种方法中,在同一节点上获取它的可能性较小,因为两者都不在一起被视为邻居。