1

我正在尝试通过 Gun 实现一个树形结构,该结构允许表达公司、这些公司的子公司及其产品之间的关系。我所做的结构如下:

  • 有一个根节点:这是某些产品(例如传感器)的主要销售者,其所有子节点(深度节点 1)都是其客户;
  • 从深度 1 开始有子节点,而不是叶子:这些是根结的客户;他们可以有不同的分支;支行可以有子支行等,支行数量不限;
  • 有叶结:这些是包含在一个分支,一个子分支,一个子分支中的产品......

这是我的想法:

  • 创建一个client集合;
  • 将客户端节点放入client集合中;
  • 创建一个branch集合;
  • 将分支节点放在branch集合中;
  • 链接branches设置为client设置;
  • 创建一个sensor集合;
  • 将传感器节点放在sensor集合内;
  • 链接sensors设置为branches设置。

有人这样想:

           [clients]
              /\
             /  \
    (MecDoland) (FrankMirros)
         |            |
     [branches]   [branches]
     /   |   \        |
  (NY) (CA)  (DA)    ...
   |     |     |
   | [sensors]...
   |     |
   |    ...
[sensors]
  /|\
......

这是我的实现

const Gun = require('gun')
const gun = new Gun()

// Just a util function
function printError(ack) {
    if (ack.err) {
        console.log(ack.err)
    }
}

// [clients]
const clients = gun.get('clients')   // group
// (MecDoland)
const mac = clients.get('MecDoland').put({ data: 12 })
// (FrankMirros)
const pm = clients.get('FrankMirros').put({ data: 13 })
console.log('Adding to "clients" set MecDoland...')
// [clients] -> (MecDoland)
clients.set(mac, printError)
console.log('Adding to "clients" set philip morris...')
// [clients] -> (FrankMirros)
clients.set(pm, printError)

// [branches]
const branches = gun.get('branches') // group
// (MecDolandNY)
const macny = gun.get('MacDonaldNY').put({ data: 1 }, printError)
// (MecDolandCA)
const macca = gun.get('MecDolandCA').put({ data: 2 }, printError)
// [branches] -> (MecDolandNY)
branches.set(macny, printError)
// [branches] -> (MecDolandCA)
branches.set(macca, printError)
// [MecDoland] -> [branches]
mac.set(branches, printError)

//clients.map().once(v => console.log('CLIENT:',v))
//branches.map().once(v => console.log('BRANCH:',v._))

const sensors = gun.get('sensorsMecDolandNY') // group
const temp = gun.get('temperatue').put({ measure: 'celsius', value: 37 })
const press = gun.get('pressure').put({ measure: 'Bar', value: 2 })
sensors.set(temp)
sensors.set(press)
macny.set(sensors)
// Show all clients
gun
    .get('clients')
    .map()
    .once(v => console.log(v))

有两点我无法澄清:

1 - 我不知道我是否很好地使用了 Gun set:我尝试添加一些关系但没有成功;考虑以下说明:

macDoland.get('client').put(rootNode)
frankMirrors.get('client').put(rootNode)

我试图client为两个客户节点建立关系,但打印rootNode显示我只与节点rootNode有关系!与节点的第一个关系消失了,所以我开始使用 Gun 集。我的代码有效(或多或少),但我不知道我是否正确使用 Gun set以及这是否是正确的方法,因为我想在主要供应商、客户、客户分支机构之间建立这种关系和每个分支中的传感器。clientfrankMirrorsmacDoland

2 - 我想让这种方法更通用和可扩展:现在有客户端、分支和传感器;这可能会在未来发生变化,客户端和传感器之间的级别数量可能会增加。这意味着客户端节点(深度 1)和传感器(最大深度)之间可能存在任意数量的级别:例如,一个非常小的客户端可能没有分支,因此它的客户端节点smallCompany将直接链接到它的sensors; 再举一个例子,一个巨大的客户可能有(比如说)五个深度级别,我不想硬编码 Gun 集名称,例如macDolandNySubSubSubSubBranch. 如何为任意数量的子分支提供可扩展性?

4

0 回答 0