容量规划示例
这是一个 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 内存)
-
此页面有帮助吗?