在RESTAPI中使用spark RDD作为数据源

在RESTAPI中使用spark RDD作为数据源,api,apache-spark,graph,graph-databases,Api,Apache Spark,Graph,Graph Databases,有一个在Spark上计算并存储到Cassandra的图形。还有一个REST API,它的端点用于获取带有边和边的边的图形节点。 此二级图可能包含多达70000个节点。目前使用Cassandra作为数据库,但按键从Cassandra提取大量数据需要大量时间和资源我们尝试了TitanDB、Neo4j和OriendDB来提高性能,但Cassandra的效果最好。 现在有另一个想法。在API服务中持久化RDD(或可能是GrapgX对象),并在API调用时从持久化RDD中筛选必要的数据。 我想,当RDD适

有一个在Spark上计算并存储到Cassandra的图形。
还有一个REST API,它的端点用于获取带有边和边的边的图形节点。
此二级图可能包含多达70000个节点。
目前使用Cassandra作为数据库,但按键从Cassandra提取大量数据需要大量时间和资源
我们尝试了TitanDB、Neo4j和OriendDB来提高性能,但Cassandra的效果最好。

现在有另一个想法。在API服务中持久化RDD(或可能是GrapgX对象),并在API调用时从持久化RDD中筛选必要的数据。
我想,当RDD适合内存时,它会工作得很快,但如果它缓存到磁盘,它的工作方式将类似于完全扫描(例如,完全扫描拼花文件)。 我还希望我们将面对这些问题:

  • 火花内存泄漏
  • 更新此RDD(取消持久化上一个、读取新的和持久化新的RDD)将需要停止API
  • 并发使用此RDD将需要手动管理CPU资源

有人有这样的经验吗

Spark不是存储引擎。除非您每次都要处理大量数据,否则您应该考虑:

  • 内存数据网格-Hazelcast、ApacheIgnite、Coherence、GigaSpaces等
  • 记忆中的卡桑德拉-
  • 在其他框架/数据库中搜索“内存中”选项