【问题标题】:Should I use JanusGraph as main database to store all my data for a new project?我应该使用 JanusGraph 作为主数据库来存储新项目的所有数据吗?
【发布时间】:2018-01-08 22:38:05
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

标签: graph janusgraph


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    Janus Graph 会将数据写入您配置使用的任何storage backend。这包括卡桑德拉。它使用大致概述的数据模型here

    将此数据写入底层数据库

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

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

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

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 非常感谢您,菲利普。我无法理解这一点,因为无论如何我都无法连接到后端,我只花了 3 天时间尝试连接,但每次都遇到相同的错误。配置文件与文档建议的配置相同,但我得到:在 [conf/gremlin-server/janusgraph-cassandra-es-server.properties] 配置的 Graph [graph] 无法实例化,并且在 Gremlin Server 中不可用. GraphFactory 消息:GraphFactory 无法实例化此 Graph 实现 [class org.janusgraph.core.JanusGraphFactory]
    • 嗨@Augusto我建议你提出一个新问题吗?在那个问题中显示您使用的配置,以及您如何使用它,当然还显示您遇到的错误。如果您这样做,我自己和其他人会更有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多