k's blog

错误使用物化视图造成的负优化案例

部门项目使用PostgreSQL数据库和Django Web框架,核心功能涉及设备管理,定时对每台设备进行巡检。最初设计时为了优化性能考虑,引入了物化视图(Materialized View),对聚合查询结果进行缓存,但因为使用不当反而产生了负优化。本文将对这一案例进行具体介绍。 问题介绍 业务对每台设备进行周期性的巡检,每次的结果存入下表: postgres@10:scenedb&g...

解决Django ORM使用ThreadPoolExecutor时数据库连接溢出的问题

团队内有多个Web项目使用Django框架,在处理一些日常事务时,为了加速API返回,会用到concurrent模块的线程池ThreadPoolExecutor,将不需要立刻知晓结果的逻辑以任务的形式提交(submit)到线程池。在使用过程中遇到一个较为棘手的问题:线程池会创建新的数据库连接,而Django服务并不会主动回收它们。而一般的接口请求结束时,Django都会调用close_old...

Python&Memcached模拟MutableMapping存储

Memcached 是一种易于使用的高性能内存数据存储。它提供了一项成熟的可扩展开源解决方案,能够实现亚毫秒级响应时间并用作缓存或会话存储。Memcached 非常热门,可为 Web、移动应用程序、游戏、广告技术和电子商务领域的实时应用程序提供支持。 但是Memcached仅仅支持键/值对的存储,针对一些比较复杂的格式需要进行额外的处理,例如:存储Python字典,需要先转化为JSON字符...