创建一个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'),

最新文章

  1. 百度地图demo
  2. SGIP、SMGP 长短信发送问题小结
  3. Python核心编程第三版第二章学习笔记
  4. maketrans translate
  5. 素定位器(ElementLocators)
  6. python数据库操作pymysql
  7. Apache Spark Tachyon的简介
  8. satellite-menu和ArcMenu
  9. (Qt 翻译) QGLAbstractScene
  10. [国嵌攻略][066][ARP协议实现]
  11. Dynamics CRM2016 Web API之通过实体的primary key查询记录
  12. <自动化测试方案_10>第十章、自动化测试部署策略
  13. C#基础 阶段总结
  14. snort帮助文档
  15. [转]jmeter 自定义测试脚本
  16. RSA加密常用的填充方式 以及 常见错误
  17. Python学习---range/for/break/continue简单使用
  18. hdoj 1026 Ignatius and the Princess I 最小步数,并且保存路径
  19. MyBatis的优缺点
  20. 【BZOJ 1004】 1004: [HNOI2008]Cards (置换、burnside引理)

热门文章

  1. iOS 静态库的制作
  2. Hibernate 框架入门(一)
  3. setlocale()函数测试当前语言的两个程序
  4. 常用代码块:java使用系统浏览器打开url
  5. Linux源码包安装和脚本安装
  6. SpringBoot学习过程
  7. 关于服务器jdk版本和代码编译调试兼容问题
  8. 001-maven下载jar后缀为lastUpdated问题
  9. PyNN:神经网络模拟器的通用接口
  10. AFNetworking 和 ASIHTTPRequest