知识库

容量规划示例

这是一个 Neo4j 工作负载容量规划的粗略示例,包含以下需求列表

需求

需求

总用户数

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

每个用户每天访问(读取/查询)次数

5

节点数

5000万-7500万

关系数

1亿 - 1.5亿

每个节点的属性数

最小 1,最大 50,平均 5

每个关系的属性数

最小 0,最大 20,平均 2

平均请求时间

500 毫秒

峰值时每秒查询数

200/秒

批量插入和更新频率

每天 4-5 次

批量大小假定为提供数据量的 10%

~ 每天 20 GB,500 万个节点

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

一小时

RR

在美国 + 欧盟 AWS 中

DR

在美国的 2 个可用区进行 DR

分析

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

  • 20% 用于索引

  • 最大节点数和关系数(每个节点和关系的平均属性数)

数量

字节/对象

空间(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) 随后我们估计每个实例的总内存约为 100GB [ 5 GB(操作系统) + 60 GB(数据 + 索引 + 50% 增长) + 30GB(堆) ~ 100GB 总内存 ]

4) 最后,我们估计需要大约 10 个 CPU 核心(或 20 个虚拟 CPU 核心)来应对峰值时每秒 200 次查询和 500 毫秒响应时间的需求,这在一个包含 3 个核心和 2 个 RR 的集群中(见下文)

  • 每秒并发请求数 200/秒

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

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

  • 设计时考虑的实例故障数 F=1

  • 核心数 = r x w / c = 200 x .5 / .5 = 200

  • 集群大小 = 3 个核心 + 2 个 RR

  • 每台机器核心数 = 200/5 = 40(或 80 个虚拟 CPU 核心)

  • 估计

    • 集群配置 (5 个实例) x (每个实例 80 个虚拟 CPU 核心,带 100GB 内存)

© . All rights reserved.