2012-07-10 101 views
4

(以下问题是有点长,所以如果你在持续兑现不感兴趣,并通知随意按下浏览器的X按钮!)与发布/订阅持久数据高速缓存的OnChange

我们我们的任务是实现一个持久的数据存储,它将保存大量的数字信息。

基本上使用情况是:

  1. 你会得到与数据更新等需要在数据存储进行传播插入饲料。

    1.1。 更新频率当前范围从1饲料1到10秒。但是稍后我们可能会获得更多的可扩展性功能。

    1.2。 。每个Feed将大致为100K行(即使值没有变化,它仍然会在Feed中)

  2. 需要坚持这些值。一旦发生这种情况,那么C#服务器需要通知偶数。理想的事件。由于供稿将包含理想情况下未发生变化的数据,因此服务器事件应该与增量一起出现,而不仅仅是OnStuffChanged

实施

由于系统使用SQL Server的一些非技术人员已为执行签字的SQL Server的使用。这种味道对我来说不好!但在任何情况下都做了一些研究,并发现关于SqlDependency API上的Wrapper。

但是我看到appi带有一个行李箱,形式为长列表http://msdn.microsoft.com/en-us/library/ms181122%28v=sql.105%29.aspx)。我还看到,MS表示,对于次级表现来说效率不高(目前情况并非如此,但可能在未来)。

具体性能&可靠性MS说

“查询通知可能不适合应用的最佳选择时,通知必须以亚秒级的响应时间接收,当网络基础设施不既快又可靠的,或者通知量非常高的时候。“

和建议alternatives to query notification如:

  1. 更新触发(我不触发寿的大风扇)被监测表,其作用是使用SQL Server服务的经纪人后,发送消息给需要通知的更新。
  2. 执行定制中间件存储和通知。

(伙计们,我很开始要感谢您的耐心!)

所以问题是,我真的觉得除了定制中间件之外,其他的想法都不错。

问题

  • 有没有人有与SqlDependencyService Broker体验动手?你认为我应该开始一场反对管理的运动,以防止第一个地方出现技术错误?
  • 我觉得也许我应该使用类似redis/memcached/mongo这样的数据缓存。他们提供持久性。我确信我可以找出一种方法将它们与关系型数据库联系起来,并将更改的/新的号码提供给服务器进行处理。这不是更有意义吗?
  • 也许我只是过度设计的事情。我应该改为其他建议(建议``)类似的stackoverflow问题?

道歉为冗长的职位!如果您已经阅读过此文,请提前感谢您!

回答

4

不要使用SqlDependency,不适合它。 SqlDependency用于监视很少更改的数据(例如参考数据)。使用SqlDependency,您只会收到有关数据已更改的通知,而不知道更改包含哪些内容,您将不得不自行查询。

服务经纪人自己会更好地适应账单,作为将通知与消费分离的手段。已经有large scale deployments这样做了。使用SQL Server 2012,您可以执行multicast

但绝对不是通过触发器。通知应该是您的应用程序中的头等公民,而不是对应数据模型的反击(ughhh)。有明确程序通知订户,并让你的应用程序显式调用它们。不要混用你的数据模型和yoru消息模式,你只需要引入不必要的耦合。

如果你想去NoSQL的方式,那是一个完全不同的讨论。 Redis is the usual choice。但是请勿忽视真正的酒吧/消息传递产品,如ZeroMQ

顺便说一下,这些类型的十字军东征(亲或反对,我不在乎......)最好与原型战斗

+0

SqlDependency有这种难闻的气味。感谢您确认Remus。 – George 2012-07-11 10:19:27

+0

请记住,[“计算机科学中只有两件难事:缓存失效和命名事情。”](http://martinfowler.com/bliki/TwoHardThings.html) – 2012-07-11 10:24:14

+0

哈哈哈也许我应该在我的办公桌:-D – George 2012-07-11 15:27:07