查看redis流并在流上构建索引(像eventstore那样),这非常有效,我可以在流中获得一堆条目,除非我找不到一个很好的方法按id返回所有记录,例如像mget。这是我所看到的一个简化版本。
var records = await conn.StreamRangeAsync(indexStreamName, nextPosition, null, BatchSize);
if (records.Any())
{
var results = new List<Event>();
foreach (var record in records)
{
var msgs = await conn.StreamRangeAsync(record.Values.FirstOrDefault(x => x.Name == "stream").Value.ToString(), record.Values.FirstOrDefault(x => x.Name == "key").Value, null, 1);
results.Add(ToEvent(msgs.First()));
}
await playEvents(results.ToArray());
}
显然这是非常低效的,我想知道是否有某种方法可以在一个请求中从服务器获得这个。
我还考虑过流构建其他流,但是它会导致消息重复,并且我们的消息可能会变大。是的,我可以把所有的信息放在一个集合中,但是两个级别的间接寻址太远了。
1条答案
按热度按时间piah890a1#
仍然希望有一个更好的答案,但有一种方法可以做到这一点
在父流中的消息和所有较小流的索引都不理想,因为较大流在逻辑上是聚合,而不是实际数据,但可以正常工作。