单向批量事务同步到Tinkerpop图中



我有一个系统(Cassandra(,它包含我想单向"sync";使用我的Tinkerpop商店(我使用AWS Neptune(。所谓单向同步,我的意思是数据只会由同步过程从真相源更新到图形存储,并且对于图形存储的用户来说是只读的。

真理的来源持有相对较小的数据集,当构建为图时,它包括<1MM顶点和边。

我正在研究以下两种方法:

A( 使用Neptune散装装载机:

  1. 每当真相的来源发生变化时,将所有数据作为快照转储到文件中(将来可能会对delta使用更改事件(
  2. 从图形存储中读取所有感兴趣的数据,并计算要追加启动的节点和顶点
  3. 将所有节点和顶点写入csv文件并加载到Neptune中

优点

  • 将数据加载到Neptune的最快方法

缺点

  • 不安全:如果大容量加载中途失败,则图存储处于不一致状态

B(使用带有Tinkerpop会话客户端的会话

  1. 每当真相的来源发生变化时,将所有数据作为快照转储到文件中(将来可能会对delta使用更改事件(
  2. 从图形存储中读取所有感兴趣的数据,并计算要追加的节点和顶点
  3. 使用单个会话发送一批Gremlin查询以追加和删除节点和顶点

优点

  • safe:由于在整个同步过程中使用相同的会话,如果一个Gremlin查询失败,所有内容都会回滚

缺点

  • 仅限脚本:SessiondClient只允许Gremlin脚本,因此我不能使用字节码,而是必须连接字符串来制作Gremlin剧本。虽然不理想,但似乎有效
  • 比散装装载机慢
  • 10分钟限制:海王星将同步时间限制为10分钟,会话最多只能打开10分钟。由于数据的大小,我认为加载不会超过10分钟

我用小数据集尝试了这两个选项。我还尝试过使用常规的每个请求一个事务的java客户端,但在一个请求中发送所有更改并不能经得起未来的考验。我说得对吗?

我即将开始生产方法B,我想知道是否有我应该注意的陷阱或其他我没有考虑过的选择?

一些想法-您已经很好地思考了一些利弊。

  1. 对于Neptune,如果您经常以非追加启动的方式进行大量写入以添加数据,那么批量加载程序是一个不错的选择。然而,正如您所注意到的,批量加载程序的语义是";尽你所能"并且加载每个有效的CSV行,或者一旦发现一行无效就失败。如果您可以通过提前筛选来保证数据是干净的,那么批量加载程序可能仍然是一个不错的选择。

  2. Gremlin会话为您提供了对交易的更多控制,但正如您所指出的,目前查询必须以文本形式发送。然而,在TinkerPop 3.5.0版本中,添加了对ByteCode交易的支持。最初,Java客户端和其他客户端将很快跟进。Node已经在工作中了,希望Python很快就会出现。一旦AmazonNeptune升级到TinkerPop 3.5.x级别,您将能够利用新的ByteCode交易语法/语义。请注意,会话的10分钟限制适用于会话空闲时。任何活动都会将计时器重新设置回10分钟。

最新更新