Глядя на потоки Redis и создавая индексы в потоке (как это делает EventStore), это работает довольно хорошо, и я могу получить кучу записей в потоке, кроме того, что я не могу найти хороший способ вернуть все записи по id, например, как МГЕТ. Это упрощенная версия того, на что я смотрю.
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 запросе.
Я также рассматривал потоки, создающие другие потоки, однако это приведет к дублирование сообщений и наши сообщения могут стать большими. Да, я мог бы поместить все сообщения в набор, но 2 уровня косвенности - это слишком далеко.