Как эффективно получить несколько записей с XRange в потоке Redis

Глядя на потоки Redis и создавая индексы в потоке (например, в EventStore), это работает очень хорошо, и я могу получить кучу записей в потоке, за исключением того, что я не могу найти хороший способ вернуть все записи по идентификатору, например, как 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 запрос.

Я также рассматривал потоки, создающие другие потоки, однако это приведет к дублированию сообщений, и наши сообщения могут стать большими. Да, я мог бы поместить все сообщения в набор, но 2 уровня косвенного обращения - это слишком далеко.

1 ответ

Все еще надеемся на лучший ответ, но один из способов сделать это -

Есть сообщения в родительском потоке, и все индексы, являющиеся меньшими потоками, не идеальны, поскольку более крупный поток логически является агрегацией, а не реальными данными, но будет работать нормально.

Другие вопросы по тегам