Architecture 复制Lucene索引中的所有数据

Architecture 复制Lucene索引中的所有数据,architecture,lucene,distributed,cqrs,event-sourcing,Architecture,Lucene,Distributed,Cqrs,Event Sourcing,我们正在从作为事件流存储在事件存储中的数据创建lucene索引。这些索引用于为我们的数据提供高效的分页/排序/搜索功能 为了满足我们的需求,我们不得不复制索引中的所有数据。 在这种情况下,从概念上讲,查询数据的最佳方式是什么 我看到两种选择: 直接从索引查询建筑视图模型的所有数据 仅从索引中查询ID列表,并使用这些ID从事件存储中查询数据 我们也关心可伸缩性和容错性,所以我也必须考虑这些。有什么建议吗?我想选项1更好。 将数据存储在索引中,只存储在分页/筛选表中需要从中构建模型的部分。然后把

我们正在从作为事件流存储在事件存储中的数据创建lucene索引。这些索引用于为我们的数据提供高效的分页/排序/搜索功能

为了满足我们的需求,我们不得不复制索引中的所有数据。 在这种情况下,从概念上讲,查询数据的最佳方式是什么

我看到两种选择:

  • 直接从索引查询建筑视图模型的所有数据
  • 仅从索引中查询ID列表,并使用这些ID从事件存储中查询数据
我们也关心可伸缩性和容错性,所以我也必须考虑这些。有什么建议吗?

我想选项1更好。 将数据存储在索引中,只存储在分页/筛选表中需要从中构建模型的部分。然后把他们从那里接过来。它闪电般地快

Hibernate搜索使用类似于选项2的方法。 它存储id和Java类,在索引中查找,然后从数据库中获取。虽然在成本过高时可以规避。我最近有一个案例,我使用它是因为默认行为杀死了我的DB。工作起来很有魅力

我从未(在4个项目中)经历过索引损坏,但肯定可以在应用程序中重新编制索引


您使用事件快照吗?它们也可以被索引。

还有第三种方法:您可以在索引中存储两种数据:要搜索的字段和+1 field=“complete serialized object”。然后从索引中获取数据所需的时间要少得多(如果是json,则可以直接在客户端使用)。缺点:索引需要花费更多的时间,索引大小要高出2倍(有可能在存储到索引之前“压缩”数据)。出于安全原因,某些数据不应直接发送回客户端等