我在写一个相当复杂的Web应用程序。 Python后端运行一种算法,其状态取决于存储在不经常改变的多个相关数据库表中的数据,以及经常改变的用户特定数据。当用户使用应用程序时,算法的每个用户状态会经历许多小的更改。该算法经常在每个用户的工作中用于做出某些重要的决定。如何让一个web对象中的Python对象持久化?
由于性能原因,对来自(半规范化)数据库数据的每个请求重新初始化状态很快变得不可行。例如,以某种方式缓存状态的Python对象,以便在需要时可以简单地使用和/或更新,这将是非常可取的。但是,由于这是一个Web应用程序,因此有几个进程为请求提供服务,因此使用全局变量是不可能的。我试着序列化相关对象(通过pickle)并将序列化数据保存到数据库,现在我正在试验通过memcached缓存序列化数据。但是,这仍然会经常导致序列化和反序列化的大量开销。
我看过共享内存解决方案,但我发现的唯一相关事项是POSH。然而,POSH似乎没有被广泛使用,我不觉得将这样的实验组件集成到我的应用程序中很容易。
我需要一些建议!这是我开发Web应用程序的第一步,所以我希望这是一个常见的问题,以至于有这样的问题的众所周知的解决方案。在这一点上的解决方案,假设Python的后端是一台服务器上运行就足够了,但加分解决方案,规模到多台服务器以及:)
注:
- 我有这个应用程序正在工作,目前正在使用并且处于活动状态我开始时没有做任何过早的优化,然后根据需要进行优化。我已经完成了测量和测试,以确保上述问题是实际的瓶颈。我敢肯定,我可以从目前的设置中挤出更多的性能,但我想问问是否有更好的方法。
- 设置本身仍然是一项工作;假定系统的架构可以是任何套件的解决方案。
哪个框架? CherryPy的? Django的? – 2008-12-01 11:20:26
你有没有做过任何测量证明状态访问是瓶颈?腌菜有多大,取出多少时间,整个请求的时间等等? – 2008-12-01 12:28:35
@Martin:咸菜大约2MB(协议2),反序列化和序列化占用请求处理时间的90%。 – taleinat 2008-12-01 21:51:05