通过弹性搜索在Hyperledger Fabric CouchDB数据上进行免费文本搜索

时间:2018-10-20 13:19:55

标签: elasticsearch apache-kafka couchdb hyperledger-fabric hyperledger

我们使用CouchDB支持的Hyperledger架构来存储包含大量文本的记录。我们想要构建一个允许使用Elastic Search在这些记录上进行自由文本搜索的解决方案。然后的问题是使Fabric / CouchDB数据实时进入弹性搜索。最好的方法是什么。我可以想到三种方法:-

1)创建一个服务,以连续模式监听CouchDB更改提要(Couch为此提供了大力支持)并将更改推送到消息队列(Kafka) )。然后可以从Kafka读取另一个服务,然后推送到Elastic Search。我喜欢这个想法(“更改数据捕获”),因为我们可以从Kafka日志中构建其他读取视图。 这种方法的缺点

  • 尽管我们正在使用超级账本结构,但我们正在对基础数据存储区(CouchDB)进行编程。 如果Hyperledger一年后迁移到MongoDB,会发生什么(或决定与CouchDB一起支持它,而我们想迁移到MongoDB)?我们将不得不重写/更改我们的Kafka连接器。
  • 保持两个状态:1)从CouchDB中读取的最后一个文档的偏移会更改feed,并且2)Kafka偏移。我们可以使用Zookeeper吗?

2)让我们的客户端应用程序(向Fabric写入的应用程序)在每次向Fabric写入/更新时将事件发布到Kafka。然后,另一个服务可以读取这些事件并写入Elastic。 此方法的最大缺点是:

  • 我们进入了双重写入的领域(1代表结构,1代表Kafka),没有很好的方法同时进行这两项工作。这使我们容易受到竞争状况和部分故障的影响(写入结构成功,但写入kafka失败等)。

3)我相信超级管理器结构同行提供了一种称为“事件服务”的功能,该功能在每次写入分类帐时都会发布事件。但是,该文档不是很好,我找不到任何示例。如果您有经验,可以详细说明一下吗? 这种方法的最大问题是尚未经过实战测试,由于缺少文档/博客/示例等,当开发人员出错时,很多开发人员将花费大量时间进行修复。< / p>

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

推荐的模式是#3-侦听块事件,并让侦听器将所需的任何数据插入可查询的数据存储中,例如Elasticsearch。使用基于通道的事件服务,侦听器客户端从某个起始块开始注册事件。如果服务有任何中断,则侦听器客户端始终可以从中断的位置恢复。

Node.js SDK event tutorial中详细描述了这种模式以及事件服务的一般用法。