跳转至

系统设计建议

选择 QPS 优先或时延优先

  • Nebula Graph 3.1.3 更擅长处理(互联网式的)有大量并发的小请求。也即:虽然全图很大(万亿点边),但是每个请求要访问到的子图本身并不大(几百万个点边)——单个请求时延不大;但这类请求的并发数量特别多——QPS 大。
  • 但对于一些交互分析型的场景,并发请求的数量不多,而每个请求要访问的子图本身特别大(亿以上)。为降低时延,可以在应用程序中将一个大的请求,拆分为多个小请求,并发发送给多个 graphd。这样可以降低单个大请求的时延,降低单个 graphd 的内存占用。另外,也可以使用图计算功能 Nebula Algorithm

数据传输与优化

  • 读写平衡。Nebula Graph 适合读写平衡性的在线场景,也即 OLTP 型的的“并发的发生写入与读取”;而非数仓 OLAP 型的“一次写入多次读取”。
  • 选择不同的写入方式。大批量的数据写入可以使用 sst 加载的方式;小批量的写入使用INSERT语句。
  • 选择合适的时间运行 COMPACTION 和 BALANCE,来分别优化数据格式和存储分布。
  • Nebula Graph 3.1.3 不支持关系型数据库意义上的事务和隔离性,更接近 NoSQL。

查询预热与数据预热

应用端进行预热:

  • Graphd 不支持预编译查询及相应生成查询计划,也不支持缓存之前的查询结果;
  • Storaged 不支持预热数据,只有 RocksDB 自身的 LSM-tree 和 BloomFilter 会启动时加载到内存中。
  • 点和边被访问过后,会各自缓存在 Storaged 的两种 (LRU) Cache 中。

最后更新: March 7, 2023