Best Practice 1 Do not store large object graphs in HttpSession

原创 2003年09月19日 00:01:00

1 Best Practice 1 Do not store large object graphs in HttpSession<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

大型的应用需要使用持久化HttpSessions,而这会耗费一定的系统资源。一个HttpSession无论什么时候使用都必须由servlet读无论什么时候需要更新也都是由servlet来写。在此过程中包括序列化数据并且从数据库中对它进行读、写。在大多数的应用中,每个servlet只是需要整个session中的一小部分数据而已。然而通过在HttpSession中存储一个大对象来使用数据大额话,应用就会强迫WebSphere Application Server每次都处理整个HttpSession对象。

WebSphere Application Server有一个配置选项来优化使用持久化HttpSession的性能。关于此项配置的详细内容会在WebSphere Application Server的文档中进行讨论。同样的还有办法就是可以选择把整个servlet对象的状态数据对象存储在HttpSession中。1

请不要忘记在使用完HttpSession对象之后要明确的将其置为无效。具体细节可以在实践2Release HttpSessions when finished中找到。

WebSphere Application Server配置持久化session的时候需要使用专用的数据源(data source)。为了避免持久化sessionJDBCconnections产生争夺,不要去重用一个应用的数据源或者WebSphere Application Server的资源。

1a中比较了一个使用不同大小对象的应用的例子,随着存储在HttpSession中存储的对象的大小的增加,系统的吞吐量降低,这个影响在很大程度上是数据的序列华消耗了系统的资源。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

JDBC alternative to Using HttpSession Data for Storing Servlet State Data

在大多数系统中每个servlet只是需要整体应用的数据的一部分,将一个对象存储在HttpSession中的一个方法是使用JDBC,可以在每个servlet使用JDBC来分隔和维护应用的数据。

一个JDBC解决方案的例子是将每个servlet中各自需要的数据分隔为不同的行,将分隔为行的数据放在系统应用维护的数据源中。对于这些行(每个servlet需要的数据)的主键作为一个单独的attribute存储在HttpSession中。

1b中展示了这种方法的代码:

 

1c展示了分隔servlet中的数据和使用JDBC来维护一个作为单独对象的HttpSession中的servlet数据对性能的提高:

 

JDBC Alternative – Cleanup Issues

上面的方法中提到需要把数据存储在数据库中,当这些数据用完后就需要一个机制来清除这些数据,下面说明了两个比较好的方法:

1)、周期性脱机:

2)、HttpSessionBindingListener.

 

OCP-1Z0-053-V12.02-629题

629.Which option is best practice for creating a recovery catalog owner in the catalog database? A...
  • rlhua
  • rlhua
  • 2013年10月28日 09:56
  • 4981

C++ Best Practice

C++把很多细节都仍给了程序员来处理,因此,C++有更多的注意事项,和一条条的决窍、技巧。 * 每个头文件都得解决anti-reinclude的问题 * 一般来说,library的header要inc...
  • kzjay
  • kzjay
  • 2010年01月25日 00:18
  • 449

Android Best Practices 主要内容

本文用途:搜索、跟踪阅读进度、概括官方文档内容。 忽略介绍、原理、优缺点等内容。 Running in a Background Service 最有用: IntentService 流程:创建Int...
  • smfwuxiao
  • smfwuxiao
  • 2013年08月12日 11:51
  • 2791

Top 20+ MySQL Best Practices【sql优化】 .

Database operations often tend to be the main bottleneck for most web applications today. It’s not o...
  • ljd8210
  • ljd8210
  • 2017年05月27日 11:10
  • 281

GATK best practices对variation(only for SNPs and Indels)的鉴定以及对上游数据对处理

借助网上的图用下,表表意思(只需要看图和粗体字,小字不用注意): 看完图来说话,其实你看我这篇文章,目的就是想看gatk best practices 分析的全过程,按先后顺序,给你好看。 ...
  • whiffen_cann
  • whiffen_cann
  • 2016年05月24日 15:40
  • 1161

UIBestPractice

MainActivity.Class public class MainActivity extends AppCompatActivity { private List msgList ...
  • CCCrunner
  • CCCrunner
  • 2017年04月23日 21:06
  • 268

Broadcast最佳实践--实现强制下线功能

1.效果图 刚打开应用界面 输入正确的账号和密码后,点击login,效果如下 点击“Send force offline broadcast”按钮,就会出...
  • HiccupHiccup
  • HiccupHiccup
  • 2016年03月31日 19:48
  • 857

从Vuex中取出数组赋值给新的数组,新数组push时报错

Uncaught Error: [vuex] Do not mutate vuex store state outside mutation handlers 今天遇到一个问题,将Vuex中数组的值...
  • qq_32585057
  • qq_32585057
  • 2016年12月07日 13:18
  • 4371

滚蛋吧,python2君!

今天在查询 cherrypy 的文档资料,无意中发现这个网站: https://pythonclock.org/ ,看过之后,不由泪流满面……可爱又可恶的 python2 呀,你丫在各 linux ...
  • goocheez
  • goocheez
  • 2017年12月04日 09:52
  • 23

CUDA C最佳实践-CUDA Best Practices(三)

CUDA Best Practices的第三部分
  • FishSeeker
  • FishSeeker
  • 2017年08月08日 16:17
  • 288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Best Practice 1 Do not store large object graphs in HttpSession
举报原因:
原因补充:

(最多只允许输入30个字)