知识库

容量规划示例

下面给出一个简易的 Neo4j 工作负载容量规划示例,满足以下需求列表

要求

需求

总用户数

100‑200(最终用户,可能通过前端应用访问)

每位用户每日访问次数(读/查询)

5

节点数量

5‑7.5 亿

关系数量

10‑15 亿

每个节点的属性数量

最小 1,最大 50,平均 5

每个关系的属性数量

最小 0,最大 20,平均 2

平均请求时间

500 毫秒

峰值每秒查询数

200 次/秒

批量插入和更新的频率

每天 4‑5 次

批量大小假设为提供体量的 10%

约 20 GB/天,500 万节点

增量体量的最大处理/摄取时间

1 小时

RR

在美国 + 欧洲 AWS 区域

DR

在美国的 2 个可用区部署 DR

分析

1) 估算初始数据库大小约为 38 GB(见下表)——假设

  • 索引占 20%

  • 最大节点数与关系数以及每节点/每关系的平均属性数

Number

字节/对象

空间(GB)

属性小计

节点

75000000

15

1.048

关系

150000000

34

4.750

每节点属性数

5

41

14.319

每关系属性数

2

41

11.455

25.774

索引(百分比)

20

6.314

总计

37.886

2) 假设每日加载 500 万节点(即 10%),并且我们需要为下一年额外 50% 的增长预留容量。

3) 因此估算每实例大约需要 100 GB 总内存 [5 GB(操作系统)+ 60 GB(数据 + 索引 + 50% 增长)+ 30 GB(堆)≈ 100 GB]

4) 最后,估算需要约 10 个 CPU 核心(或 20 个 vCPU 核心)以在 3 核 + 2 RR 的集群中满足 200 查询/秒、响应时间 500 ms 的峰值需求(见下文)。

  • 每秒并发请求数 200 次/秒

  • 工作负载/查询处理时间 (w = 0.50 秒)

  • CPU 负载系数 0.5(c = 0.5;即 CPU 平均忙碌 50%)

  • 设计时考虑的实例失效数 F = 1

  • 核心数 = r × w / c = 200 × 0.5 / 0.5 = 200

  • 集群规模 = 3 核 + 2 RR

  • 每台机器的核心数 = 200 / 5 = 40(或 80 个 vCPU 核心)

  • 估算

    • 集群配置(5 个实例)×(每实例 80 个 vCPU 核心,100 GB RAM)

© . This site is unofficial and not affiliated with Neo4j, Inc.