【问题标题】:.NET cache providers that support streaming?支持流式传输的 .NET 缓存提供程序?
【发布时间】:2010-07-12 12:22:08
【问题描述】:

有谁知道 .NET 的任何缓存提供程序支持直接按键输入/输出流数据,而不是序列化/反序列化对象?

我更希望 AppFabric (Velocity) 可以,但它似乎只处理像内置 ASP.NET 缓存这样的对象。

【问题讨论】:

  • 您想在流式传输和序列化之间做出什么区分?要流式传输对象,您无论如何都需要将其转换为字节。
  • 您能澄清一下您希望在这里看到的使用类型吗?
  • 对不起 - 我的用例是原始二进制数据 - 财务数据的字节数组 - 从一个非常慢的后端系统流式传输,通过 WCF 服务传输到数百个用户。每个缓冲区可以达到 100MB 以上(尽管通常小于 10MB),所以我们希望将它们流式传输到客户端,而不是一次在内存中缓冲整个内容。一个快速的分布式文件系统也可以在这里工作——我们研究了 Hadoop HDFS,但它在 Windows 下似乎没有得到很好的支持。

标签: c# caching memcached appfabric


【解决方案1】:

NCache Enterprise 是我能找到的唯一支持流式传输的 .NET 缓存提供程序:

// Insert
using (var cacheStream = cache.GetCacheStream("mykey", StreamMode.Write))
    cacheStream.Write(...);

// Retrieve
using (var cacheStream = cache.GetCacheStream("mykey", StreamMode.Read))
    cacheStream.Read(...);

【讨论】:

    【解决方案2】:

    您可以自己在 WCF 服务中轻松实现这一点(我认为这就是您想要做的。)

    要么让客户端定期轮询新数据,要么实现 callback pattern 以在新数据到达时将新数据发送给订阅的客户端,这取决于它们也订阅了哪些密钥。

    否则,您可以让每个客户端通过套接字连接到您的服务,并将您从源接收到的数据重复到这些套接字,并自己保留数据,以便在新客户端连接时,您可以发送全部数据对他们来说,在他们易于消化的块中。

    另外,您可以将应用程序设计为不关心它正在流式传输什么数据,只关心它正在流式传输 blob,并将其用于将来的其他应用程序。

    编辑:您始终可以使用 WCF 中的 streaming transport 构建向您的用户流式传输,但仍然无法解决您从源检索数据的问题,除非他们也实施它。

    【讨论】:

    • 我们的服务已经使用 WCF 流式传输 blob 到客户端。我们只需要在它后面放一些缓存提供程序,它也支持流。
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多