我应该使用JanusGraph作为主数据库来存储新项目的所有数据吗?

时间:2017-08-01 22:02:23

标签: graph janusgraph

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

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

在JanusGraph存储节点,边缘,属性等的地方,它会将这些写入数据库,对吗?

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

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

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

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

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

2 个答案:

答案 0 :(得分:10)

  

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

     

如果Janus存储节点,边缘,属性等,它会将这些写入数据库,对吗?

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

数据模型将此数据写入底层数据库
  

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

     

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

Janus Graph只会加载到查询/遍历期间触摸的内存顶点和边缘。所以,如果你做了类似的事情:

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

Janus将读取并加载到内存 顶点label。因此,您无需担心初始化图形连接,然后等待整个图形序列化到内存中,然后才能进行查询。 Janus是一个懒惰的读者。

  

我是否应该在生产项目中使用Janus,还是应该等到生产准备就绪?

这完全取决于您和您的用例。 Janus正在生产中使用,可以在页面底部看到here。 Janus在TitanDB上分叉并进行了改进,这也用于几个生产用例。因此,如果你想知道“它准备好了”那么我会说是的,它已经准备好了,因为它已经存在。

  

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

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

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

我没有将Janus与HBaseBerkeleyDB一起使用,因此我无法在那里发表评论。

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

答案 1 :(得分:1)

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

  • 在快速迭代新项目时,不需要迁移模式可以提高工作效率
  • 遍历高度规范化的数据模型并不像RDBMS中的JOIN那样昂贵
  • 大多数都包含内存配置,非常适合实验和实验。测试
  • 支持多机群集和分区容差。

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

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