复制Lucene索引中的所有数据

问题描述 投票:0回答:2

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

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

我看到两个选项:

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

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

architecture lucene distributed cqrs event-sourcing
2个回答
0
投票

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

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.