复制Lucene索引中的所有数据

时间:2014-10-07 16:57:22

标签: architecture lucene distributed cqrs event-sourcing

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

碰巧我们必须复制索引中的所有数据才能满足我们的要求。 概念上,在这种情况下查询数据的最佳方法是什么?

我看到两个选项:

  • 直接从索引
  • 查询构建视图模型的所有数据
  • 仅查询来自索引的ID列表,并使用这些ID来查询事件存储中的数据

我们也关注可扩展性和容错性,所以我也要考虑这些。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为选项#1更好。 将数据存储在索引中,只存储您需要在分页/过滤表中构建模型的那些部分。并从那里取出它们。这很快。

Hibernate Search使用类似于选项#2的方法。 它存储id和Java类,在索引中查找然后从DB中获取。虽然太昂贵但可以规避它。我最近有一个案例,我使用它,因为默认行为杀死了我的数据库。像魅力一样。

我从未(跨越4个项目)经历过索引损坏,但应该可以在应用程序中进行明确的重建索引。

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

答案 1 :(得分:0)

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