Хранение пользовательских временных данных в Sitecore xDB

Я использую Sitecore 8.1 с включенной xDB (MongoDB). Я хотел бы сохранить пользовательские роли посещающих пользователей в xDB, чтобы я мог агрегировать эти данные в своих отчетах. Эти роли могут меняться со временем, поэтому один пользователь может иметь один набор ролей в определенный момент времени и другой набор ролей позднее.

Я мог бы пойти и сохранить эти пользовательские роли в качестве пользовательских аспектов на Contact сущности, но поскольку они могут меняться для пользователя от посещения к посещению, я потеряю исторические данные, если буду обновлять данные в фасете каждый раз, когда пользователь входит в систему (fx. Я не смогу сказать, какие роли имел данный пользователь в какой-то данный визит).

Вместо этого я мог бы создать кастом IElement для моих данных фасетов, и сохраните роли вместе с отметкой времени, указывающей, когда данные роли были зарегистрированы, но эту модель может быть трудно обработать на этапе отчетности, где мне нужно было бы связать данные взаимодействия с данными роли на основе метки времени каждый раз, когда я генерирую отчет.

Можно ли хранить эти пользовательские данные в xDB в другом месте, кроме коллекции контактов? Могу ли я сохранить пользовательские данные в коллекции Interactions? Есть свойство под названием Tracker.Current.Session.Interaction.CustomValues это звучит как то, что мне нужно, но если я буду хранить данные здесь, смогу ли я выполнить надлежащую агрегацию / отчетность по данным? Какие-нибудь другие подходы, о которых я не думал?

1 ответ

CustomValues

Да, CustomValues словарь - это то, что я бы использовал в вашем случае. Этот словарь будет сериализован в MongoDB как вложенный документ каждого взаимодействия (если словарь не пуст).

Также обратите внимание, что, так как CustomValues является членом базового класса Sitecore.Analytics.Model.Entityэтот словарь доступен во многих других классах данных xDB. Например, вы можете хранить пользовательские значения в PageData а также PageEventData объекты.

поскольку CustomValues берет объект любого класса, ваш пользовательский класс данных нуждается в некоторых дополнительных вещах для его успешного сохранения и последующей загрузки из MongoDB:

  1. Это должно быть отмечено как [Serializable],
  2. Он должен быть зарегистрирован в драйвере MongoDB следующим образом:

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

    Это должно быть сделано только один раз за время жизни приложения - например, в initialize конвейерный процессор.

Ваше собственное хранилище

Конечно, вам не нужно использовать API Sitecore для хранения ваших пользовательских данных. Поэтому альтернативой может быть ручное сохранение данных в пользовательскую коллекцию MongoDB или таблицу SQL. Затем вы можете прочитать эти данные в своем процессоре агрегации, находя их по идентификатору обработанного в данный момент взаимодействия.

Преимущество этого подхода заключается в том, что вы можете решить, где и как будут храниться ваши данные. Недостатком является дополнительная работа по внедрению и поддержанию этого хранилища данных.

Другие вопросы по тегам