用户行为分析框架

前言

   这个名字起的太大,其实我只是想说明一个设计。这个设计是用于收集并分析用户行为的。

   一般我们分析用户行为离不开数据,这些数据可以来自于数据库也可以来自于用户操作日志。这里我介绍的就是基于用户操作日志的行为分析方法。这个方法也可以说是一个设计,该设计包含三个部分。第一部分是用户行为数据收集第二部分是用户行为数据汇总最后是用户行为数据分析。整体结构大概如下图:

2010080416522245.jpg

图中大概能说明整个框架的运行流程。接下来我从三个部分说明一下

第一部分:用户行为数据收集

假设有A,B,C三台业务服务器在日常提供服务的同时记录了操作序列,操作序列类似

 
  
2010 - 07 - 22 17 : 11 : 05.801 AdoService(ExecuteNonQuery1) 1 56  
sessiontable154A insertindex [@sessionid,String,Input, 6341541562942187505580426882972741 ][@objid,String,Input, 112693246 ][@ip,String,Input, 10.53 . 139.134 ]

【时间,执行方法,是否成功,执行时间,数据库配置,执行命令,执行参数】。我们以分散的方式或是推得方式来获取用户数据,我们建立众多的客户端每个客户端配置收集文件的列表和文件类型,客户端周期性的读取该文件夹中的文件并发送到消息队列。这里说两点

1:读取那些文件,这是个问题。首先最新的文件不能读取因为业务服务器可能正在往里面写操作序列,其次上次读取过的文件也不能读取,我们如何区分是否读取过那?这里我们用文件的创建时间来区分。

2:为什么要发到消息队列而不是直接发到数据仓库里那?原因有两个,其一是数据仓库可能会成为热点,其次就是如果这里实现了向数据仓库里刷数据那么就有职责不分的嫌疑,毕竟还有文件到列的对应这个问题

第二部分:用户数据汇总

简单的说,就是周期性的读取消息队列中的数据然后刷到数据仓库里面。这里需要说明一个问题,就是如何把MQ中的信息和数据仓库中的列对应,这里我从两个方面来说

1:对应那些信息,

 
  
[AttributeUsage(AttributeTargets.Field)]
public class UserActionAttribute : Attribute
{
/// <summary>
/// 描述
/// </summary>
public string Describe { get ; set ; }

/// <summary>
/// 数据在MQ中的序号
/// </summary>
public int InMQIndex { get ; set ; }

/// <summary>
/// 列名称
/// </summary>
public string Column { get ; set ; }

/// <summary>
/// 字段类型
/// </summary>
public string DBType { get ; set ; }

public UserActionAttribute( int inMQIndex, string column, string dbType, string describe)
{
Column
= column;
Describe
= describe;
InMQIndex
= inMQIndex;
DBType
= dbType;
}
}

其实就是消息队列中的序号,列名称,类型。

2:如何对应和刷数据。我们允许用户自己定义实体EG:

 
  
public class UserActionEntity
{
[UserActionAttribute(
0 , " ServerName " , " System.String " , " 服务器名称 " )]
public String ServerName;

[UserActionAttribute(
1 , " DateTime " , " System.String " , " 信息发生的时间 " )]
public string DateTime;

[UserActionAttribute(
2 , " MethodName " , " System.String " , " 执行的方法名称 " )]
public string MethodName;

[UserActionAttribute(
3 , " IsSuccess " , " System.String " , " 是否执行成功 " )]
public string IsSuccess;

[UserActionAttribute(
4 , " ConsumeSec " , " System.String " , " 执行花费的时间 " )]
public string ConsumeSec;

[UserActionAttribute(
5 , " DBName " , " System.String " , " 数据库 " )]
public string DBName;

[UserActionAttribute(
6 , " StoredProcedureName " , " System.String " , "方法名称 " )]
public string StoredProcedureName;

[UserActionAttribute(
7 , " Params " , " System.String " , " 执行的参数 " )]
public string Params;
}

到这里我们就可以利用SqlBulkCopy来往数据库中刷数据了。EG

 
  
Assembly classSampleAssembly = Assembly.LoadFrom(EntityDllPath);
Type classSampleType
= classSampleAssembly.GetType(EntityDllFullName);

object [] attribs = null ;
foreach (FieldInfo prop in classSampleType.GetFields())
{
attribs
= prop.GetCustomAttributes( typeof (UserActionAttribute), false );
foreach (UserActionAttribute fieldAttrib in attribs)
{
DBSchema schema
= new DBSchema(fieldAttrib.InMQIndex, fieldAttrib.Column, fieldAttrib.DBType);
list.Add(fieldAttrib.Column, schema);
}
}

第三部分:用户行为分析

 

大概是建立多维数据模型然后利用BI公式进行分析,最后得到结果报表。这部分当前正在开发,随后我将补充这部分内容。

后记

希望这个思路对大家有用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一个非常强大的NoSQL数据库,可以用于存储和分析各种类型的数据,包括用户行为数据。 要进行用户行为分析,首先需要收集和存储用户行为数据。这可以通过在应用程序中插入适当的代码来实现,以跟踪用户的操作和行为。例如,可以记录用户的登录、点击、搜索、购买等行为。 在MongoDB中,可以创建一个集合来存储用户行为数据。每个文档可以表示一个特定的用户行为,并包含与该行为相关的信息,如用户ID、时间戳、操作类型等。 一旦数据被收集和存储,就可以使用MongoDB的强大查询功能来进行用户行为分析。以下是一些常见的查询和分析操作: 1. 统计用户数量:使用聚合框架,可以通过对用户ID进行去重计数来确定唯一用户的数量。 2. 分析用户活跃度:通过计算用户的登录次数或特定操作的次数,可以确定用户的活跃度。可以按天、周、月等时间段进行分组,并使用聚合操作计算总数或平均数。 3. 发现热门操作:通过聚合操作,可以找出最常见的操作类型或最受欢迎的功能。这可以帮助了解用户的偏好和兴趣。 4. 用户行为路径:通过分析用户的操作序列,可以了解用户在应用程序中的导航路径。可以使用聚合操作和条件查询来查找特定用户行为序列的频率和顺序。 5. 个性化推荐:通过分析用户的历史行为数据,可以为用户提供个性化的推荐。例如,基于用户的购买历史或浏览记录,可以推荐相关产品或内容。 这些只是用户行为分析的一些基本操作,实际应用中还可以根据具体需求进行更复杂的分析和查询。MongoDB的灵活性和强大的查询功能使其成为处理用户行为数据的理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值