使用和缩放Titan图形数据库



我正在找出存储层次数据(父母关系)的选择。

由于树是图形,并且(树的森林)也是一个图形,因此图数据库似乎比RDBMS ESP更适合该帐单。因为我关注优化读写操作。

  • 优化写作意味着层次结构的变化需要最少的写作。
  • 优化读取意味着要实现特定节点消费者最少的读取操作的完整路径。

我的用例是:

  • 每个用户的树。我应该在用户空间上存储并使用一个图表或每个用户一个图吗?
  • 路径查询从任何节点开始,然后回到树的根部。
  • 儿童节点存储链接到父节点

由于我的所有资源都在AWS中,因此能够使用Titan DynamoDB似乎是理想的。

我真正的问题是了解如何扩展和管理泰坦。

  1. 我是否需要Gremlin Server实例?换句话说,我是否需要使用Gremlin Server站立一个EC2实例才能对Titan做任何事情?还是可以使用Java Titan API直接使用图形数据?

  2. 我是否需要明确地将数据碎片?换句话说,随着使用的增加以及数据量和操作量的增加,我是否需要站立更多的Gremlin服务器?当服务器数量扩展时,我是否需要从客户端从这些服务器进行一致的哈希以执行操作?

  3. 我是否需要设置弹性搜索群集才能从任何节点启动遍历?还是使用顶点表示对象和边缘以表示父母的关系足够?我可以保证顶点ID在整个用户空间中都是唯一的。我还可以使用唯一的用户ID来装饰每个顶点。在这种情况下,我需要弹性搜索吗?我希望弹性搜索是免费的或更复杂的搜索类型查询,而不是确切的查询!

  4. 随着前端数量的增加,每个前端可以打开图形(用户空间跨单个图)吗?如果每个用户的图形,则由于前端没有亲和力,因此可以为每个用户打开相同的图。这可以吗?

我找不到任何关于其中任何文档的文档。谢谢!

我将尝试在以下内容中回答您的问题:

  1. 两种解决方案都是可能的,在选择Gremlin Server或通过其他二级数据存储中具有自定义查询的自定义数据访问层之间的确定,这是可能的。尽管我希望拥有自定义的数据访问层,但可以通过Gremlin Server响应所有Gremlin查询要求。

  2. Gremlin Server只是您的应用程序和数据存储之间的接口,并且由于缓存机制,它是内存密集的。数据可以存储在不同的机器中,例如DynamoDB机器群。这取决于并发用户的数量,但我认为对于大多数应用程序,垂直缩放量就足够了。如果您要在高度并发的环境中使用泰坦,除了单机器的资源之外,您可能必须在不同的机器上创建不同的Gremlin-Servers并处理负载平衡机制。问题是您必须以类似的查询从高速缓存效率的角度击中同一Gremlin-Server的方式控制发送请求。

  3. 是的,索引后端对于除了简单检索以外的更复杂的查询非常有用。如果您想通过相似性进行有条件的搜索或文本搜索,则辅助索引后端(如Solr/Elastic或Lucene)很有用。这是因为像Lucene这样的索引器可以提供反向索引结构,这可能有助于类似的搜索。如果您打算在所有名称中搜索所有具有" foo"的父母/孩子,则必须使用索引后端。如果您要搜索所有年龄少于40岁的父母/儿童,则也必须使用索引后端。可以通过这些链接访问有关索引后端的更多信息。http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.htmlhttp://s3.thinkaurelius.com/docs/titan/1.0.0/index-parameters.html

  4. 强烈建议将打开图的数量限制为整个应用程序的一个。泰坦使用一些缓存机制,鼓励您在整个应用程序中具有一个图形实例,以表演性能。由于在单个图形实例和事务上仅可见数据,因此,如果您想要实时应用程序,建议使用单个图形实例和单个事务。但是,在整个应用程序中使用超过1个图形实例进行仅读取事务不是错误的,但不是有效的。

您可以在以下链接中找到有关泰坦图数据库的大量信息:

主要泰坦文献:http://s3.thinkaurelius.com/docs/titan/1.0.0/

关于泰坦如何工作的旧但非常有用的文档:https://github.com/elffersj/delftswa-aurelius-titan/tree/tree/master/master/sa-doc

最新更新