xDBプログラミング:過去のインタラクション情報をロードする

samatsu 8/10/2015 1307 N/A xDB Programming

今回の記事では過去の訪問データ(インタラクション)をプログラムの中でロードする方法をご紹介します。

過去データのロードは実装方法によってはパフォーマンスを著しく低下させる危険な処理です。使用する場合は慎重かつ控えめに行ってください。また、過去データを何度もロードする理由はないので必ずデリバリサーバー上でキャッシュしてリクエストごとにロードする処理は行わないでください。

インタラクション情報のロードは安易に行うとパフォーマンスやリソースの消費に影響を与えますので、基本的には行わないでください。後で記載するように実際にデフォルトでは過去データロードの処理は行えないようになっています。紹介するといっておいていきなりですが、重要なので記載しました。

今回のサンプルの動作確認では次のバージョンを使用してました。

  • Sitecore 8.0 Update4

1.過去のインタラクションデータをロードする

本日から3日以内のインタラクションデータをインタラクション開始日時の降順(新しい順)で最大5件抽出するサンプルコードは次のようになります。LoadHistorycalDataは拡張メソッドなので、using句にSitecore.Analytics.Data名前空間を含めるようにしてください。

protected void btLoadHistorycalInteraction_Click(object sender, EventArgs e)
{
    if (Tracker.IsActive)
    {
        // LoadHistorycalData拡張メソッドを呼び出すには
        // using Sitecore.Analytics.Data 名前空間が必要
        var interactions = Tracker.Current.Contact.LoadHistorycalData(5, DateTime.Today.AddDays(-3));
    }
}

上記サンプルのように簡単に過去の訪問情報を読み込むことができます。読み込んだデータは期限付きでキャッシュするなり、セッションデータに入れるなどして使いまわしてください。キャッシュやセッションデータがどこに、どれくらいの量 保存されるかも考慮して最適な場所にデータをキャッシュするように判断をしてください。

プログラムをデバッグすると分かるのですが、上記コードを実行しても実際にはデータはロードされません。結果が0件になります。

2.履歴データの最大読み込み件数の変更

LoadHistorycalDataの結果が0件となるのは、Sitecore.Analytics.Tracking.config の下記設定によりロードする最大数が制限されているためです。下記Analytics.ContactHistory.MaxInteractionsの値か、LoadHistorycalDataの第一引数で指定した件数のどちらか小さい値がロードするインタラクションの履歴の最大数として使用されます。デフォルトでは 0になっているので 結果的に 最大で0件の履歴データがロードされます。

<setting name="Analytics.ContactHistory.MaxInteractions" value="0" />

履歴データのロードはリソースの負荷に影響を与える可能性があるためデフォルトで0になっています。この値を0より大きい値にすることで実際に過去のインタラクションの履歴データがロードできるようになります。

繰り返しになりますが、過去のインタラクションのデータの読み込み処理は慎重にかつ控えめに行うようにしてください。