0

我在我的 ASP.NET 应用程序中使用SignalR。我的应用程序需要的是压缩从各种服务器更新的组数据。根据 SignalR 文档,我有责任这样做。这意味着我需要使用一个外部服务器/服务来从一个或多个服务器收集数据,并且我可以从一个地方查询这些数据。

我首先认为MemCached是最好的选择,因为它速度很快,而且我需要放在那里的数据是不稳定的。问题是我需要存储集合,例如:具有用户 ID 的集合 A,因此我可以拥有具有 2000 个用户 ID 的集合 A 和具有 40,000 个 ID 的集合 B。问题是我需要更新这个集合并非常快速地删除和插入 id。我担心因为命令将从多个服务器启动,而且我可能需要读取整个集合并在任一 Web 服务器上更新它,因此数据将不一致。Web 服务器 A 可能会更新数据,但服务器 B 会在服务器 A 完成更新之前读取数据。存在并发冲突。

我正在寻找在我的 ASP.NET 4.5 应用程序中实现这种策略的最佳方法。我认为这可能是使用内存数据库或确保没有数据完整性的一种选择。

我想问你什么是我的问题的最佳解决方案。

这是我的问题的一个例子:

  • MemCached Server - 存储集合(例如集合 A、B、C、D),每个集合存储用户 ID,可能是数千个 ID,甚至更多。

  • Web 服务器 - 我安装了 SignalR 的 Amazon EC2 Web 服务器。可以在负载均衡器后面。这些服务器需要访问 memcached 服务器并通过 Collection 名称(例如“Collection_23”)获取完整的集合项。他们需要能够删除项目(用户 ID)并添加项目。这一切都应该尽可能快。

我希望我对自己的解释是正确的。谢谢。

4

2 回答 2

3

或者,您可以使用Redis,就像 Memcached 一样,所有内容都从内存中提供。除了简单的键值数据存储之外,Redis 还有许多其他功能;对于您的特定情况,您可能会使用Redis transactions,这可以确保数据的一致性。

于 2012-10-02T19:17:44.393 回答
0

在另一篇文章的评论中,它显示了指向 redis 提供程序的链接。链接坏了,现在好像集成到了SignalR主项目中:https ://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Redis

你在这里有redis nuget: http ://www.nuget.org/packages/Microsoft.AspNet.SignalR.Redis

和这里的文档: http ://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis

于 2013-11-18T17:42:15.107 回答