我们正在从事件存储中存储的数据创建lucene索引作为事件流。这些索引用于为我们的数据提供有效的分页/排序/搜索功能。
碰巧我们必须复制索引中的所有数据才能满足我们的要求。概念上,在这种情况下查询数据的最佳方法是什么?
我看到两个选项:
我们也关注可扩展性和容错性,所以我也要考虑这些。有什么建议?
我猜选项#1更好。将数据存储在索引中,只存储您需要在分页/过滤表中构建模型的那些部分。并从那里取出它们。它闪电般快速。
Hibernate Search使用类似于选项#2的方法。它存储id和Java类,在索引中查找然后从DB中获取。虽然太昂贵但可以规避它。我最近有一个案例,我使用它,因为默认行为杀死了我的数据库。奇迹般有效。
我从未(跨越4个项目)经历过索引损坏,但应该可以在应用程序中进行明确的重建索引。
您是否使用事件快照?它们也可以编入索引。
还有第三种方法:你可以在索引中存储两种数据:字段搜索&+ 1字段=“完整的序列化对象”。然后从索引获取数据所需的时间少得多(当它是json时 - 它可以直接在客户端使用)。缺点:索引占用更多时间,索引大小 - 高2倍(在索引存储之前有可能'压缩'数据)。出于安全原因,某些数据不能直接发送回客户端等。