ASP.NET 2.0数据教程之六十:在程序启动阶段缓存数据

返回“ASP.NET 2.0数据教程目录”

导言:

前面2章考察了在表现层和缓存层缓存数据。在第58章,我们探 讨了在表现层设置ObjectDataSource的相关cache属性来缓存数据。在第59章,我 们探讨了创建一个单独的分开的缓存层。这2章都是采用“应激装载” (reactive loading)的模式来缓存数据。该模式下,每次请求数据时,系统先 检查其是否在内存,如果没有,则从数据源——比如数据库,来获取 数据,然后将其存储在内存里。该模式的优势在于执行起来很容易;而缺点之一 在于应“请求”(requests)而执行。试想一下,在前面章节,我们 通过缓存层来展示产品信息,当第一次登录该页面,或缓存数据因为缓存时间结 束等原因从内存清除以后,再次访问该页面时,因为数据没有储存在内存里,请 求只能从数据库获取数据。这样一来花的时间就比直接从内存获取数据要长一些 。

“预装载”(Proactive loading)可以使用2种模式来预装载 数据。第一种模式,Proactive loading使用一些方法( process)来判断源数据 (underlying data)是否发生改变,并及时对缓存数据进行更新——比 如,周期性的检查源数据;或者当源数据发生改变时,立即通知更新。不过该模 式的弊端在于执行起来比较困难,你必须创建、管理、执行一个具体的方法来检 查源数据的更改情况,以更新缓存数据。

另一个模式,同时也是本文要探 讨的内容,就是在程序启动时便装载数据入内存。该模式对缓存静态数据(static data)尤其有用,比如查找数据库表里的记录。

