【发布时间】:2012-07-10 03:03:24
【问题描述】:
(以下问题有点长,如果您对持续兑现和通知不感兴趣,请随时按浏览器中的 x 按钮!)
我们的任务是实现一个可保存大量数字信息的持久数据存储。
基本上用例是:
-
您将获得包含需要在数据存储中传播的数据更新和插入的提要。
1.1。 更新频率目前在 1 到 10 秒之间为 1 个提要。但稍后我们可能会得到更多这样的可扩展性。
1.2。 音量。每个提要大约有 100K 行(即使值没有改变,它仍然会在提要中)
- 需要保留这些值。一旦发生这种情况,则需要将事件通知 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 如:
- 更新后触发器(我不是触发器的忠实粉丝)上的操作是使用 SQL Server 服务代理向需要通知的更新发送消息。
- 实现存储和通知的自定义中间件。
(谢谢大家耐心等待!)
所以重点是,我真的觉得除了自定义中间件之外,这些想法都不好。
问题
-
有没有人亲身体验过
SqlDependency和Service Broker?你认为我应该开始对 mgmt 进行讨伐,以防止在第一时间发生技术错误吗? - 我觉得也许我应该使用
redis/memcached/mongo之类的东西作为数据缓存。它们提供持久性。我确信我可以找到一种方法将它们与关系数据库连接起来,并将更改的/新的数字提供给服务器进行处理。这不是更有意义吗? - 也许我只是过度设计了这个东西。我是否应该尝试其他建议(建议类似的 stackoverflow 问题``)?
为冗长的帖子道歉!如果您到目前为止还费心阅读,请提前感谢您!
【问题讨论】:
标签: sql-server caching mongodb memcached redis