zanePerfor前端监控平台性能优化之数据库分表

栏目: 数据库 · 发布时间: 5年前

内容简介:调用方式也很简单,跟默认的调用方式有一点小区别 (下面以调用单个ajax详情为例)

HI!,你好,我是zane,zanePerfor是一款最近我开发的一个前端性能监控平台,现在支持web浏览器端和微信小程序段。

我定义为一款完整,高性能,高可用的前端性能监控系统,这是未来会达到的目的,现今的架构也基本支持了高可用,高性能的部署。实际上还不够,在很多地方还有优化的空间,我会持续的优化和升级。

开源不易,如果你也热爱技术,拥抱开源,希望能小小的支持给个star。

项目的github地址:

github.com/wangweiange…

项目开发文档说明:

blog.seosiwei.com/performance…

为什么要分表

  • zanePerfor可以创建多个应用,并进行数据的上报统计。

  • 每个应用同类型的数据存放在同一张表中会造成单表的数据存储量非常大,索引文件的体积相应的也会很大。

  • 在单表中,需要对每个应用的appId做索引,如果分表此索引则可去掉。

  • 这样就造成了单表的读写性能都会相应的降低。

分表的优势

  • 解决了单表的数据存储大小压力

  • 解决了单表的读写压力

  • 减少索引字段和索引体积大小

  • 应用解耦与查询性能的提升

分表的劣势

  • 分表唯一的劣势是在 Mongodb 集群架构中分片变得需要频繁的维护
  • 每新增一个应用,就会动态的新增一张表,如果此表需要做分片,那么就需要初始化一次分片规则

zanePerfor分表图

zanePerfor前端监控平台性能优化之数据库分表

在zanePerfor中的代码实现:

1、在servers启动时,在app对象下挂载一个models对象,用来存储所有的Schema对象

// 在app.js下挂载models对象

'use strict';

module.exports = async app => {
    app.models = {};
};复制代码

2、需要分表的model中,在app.models下挂载一个按某字段拆分表的方法

'use strict';

module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;
    const conn = app.mongooseDB.get('db3');

    const WebAjaxsSchema = new Schema({
        app_id: { type: String }, 
        create_time: { type: Date, default: Date.now },
        ...
    });


    // ----------拆表代码如下:-----------
    // 此处根据appId拆表
    app.models.WebAjaxs = function(appId) {
        return conn.model(`web_ajaxs_${appId}`, WebAjaxsSchema);
    };

    // ----------默认写法(不拆表)---------
    // return conn.model(`web_ajaxs`, WebAjaxsSchema);
};复制代码

3、调用方式

调用方式也很简单,跟默认的调用方式有一点小区别 (下面以调用单个ajax详情为例)

// 获得单个ajax详情信息
async getDetailForId(appId, id) {
	// ---------拆表调用方式---------
    return await this.app.models.WebAjaxs(appId).findOne({ _id: id }).read('sp').exec() || {};
    
    // ---------默认调用方式---------
    // return await this.ctx.model.WebAjaxs.findOne({ _id: id }).read('sp').exec() || {};

}复制代码

备注:应用根据appId拆表,因此所有查询操作需要传入appId进行查询。

以上只是实践的一种方式,同理,还可以通过 时间日期拆表,其他字段拆表。

zanePerfor暂时只做分表,暂未做分库,已经能满足绝大部分业务需求,若某一天觉得不能满足业务需求的时候再考虑是否分库。

文章来源:zane的博客


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新零售进化论

新零售进化论

陈欢、陈澄波 / 中信出版社 / 2018-7 / 49.00

本书主要介绍了新零售的进化现象和规律,提出了新零售的第一性原理是物理数据二重性,即在新零售时代,所有的人、货、场既是物理的也是数据的。 通过这个原点,进一步衍生出了新零售的八大核心算法,并用大量的辅助观点和新零售案例来揭示新零售背后的算法逻辑。 综合一系列的理论推演和案例讲解,作者重点回答了以下3个问题: ● 我们是行业的强者,如果跟不上新零售的潮流,会不会被淘汰? ● 我......一起来看看 《新零售进化论》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具