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

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

内容简介:调用方式也很简单,跟默认的调用方式有一点小区别 (下面以调用单个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的博客


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

查看所有标签

猜你喜欢:

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

突破之道

突破之道

(美)基思 R. 麦克法兰(Keith R. McFarland) / 江南、江维 / 机械工业出版社 / 2017-4 / 49.00

《从优秀到卓越》前传。 深入调查7000多家公司、1500多名关键管理人员,总结提炼出6大突破式发展策略。 解析创业成功后的公司如何腾飞,以几何速度增长,突破10亿关口。 阐述为什么创始人自己才是企业实现突破的最大障碍。一起来看看 《突破之道》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具