注意:关于“应激装 载”(reactive loading)和“预装载”(proactive loading)的 区别,请参考文章《 Caching Architecture Guide for .NET Framework Applications》的《Managing the Contents of a Cache》章节: (http://msdn2.microsoft.com/en-us/library/ms978503.aspx)

第一步: 在程序启动阶段决定缓存哪些数据

我们在前面2章探讨的reactive loading模式的示例适合处理这些数据:周期性地改变且生成(generate)数据不需 要太长的时间。但是,如果缓存的数据从未改变,那么reactive loading模式使 用的周期(expiry)就显的有点多余。另外,如果需要缓存的数据要花很长的时间 才能生产,当用户请求发现内存为空时,用户将等很长的时间来检索并返回数据 。对此,可以考虑将静态数据和需要很长时间才能生成的数据在程序启动阶段就 缓存。

虽然,数据库有很多动态的,经常改变的值;不过静态值也不少。 举例,数据库表Patients有一个PrimaryLanguage列,其值可以为English, Spanish, French, Russian, Japanese等。不过我们不会直接在表Patients里存 储“English”或 “French”等字符串,而是在供查找的 表Languages里存储。如图1:John Doe的primary language是English,而Ed Johnson的是Russian.

图1:表Languages为表Patients所使用的查找表

在编辑或创建 新patient的用户界面里,将包含一个下拉列表框,列出表Languages里的所有语 言项。不缓存的话,每次登录该界面,系统都会查询表Languages,这样显地和浪 费也没有必要。因为表Languages不会频繁的改变。

我们可以用前面探讨 的reactive loading模式来对数据Languages进行缓存。不过,reactive loading 模式会使用基于时间的缓存周期(time-based expiry),这对静态数据来说没有必 要。最好的办法是在程序启动阶段进行预装载。

在本文,我们将探讨如何 缓存“查找表”(lookup table,例如Languages表对Patients表来说就 是查找表)数据和其它的静态信息。

时间: 2024-08-04 12:31:13

ASP.NET 2.0数据教程之六十:在程序启动阶段缓存数据的相关文章

在ASP.NET 2.0中操作数据之五十八:在程序启动阶段缓存数据_自学过程

导言: 前面2章考察了在表现层和缓存层缓存数据.在第56章,我们探讨了在表现层设置ObjectDataSource的相关cache属性来缓存数据.在第57章,我们探讨了创建一个单独的分开的缓存层.这2章都是采用"应激装载"(reactive loading)的模式来缓存数据.该模式下,每次请求数据时,系统先检查其是否在内存,如果没有,则从数据源--比如数据库,来获取数据,然后将其存储在内存里.该模式的优势在于执行起来很容易:而缺点之一在于应"请求"(requests

ASP.NET 2.0数据教程之五十八:用ObjectDataSource缓存数据

返回"ASP.NET 2.0数据教程目录" 导言 就计算机科学而言,caching就是将所需要的数据或信息的备份放 在某个地方,便于快速访问的这样一个过程.以数据处理(data-driven)程序为 例,程序的大部分时间浪费在数据查询上.要提升这种程序的性能,通常的做法 是将查询结果存放在程序的存储器里. ASP.NET 2.0提供了各种各样的缓 存方式.对web页面和用户控件可以通过output caching进行缓存:同样我们可以 通过ObjectDataSource 和SqlDa

在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据_自学过程

导言: 在前面的教程,我们对数据访问层进行扩展以支持数据库事务.数据库事务确保一系列的操作要么都成功,要么都失败.本文我们将注意力转到创建一个批更新数据界面. 在本文,我们将创建一个GridView控件,里面的每一行记录都可以进行编辑(见图1),因此我们没有必要多添加一列来包含Edit, Update,和Cancel按钮,而是在页面包含2个"Update Products"按钮,被点击时,遍历所有的产品并对数据库进行更新.让我们开始吧. 图1:GridView控件里的每一行记录都可以编

在ASP.NET 2.0中操作数据之六十四:GridView批量添加数据_自学过程

导言: 在前面的第62章<GridView批量更新数据>里,我们用GridView控件里定制了一个批编辑界面,同样的我们也可以定制一个批添加界面.假设有这种情况,我们接受一批从Tokyo(东京)发过来的货物:6种不同的tea 和 coffee,如果用户在一个DetailsView控件里一次输入一个产品,他将会重复的输入很多相同的值,比如相同的种类(Beverages),相同的供应商(Tokyo Traders),相同的discontinued值(False),以及相同的order值(0).重复

ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map

返回"ASP.NET 2.0数据教程目录" ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map Provider 导言: ASP.NET 2.0的网站地图(site map)功能允许页面开发者在一些 持久介质(persistent medium),比如一个XML文件里,自己定义一个web程序的 site map.一旦定义了之后,我们可以通过System.Web命名空间的SiteMap class 类或某个Web导航控件,比如Si

ASP.NET 2.0数据教程之六十九:在TableAdapter里使用JOINs

返回"ASP.NET 2.0数据教程目录" 导言: 在关系数据库里,我们处理的数据通常跨越了几个数据表.举 例:当展示产品信息时我们很可能想列出每个产品相应的category以及供应商的 名称等.诚然,Products表里包含有CategoryID 和SupplierID值,但是事实上的 category以及supplier names分别定义在Categories表和Suppliers表里. 要从其 它的相关表里获取信息,我们可以使用correlated subqueries或JOI

ASP.NET 2.0数据教程之六十八:在TableAdapters里使用现有的存储过程

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的文章里我们考察了如何让TableAdapters向导自动的创 建存储过程.而在本文,我们将考察如何让TableAdapter使用现有的存储过程.由 于Northwind数据库现有的存储过程很少,我们也需要考察如何在Visual Studio 环境里手动向数据库添加新的存储过程. 注意: 在第63章 <Wrapping Database Modifications within a Transaction>里我们向

ASP.NET 2.0数据教程之六十六:批添加数据

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的第64章<Batch Updating>里,我们用GridView控件 里定制了一个批编辑界面,同样的我们也可以定制一个批添加界面.假设有这种情 况,我们接受一批从Tokyo(东京)发过来的货物:6种不同的tea 和 coffee,如果 用户在一个DetailsView控件里一次输入一个产品,他将会重复的输入很多相同的 值,比如相同的种类(Beverages),相同的供应商(Tokyo Traders),相同的 d

ASP.NET 2.0数据教程之六十五:批删除数据

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的教程,我们用GridView创建了一个批编辑界面.在用户需 要一次性编辑多条记录的情况下,批编辑界面很有用.同理,当用户需要同时删 除多条记录时,该技术也很有用. 如果你使用过邮件系统的话,你应该对 这种最常见的批删除界面很熟悉:界面里每一行都包含一个checkbox,此外,还 有一个"Delete All Checked Items"按钮(如图1).本教程比较短, 因为我们在前面的教程已经完成大体的框架,