持久化数据流将数据写到磁盘上。
持久消息存储在预定义大小的时间分片文件(TSF)中。这种数据存储模型的特点之一是最新的TSF文件中的数据都缓存在内存中。然后,最新的TSF文件定期将数据刷新到磁盘上。
这对于非频繁更新的数据流非常重要,其中最新的TSF文件中数据可能不会保留很长时间,因为文件容量尚未达到。为了降低丢失数据的风险,可以将持久数据流配置为在预定义的时间刷新磁盘上的数据,并且也可以调整实际TSF文件的大小。数据可以由Alfred自动刷新,也可以通过 Loader 的 API 刷新。
Alfred 数据流的瞬态类型用于消息中继。瞬态消息存储在服务器的循环内存缓冲区中。当所有Reader(Cursor)读取瞬态流中的数据时,它会被丢弃。
如前所述,瞬态消息存储在循环内存缓冲区中。 如果任何Cursor(Reader)消耗数据流的速度较慢,内存压力可能会开始增加。在这种情况下,内存缓冲区将在预定义的设置内开始扩展:
内存缓冲区要使用的最大内存量,以字节为单位。将此设置为合理的内存大小,具体取决于可用内存使用量。
内存缓冲区头部和尾部之间的最大时间差。这在缓冲实时数据时很重要,并且您不需要早于指定时间范围(例如 30 秒)的数据。
有两种方式都可以独立使用。 当超出限制并且缓冲区填满时会发生什么,取决于瞬态流的类型。
有损类型:最常见的瞬态数据流类型。 如果缓冲区已满,Writer(Loader)会继续写入消息(在图的右侧)。这会导致图表左侧的消息脱落并被丢弃,即使它们尚未被读取。 在这种情况下,一个或多个速度较慢的Reader可能会错过阅读某些消息的机会,并会跳转到下一条可用消息。 Alfred 将努力通知速度较慢的 Reader 他们正在跳过一个空白。
无损类型:不常见的瞬态数据流类型。 如果缓冲区已满,Writer(Loader)将被停止(阻塞),直到最慢的 Reader 通过读取更多消息来释放一些空间。 当数据丢失不可容忍时,无损数据流可能是正确的选择。 然而,在无损数据流中,即使是单个缓慢的Reader也可能减慢甚至完全停止调度消息的整个过程,即使所有其他阅读器都能够处理该数据流。无损配置在实践中很少使用,其为可选项。