text: "use strict";(self.webpackChunkturms_docs=self.webpackChunkturms_docs||[]).push([[840],{4120:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var r=a(6252);const s=(0,r._)("h1",{id:"数据分析",tabindex:"-1"},[(0,r._)("a",{class:"header-anchor",href:"#数据分析","aria-hidden":"true"},"#"),(0,r.Uk)(" 数据分析")],-1),n=(0,r._)("p",null,"在给小型的即时通讯场景做表结构设计时，由于不需要考虑数据模型的分片设计，并且可以直接将业务模型与统计模型融为一体，因此对于小型业务场景，可以通过代码快速实现开箱即用且执行高效的基础数据分析功能，并延伸提供基于索引字段实现的常用统计API。",-1),u=(0,r._)("p",null,"但Turms项目是针对中大型即时通讯场景设计的，数据分析与业务实现必然需要进行架构层面上的分离，其中也包括将业务模型与数据模型分离。如果您需要进行数据分析，则您可以采集turms-gateway与turms-service服务端生成的度量或埋点日志，并使用云服务或自研实现对其进行分析。",-1),d=(0,r._)("p",null,"另外，考虑到确实有很多常用且通用的IM相关统计数据，因此我们之后会新开一个项目turms-data来负责数据分析，并配合Turms服务端与turms-admin来实现：日志与数据库数据的采集、数据仓库搭建、分析统计业务指标、结果可视化等功能。",-1),l=(0,r._)("p",null,"注意：由于早期Turms主要是为小型即时通讯场景而设计，当时所有API查询字段都是基于索引实现的，可以保证查询的高效性。但后来转为向中大场景做设计，很多索引也因此移除了，但相应API（尤其是统计API）的查询字段并没有被移除，因此现在还有一些API（尤其是统计API）的查询参数的实现会使用到全表扫描，是Legacy代码。我们之后会根据实现性能，对这些API进行分类，以保证一些低效的API不会被误用。",-1),c={},i=(0,a(3744).Z)(c,[["render",function(e,t){return(0,r.wg)(),(0,r.iD)(r.HY,null,[s,n,u,d,l],64)}]])},3744:(e,t)=>{t.Z=(e,t)=>{for(const[a,r]of t)e[a]=r;return e}},4349:(e,t,a)=>{a.r(t),a.d(t,{data:()=>r});const r={key:"v-2d4882a6",path:"/for-developers/data-analytics.html",title:"数据分析",lang:"en-US",frontmatter:{},excerpt:"",headers:[],filePathRelative:"for-developers/data-analytics.md",git:{updatedTime:1641531738e3}}}}]);