5

我正在考虑学习 JanusGraph 以在我的新大项目中使用,但我无法理解一些事情。

Janus 可以像任何数据库一样使用,并且支持“插入”、“更新”、“删除”操作,所以 JanusGraph 会将数据写入 Cassandra 或其他数据库来存储这些数据,对吧?

JanusGraph 在哪里存储节点、边、属性等,它会将这些写入数据库,对吧?

这些数据应该由 Janus 加载到内存中,还是一直从 Cassandra 中读取?

JanusGraph 读取的数据必须在每个查询中加载到 JanusGraph 中,否则它将在数据库中进行选择以检索我需要的数据?

数据库中检索到的数据只是我需要的,否则 Janus 会一直读取数据库中的所有记录?

我应该在我的生产项目中使用 JanusGraph,还是应该等到它准备好生产?

我正在开发某种社交网络,需要存储友谊、帖子、评论、用户块并做一些弹性搜索,在这种情况下,我应该使用什么数据库后端?

4

2 回答 2

13

Janus 会将数据写入 Cassandra 或其他数据库来存储这些数据,对吧?

Janus 在哪里存储节点、边、属性等,它会将这些写入数据库,对吗?

Janus Graph 会将数据写入您配置它使用的任何存储后端。这包括卡桑德拉。它使用此处粗略概述的数据模型将此数据写入底层数据库

这些数据应该由 Janus 加载到内存中,还是一直从 Cassandra 中读取?

数据库中检索到的数据只是我需要的,否则 Janus 会一直读取数据库中的所有记录?

Janus Graph 只会加载到您在查询/遍历期间触摸的内存顶点和边。因此,如果您执行以下操作:

graph.traversal().V().hasLabel("My Amazing Label");

Janus 将仅读取并加载到内存中的顶点label。所以你不必担心初始化一个图连接然后等待整个图序列化到内存中才可以查询。Janus 是一个懒惰的读者。

我应该在我的生产项目中使用 Janus,还是应该等到它准备好生产?

这完全取决于您和您的用例。如页面底部所示,Janus已经在生产中使用。Janus 是从 TitanDB 衍生出来的,并在 TitanDB 上进行了改进,TitanDB也用于多个生产用例。因此,如果您想知道“它准备好了吗”,那么我会说是的,考虑到它的现有用途,它显然已经准备好了。

我应该使用什么数据库后端?

同样,这完全取决于您。我使用Cassandra是因为它可以水平扩展,而且我发现它更易于使用。它似乎也适合所有不同大小的数据。

我玩过Google Big Table,它看起来也很强大。然而,它只适合非常大的数据,而且它也只在云上,因为 Cassandra 可以很容易地在本地托管。

我没有将 Janus 与HBaseBerkeleyDB一起使用,所以我不能在那里发表评论。

不过,在后端之间进行更改非常简单(您需要做的就是调整一些配置并检查您的依赖项是否到位),因此在您的开发过程中可以随意使用后端。您只需要在进行生产或对每个后端更加确定时才真正需要提交后端。

于 2017-08-03T05:41:50.967 回答
2

在考虑为新项目使用什么存储后端时,重要的是要考虑您想要做出的权衡。在我的个人项目中,我喜欢使用 NoSQL 图形数据库,因为与关系数据库相比具有以下优势

  • 快速迭代新项目时无需迁移模式可提高生产力
  • 遍历高度规范化的数据模型并不像使用 RDBMS 中的 JOIN 那样昂贵
  • 大多数包括内存配置,非常适合实验和测试。
  • 支持多机集群和分区容错。

以下是用 Kotlin 编写的示例 JanusGraph 和 Neo4j 后端:

JanusGraph 的主要优势是可以灵活地插入您想要的任何存储后端。

于 2018-03-15T08:34:19.300 回答