HI!,你好,我是zane,zanePerfor是一款最近我開發的一個前端性能監控平臺,如今支持web瀏覽器端和微信小程序段。html
我定義爲一款完整,高性能,高可用的前端性能監控系統,這是將來會達到的目的,現今的架構也基本支持了高可用,高性能的部署。實際上還不夠,在不少地方還有優化的空間,我會持續的優化和升級。前端
開源不易,若是你也熱愛技術,擁抱開源,但願能小小的支持給個star。git
github.com/wangweiange…
github
zanePerfor能夠建立多個應用,並進行數據的上報統計。ajax
每一個應用同類型的數據存放在同一張表中會形成單表的數據存儲量很是大,索引文件的體積相應的也會很大。小程序
在單表中,須要對每一個應用的appId作索引,若是分表此索引則可去掉。微信小程序
這樣就形成了單表的讀寫性能都會相應的下降。瀏覽器
解決了單表的數據存儲大小壓力bash
解決了單表的讀寫壓力
減小索引字段和索引體積大小
應用解耦與查詢性能的提高
// 在app.js下掛載models對象
'use strict';
module.exports = async app => {
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);
};複製代碼
調用方式也很簡單,跟默認的調用方式有一點小區別 (下面以調用單個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的博客