在Sitecore xDB中存储自定义临时数据

时间:2016-06-27 15:24:17

标签: mongodb sitecore sitecore-xdb

我正在使用启用了xDB的Sitecore 8.1(MongoDB)。我想将访问用户的用户角色存储在xDB中,因此我可以在报告中汇总这些数据。这些角色可能会随着时间的推移而发生变化,因此一个用户可以在某个时间点拥有一组角色,而在以后可以拥有另一组角色。

我可以将这些用户角色作为自定义构面存储在Contact实体上,但是因为它们可能会因访问访问而改变,所以如果更新构面中的数据,我将丢失历史数据每次用户登录时(fx。在某次访问时,我都无法确定给定用户的角色)。

相反,我可以为我的facet数据创建一个自定义IElement,并存储角色以及一个时间戳,说明给定角色何时注册,但在报告阶段这个模型可能很难处理每次生成报告时,我都需要根据时间戳将交互数据与角色数据相关联。

是否可以将这些自定义数据存储在xDB中而不是Contact集合中?我可以在Interactions集合中存储自定义数据吗?有一个名为Tracker.Current.Session.Interaction.CustomValues的属性听起来像我需要的,但如果我在这里存储数据,我能否对数据进行适当的聚合/报告?还有其他我想过的方法吗?

1 个答案:

答案 0 :(得分:1)

CustomValues

是的,CustomValues字典是我在你的情况下会使用的字典。这个字典将被序列化为MongoDB,作为每次交互的嵌套文档(除非字典为空)。

另请注意,由于CustomValues是基类Sitecore.Analytics.Model.Entity的成员,因此该字典可用于xDB的许多其他数据类。例如,您可以在PageDataPageEventData个对象中存储自定义值。

由于CustomValues接受任何类的对象,因此您的自定义数据类需要一些额外的东西才能成功保存到MongoDB并随后从MongoDB加载:

  1. 必须将其标记为[Serializable]
  2. 需要在MongoDB驱动程序中注册,如下所示:

    using Sitecore.Analytics.Data.DataAccess.MongoDb;
    
    // [...]
    
    MongoDbObjectMapper.Instance.RegisterModelExtension<YourCustomClassName>();
    

    每个应用程序生命周期只需执行一次 - 例如,在initialize管道处理器中。

  3. 您自己的存储空间

    当然,您不必使用Sitecore的API来存储您的自定义数据。因此,替代方法是手动将数据保存到自定义MongoDB集合或SQL表。然后,您可以在聚合处理器中读取该数据,并通过当前处理的交互的ID找到它。

    这种方法的好处是您可以决定数据的存储位置和方式。缺点是实现和维护这种数据存储的额外工作。