ceilometer alarm 创建过程中的DB操作及优化
创建一个ceilometer alarm需要4次DB操作:
api/controllers/v2/alarms.py
1. is_over_quota 每一次都需要查询该user/project的所有alarms
2. 判断alarm name是否已经存在于DB中,也需要查询该user/project的所有alarms
# make sure alarms are unique by name per project.
alarms = list(conn.get_alarms(name=data.name,
project=data.project_id))
3. 添加alarm行
alarm = conn.create_alarm(alarm_in)
4.添加一个alarm历史记录
self._record_creation(conn, change, alarm.alarm_id, now)
优化考虑:
1. is_over_quota,可以创建一个全局计算数据结构并为多API workers加锁,服务启动时从DB的获得初始化值。
2. 判断alarm name是否已经存在于DB中,把name作为该table的键值,就不需要先取得user/project的所有alarms。
同时可以看到alarm表是建了user_id/project_id的索引以提高以上2步的效率。
class Alarm(Base):
"""Define Alarm data."""
__tablename__ = 'alarm'
__table_args__ = (
Index('ix_alarm_user_id', 'user_id'),
Index('ix_alarm_project_id', 'project_id'),
最新文章
- 百度地图demo
- SGIP、SMGP 长短信发送问题小结
- Python核心编程第三版第二章学习笔记
- maketrans translate
- 素定位器(ElementLocators)
- python数据库操作pymysql
- Apache Spark Tachyon的简介
- satellite-menu和ArcMenu
- (Qt 翻译) QGLAbstractScene
- [国嵌攻略][066][ARP协议实现]
- Dynamics CRM2016 Web API之通过实体的primary key查询记录
- <;自动化测试方案_10>;第十章、自动化测试部署策略
- C#基础 阶段总结
- snort帮助文档
- [转]jmeter 自定义测试脚本
- RSA加密常用的填充方式 以及 常见错误
- Python学习---range/for/break/continue简单使用
- hdoj 1026 Ignatius and the Princess I 最小步数,并且保存路径
- MyBatis的优缺点
- 【BZOJ 1004】 1004: [HNOI2008]Cards (置换、burnside引理)