对于 Cosmos DB and/or 图形数据库,我可以有 O(1000s) 个连接到单个顶点的顶点和 O(1000s) 个关闭顶点的属性吗?

Can I have O(1000s) of vertices connecting to a single vertex and O(1000s) of properties off a vertex for Cosmos DB and/or graph databases?

我有一个具有以下模式的图表:

- Workflow:

-- Step #1
--- Step execution #1
--- Step execution #2
    [...]
--- Step execution #n

-- Step #2
--- Step execution #1
--- Step execution #2
    [...]
--- Step execution #n

[...]

-- Step #m
--- Step execution #1
--- Step execution #2
    [...]
--- Step execution #n

我有几个设计问题:

  1. 一个可以挂多少个执行文件 单顶点而不影响性能?例如,每个“步骤”可能有数百个 'executions'。我使用两条边连接它们——'has_runs'(从步骤→执行)和'execution_step'(从执行→步骤)。

    图形数据库(Cosmos DB 或任何图形数据库)是否设计用于处理与单个顶点关联的数千个顶点和边?

  2. 每个 'execution' 都有(理论上)与之相关的无限属性,但它可能是 10 < x < 100 个属性。那样行吗?图数据库是为了支持如此大量的顶点属性吗?

    我看到的所有演示似乎总共有 < 10 个属性。

Is it appropriate to have so many execution documents hanging off a single vertex? E.g. each "step" could have 100s of 'executions' off it.

从单个顶点有 100 条边并不反常,听起来也很合理。在实践中,您很容易发现自己的模型有数百万条边,并深入研究超节点问题,此时您需要根据预期的查询模式做出一些设计选择来处理此类问题。

Each 'execution' has (theoretically) unlimited properties associated with it, but is probably 10 < x < 100 properties. Is that ok? Are graph databases made to support many, many properties off a vertex?

在设计模式时,我认为图建模者倾向于根据图元素(即 vertices/edges)来考虑具有无限属性的能力,但实际上他们必须考虑图元素的能力图系统而不是假设它们都是相同的。一些图,如 TinkerGraph,将仅受可用内存的限制。 JanusGraph 等其他图将受底层数据存储(例如 Cassandra、Hbase 等)的限制。

我不知道有哪个图形系统会在存储 100 个属性时遇到问题。当然,所有这些笼统的说法都有一些警告——举几个例子:

  1. 整数和布尔值的 100 个独立的简单原始属性不同于 100 个字节数组,每个数组包含 100 兆字节的数据。
  2. 在大多数系统上存储 100 个属性是可以的,但是您打算索引所有 100 个吗?在某些系统上这可能是个问题。既然你用“CosmosDB”标记了你的问题,我会说我认为他们不会太担心,因为他们会自动索引所有内容。
  3. 如果这 100 个属性中的任何一个是 multi-properties,您就可以创建一种不同类型的超级节点 - 胖顶点(具有数百万个属性的顶点)。

综上所述,一般来说,您的模式对于任何图形系统来说听起来都是合理的。