我正在考虑学习JanusGraph在我的新项目中使用,但我无法理解一些事情。
Janus可以像任何数据库一样使用并支持“插入”,“更新”,“删除”操作,因此JanusGraph会将数据写入Cassandra或其他数据库来存储这些数据,对吗?
在JanusGraph存储节点,边缘,属性等的地方,它会将这些写入数据库,对吗?
这些数据应该由Janus加载到内存中还是会一直从Cassandra读取?
JanusGraph读取的数据必须在每个查询中加载JanusGraph,否则它会在数据库中选择以检索我需要的数据?
在数据库中检索的数据只是我需要的,或者Janus会一直读取数据库中的所有记录吗?
我应该在生产项目中使用JanusGraph,还是应该等到生产准备就绪?
我正在开发某种社交网络,需要存储友谊,帖子,评论,用户块以及做一些弹性搜索,在这种情况下,我应该使用什么数据库后端?
答案 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与HBase或BerkeleyDB一起使用,因此我无法在那里发表评论。
虽然在后端之间进行更改非常简单(您需要做的就是调整一些配置并检查您的依赖关系到位),因此在开发过程中随时可以使用后端。您只需要在生产时提交后端或者对每个后端更加确定。
答案 1 :(得分:1)
在考虑用于新项目的存储后端时,重要的是要考虑您想要做出哪些权衡。在我的个人项目中,我喜欢使用NoSQL图形数据库,因为它具有以下优于关系dbs的优势
以下是用Kotlin编写的JanusGraph和Neo4j后端示例:
JanusGraph的主要优势在于可以灵活地插入您想要的任何存储后端。