高流量 Web 服务的提示,c# asp.net sql2000
我正在开发一个 Web 服务,其方法将从“动态横幅”中调用,该横幅将显示从 SQL Server 表读取的某种消息队列。
横幅在高流量网站的主页上会产生很大的压力; 每次加载横幅时,它都会调用我的 Web 服务,以便获取新的消息队列。
现在:我不希望每次加载横幅时所有这些流量都会驱动对数据库的查询,因此我正在考虑使用 asp.net 缓存(即 HttpRuntime.Cache[cacheKey])来限制数据库访问; 我会尝试每分钟左右刷新一次缓存。
显然,我会尝试尽可能少地发送消息,以限制流量。
但也许还有其他方法来处理这种情况; 例如,我可以在文件系统上写入队列的最新版本,并让 Web 服务访问该文件; 或者混合这两种方法...
解决方案是 c# web 服务、asp.net 3.5、sql server 2000。
有什么提示吗? 其他方法?
谢谢安德里亚
I'm developing a web service whose methods will be called from a "dynamic banner" that will show a sort of queue of messages read from a sql server table.
The banner will have a heavy pressure in the home pages of high traffic sites; every time the banner will be loaded, it will call my web service, in order to obtain the new queue of messages.
Now: I don't want that all this traffic drives queries to the database every time the banner is loaded, so I'm thinking to use the asp.net cache (i.e. HttpRuntime.Cache[cacheKey]) to limit database accesses; I will try to have a cache refresh every minute or so.
Obviously I'll try have the messages as little as possible, to limit traffic.
But maybe there are other ways to deal with such a scenario; for example I could write the last version of the queue on the file system, and have the web service access that file; or something mixing the two approaches...
The solution is c# web service, asp.net 3.5, sql server 2000.
Any hint? Other approaches?
Thanks
Andrea
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
当然,您也可以(应该)使用 SixPack 库 中的缓存功能。
有关详细信息,请访问 SixPack 库主页。 请注意,代码(尤其是前向缓存)经过了负载测试。
这是一个简单缓存的示例:
Of course you could (should) also use the caching features in the SixPack library .
More info on the SixPack library homepage. Note that the code (especially the forward cache) is load tested.
Here's an example of simple caching:
谢谢大家,由于数据大小很小,但基础表会发生变化,我想我会采用 HttpCache 方式:我实际上需要一种减少数据库访问的方法,即使数据正在变化(所以这就是原因按照@Bloodhound的建议不使用直接的Sql依赖项)。
我想在上市之前我会做一些压力测试。
再次感谢大家。
Thanks all, as the data are little in size, but the underlying tables will change, I think that I'll go the HttpCache way: I need actually a way to reduce db access, even if the data are changing (so that's the reason to not using a direct Sql dependency as suggested by @Bloodhound).
I'll make some stress test before going public, I think.
Thanks again all.
此外,解决 Skliwz 提到的内存限制的一种方法是,如果您在正常应用程序之外使用此服务,您可以将其隔离在它自己的应用程序池中。 我以前见过这样做,这也有帮助。
Also, one way to get around the memory limitation mentioned by Skliwz is that if you are using this service outside of the normal application you can isolate it in it's own app pool. I have seen this done before which helps as well.
恕我直言,编写文件是一个更好的解决方案 - 它由 IIS 内核代码提供服务,没有巨大的 asp.net 开销,您可以稍后将文件复制到 CDN。
据我所知,SQL Server 2000 的依赖关系兑现效率不是很高。
Writing a file is a better solution IMHO - its served by IIS kernel code, w/o the huge asp.net overhead and you can copy the file to CDNs later.
AFAIK dependency cashing is not very efficient with SQL Server 2000.
我认为缓存是一种合理的方法,您可以更进一步并向其添加 SQL 依赖项。
ASP.NET 缓存:SQL 缓存与 SQL Server 2000 的依赖关系
I think caching is a reasonable approach and you can take it a step further and add a SQL Dependency to it.
ASP.NET Caching: SQL Cache Dependency With SQL Server 2000
如果您选择文件路线,请记住这一点。
http://petesbloggerama.blogspot.com/2008/ 02/aspnet-writing-files-vs-application.html
If you go the file route, keep this in mind.
http://petesbloggerama.blogspot.com/2008/02/aspnet-writing-files-vs-application.html
这取决于很多事情:
It depends on a lot of things: