涉及会话状态的可伸缩Web应用程序的最佳实践设计是什么?

时间:2009-06-02 21:18:05

标签: asp.net linq architecture web-applications session-state

我问这个的原因是最近设计了一个应用程序,最初想要使用没有会话状态来保持简单,但最终屈服于会话状态存储状态的简易性。我知道转移到Web场解决方案将涉及配置会话状态以在sql中运行。但是,我从来没有遇到任何解释序列化的信息是必要的。 所以我不需要重构代码来实现这一点。

另外,我使用linq to sql来给我数据对象。理想情况下,这很容易序列化,但似乎并不简单。

我用Google搜索,这样做应该没问题。问题不在于如何序列化linq数据类,而是:

会话状态是前进的方向,特别是在Web场上设计可伸缩应用程序时,我们是否应该使用其他方法,使用linq进行数据访问时建议使用哪种方法,我们是否应该使用查询字符串等。

谢谢

1 个答案:

答案 0 :(得分:1)

有很多(真的)方法可以做到这一点

存储会话状态是许多Web场/应用程序的基本要求。您可以使用LINQ-> SQL将其存储在数据库中,也可以在SAN上使用平面文件。如果你有一些方法可以从存储格式序列化到本地语言格式,那么它(除了形成一个性能观点)并不重要。

在PHP中,会话处理程序将字符串映射到会话表。在Python中,可能将对象编组为字符串并存储该字符串。

我建议以任何形式访问SQL后端,因为RDBMS是为并发访问而设计的,因此您不必担心锁定等问题。并且它和RDBMS一样扩展

您可以使用SQL Alchemy

之类的东西
Session = sqlalchemy.orm.sessionmaker() session = Session()

http://www.darrellhawley.com/2009/01/sql-alchemy-orm-basics.html

或者

http://idunno.org/articles/277.aspx

或者来自Microsoft的HOWTO称为“HOW TO:如何配置SQL Server以存储ASP.NET会话状态”可能会有所帮助

http://support.microsoft.com/kb/317604

提供

<sessionState 
    mode="SQLServer"
    sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
    cookieless="false" 
        timeout="20" 
/>

不考虑您的应用需求,然后确定是否需要会话状态是不可能的。但是在一天结束时,状态是状态,并且访问该状态的要求(阅读重,写重,大,小等等)决定了你如何以及以何种格式存储它。

我建议在类似hashmap的对象与SQL表之间进行ORM映射,或者建议使用hashmap的序列化

session = load_from_sql(session_id)
someval = session['var']

将值保存为字符串或本机对象取决于您选择的ORM,从您的语言中获取的容易程度等等。性能也是数据库占用的一个因素。您可能会发现存储简单变量字符串和取消按需解析更简单。您可以存储JSON类型,然后将它们转换为本机。

很多人考虑......

SQL可能是最简单的,无论是ORM-&gt; session_object还是一堆映射到哈希表的元组。

祝你好运