2011-03-17 50 views
0

我编写了一个具有多用户的Web应用程序。他们是选择数据或插入数据的每一件事。但选择一些数据需要太多时间,例如使用LINQ或数学计算。我一件事情: 我USER1:如何用C#编写代理?

select * from MyTable -----> save as caching via proxy server in machine 

我的用户2:

select * from MyTable2 -----> save as caching via proxy server in machine 

我的用户3:

insert into MyTable2 -----> Update caching(select * from MyTable2) via proxy server in machine 

如何写一个代理服务器,选择更快,更新选择的结果,如果其他用户更新表?

enter image description here

+1

我会建议使用预先存在的缓存解决方案,而不是从头开始编写新的解决方案 – Eric 2011-03-17 09:59:54

+0

我不知道这是否适用于您的情况,或者您是否仅使用了简化示例,但在您的“WHERE” SELECT(并且只选择所需的字段而不是'*')可能比手动缓存数据提高性能。请记住,数据库访问通常非常快*(当索引位置正确并且只请求真正需要的数据时),并且同一子网上的计算机之间的网络连接通常也很快。你有没有做基准测试来找出你的性能瓶颈在哪里? – Heinzi 2011-03-17 10:04:43

+0

所以你想要一些可以在内存中保留最近/频繁选择的行,并确保对表进行的任何更新都反映在内存行中的更新中,同时处理内存压力等问题?这听起来像SQL Server已经在内部做了什么(并且在大多数时间做了很好的工作)。 – 2011-03-17 10:29:15

回答

1

我想我明白你的意思。如果你想实现图形上显示的结果,那么一种方法是让服务器缓存任何机器请求的所有数据。我认为这在内存方面的开销太大了,但是你可以用很多方式来完成这个任务。例如,创建一个处理所有数据库调用并随后缓存结果的代理类。每当下一次调用完成时,处理程序类检查代理并返回,如果存在的话;如果没有,那么它会打电话并将结果添加到缓存中。

顺便说一句,我认为这部分已被现有的ORM考虑在内,不是吗?

+0

我不明白最后一句话:“顺便说一句,我认为这部分已经被现有的ORM考虑在内了,不是吗?“ – programmerist 2011-03-17 11:17:48

+0

ORM =对象关系映射(Object Relational Mapping)简而言之,这是Entity Framework,Linq To Sql,NHibernate的通用名称,我想他们都已经有了这个内置的开箱即用的功能哦。办法 :-) – Tengiz 2011-03-17 11:19:48

0

你为什么要为代理?

你要完成什么是使用的好处之一ADO实体框架

你有教程无处不在的网络,但你可以开始with this one

ADO实体框架是足够聪明要缓存多次使用的对象,并在不同步时刷新它们,它们还具有一系列奇妙的属性,如迟绑定和并发处理。

+0

balexandre;我认为你不了解我。我也是一个专业的实体framework.Thanks提醒。但我不想重新生成数据,我将选择结果保存在另一台机器上 – programmerist 2011-03-17 10:05:13

+0

为什么你需要再处理一台机器(多一个连接,多一个许可,多一件事),而不是正确地做事? ORM +缓存将为您提供开箱即用的功能,无需重新发明轮子! – balexandre 2011-03-17 10:09:26

+0

好的;)但我必须使用linq来sql缓存在linqtosql中是否可以? – programmerist 2011-03-17 10:19:51