求助:一个性能改善的问题

caobob 2009-11-05 03:19:07
项目下同时连接的客户端可能有1000台左右,WEB服务器的平衡负载没有问题。现在需要做到每个页面每隔一段时间,比如10秒,Ajax方法查询一下单据的状态,然后实时提醒。

由于这样等于在1秒内IIS服务器要处理100条类似的SQL查询导致DB服务器变得性能低下。所以要想办法改善一下。

我想写一个静态类,把需要查询的数据放入hashtable作为一个属性,再有一个timer定时取数据库中的数据来更新这个hashtable。而Ajax调用的响应页面不再直接访问数据库,而是来访问这个类的属性。

有没有做过类似项目的朋友,给我点意见。谢谢!
...全文
204 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy664618843 2009-11-06
  • 打赏
  • 举报
回复
缓存 或者范型 hashtable
caobob 2009-11-06
  • 打赏
  • 举报
回复
还是把hashtable放进了cache,然后做了个页面按照设定自动更新cache。效果还是可以的。谢谢大家,结贴。
atls 2009-11-05
  • 打赏
  • 举报
回复
如果你自认是高手,尽管可以用static
菜鸟还是乖乖用微软给你的缓存,不要到时出问题还不知道什么原因。
xuan.ye 2009-11-05
  • 打赏
  • 举报
回复
我觉得你的方案已经很好了
剩下的就是hashtable是 static的?还是存在session?

我的意思就是 static hashtable 然后过滤条件再返回到页面?还是hashtable存在session里面?
ajaxtop 2009-11-05
  • 打赏
  • 举报
回复
访问分区

查询数据分页+索引+存储过程+视图+缓存

尽量不影响用户情况下,稍长时间访问数据库(100秒,或更长)


数据量大,只能分页处理,只有适中取舍,有得有失
wuyq11 2009-11-05
  • 打赏
  • 举报
回复
数据库缓存依赖,数据库更新更新缓存。
数据库量很大,就要使用分页或索引,分区查询数据
snowflying928 2009-11-05
  • 打赏
  • 举报
回复
up mark 学习
asdfa23rdadsdfa 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]
缓存~
[/Quote]

up
yyz985 2009-11-05
  • 打赏
  • 举报
回复
漏了 updates设为static
yyz985 2009-11-05
  • 打赏
  • 举报
回复

namespace A
{
using System;
using System.Collections.Generic;

public enum OrderUpdateStatus { Added, Removed, Modified }
public class OrderEntity { }
public class OrderUpdateItem
{
OrderUpdateStatus Status;
DateTime UpdateTime = DateTime.Now;
OrderEntity Order;
}
public class OrderBusiness
{
Queue<OrderUpdateItem> updates;
void AddOrder(OrderEntity entity)
{
//...insert into
OrderUpdateItem item = new OrderUpdateItem();
item.Status = OrderUpdateStatus.Added;
item.Order = entity;
updates.Enqueue(item);
}
void Updateorder(OrderEntity entity)
{
//....
}
void DeleteOrder(OrderEntity entity)
{
//....
}
Queue<OrderUpdateItem> GetUpdates(DateTime time)
{
Queue<OrderUpdateItem> result = new Queue<OrderUpdateItem>();
foreach (OrderUpdateItem item in updates)
{
if (item.UpdateTime > time) result.Add(item);
}
SessionManager.clientsUpdateTime = time;
CleanUpdates();
return result;
}
private void CleanUpdates()
{
DateTime t = SessionManager.GetFirstUpdateTime();
while (updates.Count > 0)
{
OrderUpdateItem item = updates.Peek();
if (item.UpdateTime < t) updates.Dequeue();
}
}
}
public class SessionManager
{
static Dictionary<Session, DateTime> clientsUpdateTime;
static void On_Session_Leave()
{
clientsUpdateTime.Remove(session);
}
static DateTime GetFirstUpdateTime()
{
DateTime result = DateTime.MaxValue;
foreach (KeyValuePair<Session, DateTime> kv in clientsUpdateTime)
{
if (kv.Value < result) result = kv.Value;
}
return result;
}
}
}
zhujiechang 2009-11-05
  • 打赏
  • 举报
回复
缓存、然后定时过期
igelf 2009-11-05
  • 打赏
  • 举报
回复
数据不存数据库..直接存缓存..
mbh0210 2009-11-05
  • 打赏
  • 举报
回复
看你查询语句的复杂程度,时间间隔的长短(也就是事实性的要求)

事实性要求不高,你隔断时间更新缓存就行

实时性高的话,在其他操作的时候更新掉缓存。
hy_lihuan 2009-11-05
  • 打赏
  • 举报
回复
1、用户对数据的实时性要求很高吗?10秒的延时可以吗?20秒呢?
2、用户访问很频繁的数据是那些?最新变更过的?有一些特性吗?

尽量保持80/20原则,达到最优化;
SuperTyro 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 caobob 的回复:]
引用 17 楼 webdiyer 的回复:
把你Ajax查询调用的页面用outputcache缓存一下不就得了吗?


有个问题是虽然这些客户端查询的内容不都一样。缓存起不了作用。客户端的SQL类似select [status] from a where id=XXX。每个客户端可能每次对id的查询不同。而status会因为业务被经常更新。
[/Quote]

既然是根据某个用户都不一样,而且会经常刷新,LZ可以看看告诉缓存,我记得spring有这个实现,很方便很强大。
SuperTyro 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]
缓存~
[/Quote]

经常会被查看,但不经常刷新的页面可以缓存处理。
mohugomohu 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 caobob 的回复:]
做了个测试项目,Temer类不能用。这是我一直担心的问题。C/S我可以写win Service程序。B/S我怎么写。
[/Quote]

只有js这条路
hecong875 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]
缓存~
[/Quote]

Cache
caobob 2009-11-05
  • 打赏
  • 举报
回复
做了个测试项目,Temer类不能用。这是我一直担心的问题。C/S我可以写win Service程序。B/S我怎么写。
caobob 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 webdiyer 的回复:]
把你Ajax查询调用的页面用outputcache缓存一下不就得了吗?
[/Quote]

有个问题是虽然这些客户端查询的内容不都一样。缓存起不了作用。客户端的SQL类似select [status] from a where id=XXX。每个客户端可能每次对id的查询不同。而status会因为业务被经常更新。
加载更多回复(17)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