Web应用程序中的高效作业进度更新

时间:2010-05-18 07:35:53

标签: python database django postgresql web-applications

创建一个Web应用程序(在我的情况下是Django,但我认为问题更为笼统)是管理一组工作人员进行排队的工作,需要跟踪每个工作进度。

当我使用数据库UPDATE(在这种情况下为PostgreSQL)完成它时,它会严重影响数据库性能,因为每个UPDATE在表中创建一个新行,在我的情况下,只有真空DB才会删除过时的行。每隔1分钟运行30个作业并报告进度DB可能需要每隔10天进行一次真空吸尘(这意味着所有使用该系统的员工在前端方面都会出现大幅减速)。

因为进度信息并不重要,即。它不必是持久性的,如何在不使用开销数据库的情况下从作业中进行进度更新?有30个工作服务器,每个服务器同时执行1或2个作业,1个前端服务器为用户提供Web应用程序,1个数据库服务器。

2 个答案:

答案 0 :(得分:1)

有一个名为 memcached 的软件包,它为密钥值检索设置了一个快速服务器。它被维基百科这样的大型集群网站使用。

它允许您在群集周围共享频繁更改的数据,而无需数据库开销。

答案 1 :(得分:1)

如果您正在基于键进行插入/更新/检索(例如,您每次都按ID访问行),您可以将Django caching framework与任何可以在之间共享的缓存后端一起使用服务器。 amwinter建议memcached。 django发行版中有一个memcached缓存后端。但memecached并不保证它不会丢失您的数据。例如,您可能正在尝试存储大量数据,而memcached会在达到某个内存限制时开始丢失数据。所以记住这一点。 memcached有一个扩展,它可以使数据持久化(忘记它被称为)。

您也可以考虑redis as a cache backendMongoDB