文档数据库-使用嵌套数据(CosmosDB,Mongo等)进行数据建模

时间:2018-10-14 15:05:23

标签: mongodb nosql azure-cosmosdb data-modeling

我们现在在RDMBS中拥有客户位置数据,并且正在研究vNext架构,该架构可能会转换为Document DB(Json)架构。我将不胜感激任何建议/参考/ Youtubes / etc,以帮助您嵌套位置。

一个地点可以附加物品;并且也可以有子位置。嵌套级别取决于客户的组织结构。一些是“简单的”位置,没有子位置,而另一些可以具有许多级别(区-区域-分区-州-城市-位置)。

目前,我们正在像这样存储它们(伪mssql dml):

create table Location as 
   LocationID int identity(1,1),
   LocationName varchar(250),
   (other fields)
   ParentLocationID int

我只是将所有子位置都嵌入到主目录下,我担心的是文档可能会变得很大-从而影响CRUD操作(性能和成本)。

此外,我们的应用程序可以通过其权限集来限制用户访问。

用户A可以访问所有位置 用户B只能访问位置5、6、7、8、9、10

这些权限适用于大多数搜索。我们目前仅将它们存储在关系表中---> User&UserLocation。

这将是一种“纯粹的”嵌入式方法,但是我认为它不一定是最佳选择。由于每个数据库似乎都有一个用户可分配或自动创建的值的ID,因此在模型中省略了该ID。

{
    "name": "North America",
    "locations": [
    {    
        "name": "Canada",
        "locations": [
        {
            "name": "Alberta",
            "locations": [
            {
                "name": "Banff",
                "locations": [
                {                  
                    "name": "Main Street",
                    "locations": [ ]
                 },
                 ]               
           },
           ]   
       },
       ]   
   },
   ]   
}

我最初的想法是使用混合方法-一个位置仅存储其子位置的ID

{        “ id”:“ NA”,        “ name”:“北美”,        “位置”:[“ CA”,“美国”]    }

{        “ id”:“ CA”,        “ name”:“加拿大”,        “位置”:[“ AB”,“ BC”,...]    },

{        “ id”:“ AB”,        “ name”:“ Alberta”,        “位置”:[“班夫”,“卡尔加里”,...]    }

{        “ id”:“班夫”,        “ name”:“ Banff”,        “位置”:[“大街”,...]    }

这些ID必须是GUID或其他一些唯一值;以上数值仅供演示之用。在单独的文档中,资源将引用ID。每个客户存储的值都不同-但是资源的比例:位置的范围可以从10:1到10,000:1。

{
    "name": "laptop",
    "type": "computer",
    "location": "Building1" 
}

我们的应用程序访问与单个位置级别有关的数据-但它还会搜索并以树形视图显示整个位置列表。此外,搜索通常是针对资源进行的-受用户有权访问的位置的限制。

谢谢

0 个答案:

没有答案