ExecutorService
后端 ExecutorService
默认情况下,JanusGraph 使用 ExecutorService 来并行处理一些查询,用于不支持多键查询的存储后端实现(请参阅 storage.parallel-backend-ops 配置选项)。
信息
官方支持的后端:Cassandra、HBase、ScyllaDB、Bigtable 均支持多键查询。因此,这些后端实现会忽略 storage.parallel-backend-ops 配置,而是使用多键查询。
BerkeleyDB 和 in-memory 存储后端不支持多键查询。因此,可以为此类存储后端使用后端操作执行器服务。
JanusGraph 允许通过 storage.parallel-backend-executor-service 配置部分中提供的配置选项来配置所使用的执行器服务。
目前,JanusGraph 具有以下 ExecutorService 实现可供使用(通过 storage.parallel-backend-executor-service.class 控制)
fixed- 固定线程池大小;cached- 缓存线程池大小;- 自定义 ExecutorService;
自定义 ExecutorService
要使用自定义 ExecutorService,必须提供配置选项 storage.parallel-backend-executor-service.class,该选项必须是 ExecutorService 实现类的完整类名。
所提供的实现 ExecutorService 的类必须具有带 ExecutorServiceConfiguration 参数的公共构造函数(首选构造函数)或公共无参数构造函数。当两个构造函数都可用时,将使用带 ExecutorServiceConfiguration 参数的构造函数。
当自定义 ExecutorService 随 ExecutorServiceConfiguration 一起提供时,不需要使用 ExecutorServiceConfiguration 中提供的任何配置选项,但有时使用提供的配置会很方便。ExecutorServiceConfiguration 中提供的配置选项通常是通过 storage.parallel-backend-executor-service 的配置提供的那些配置选项。
Cassandra 后端 ExecutorService
尽管 Cassandra 后端由于支持多键查询而不使用 storage.parallel-backend-executor-service,但它有自己的内部 ExecutorService 用于查询反序列化处理。
通常不建议配置此执行器服务,因为它默认被认为是最佳的。
如果默认执行器服务由于任何原因不符合用户的用例,可以使用 storage.cql.executor-service 下的配置选项对其进行修改。
构建 Cassandra 后端 ExecutorService 的规则与用于构建并行后端查询 ExecutorService(如上所述)的规则相同。唯一的区别是 Cassandra 后端 ExecutorService 的配置是通过 storage.cql.executor-service 下的配置选项提供的。
警告
默认情况下,storage.cql.executor-service 配置为核心池大小为处理器数量的两倍。除非有理由人为限制 CQL 切片查询反序列化的并行性,否则建议始终使用默认值。