他の人のデータによく見られる標準的な問題があります。 ユーザーのイベント/アクションを追跡するとします。 通常、これを行うためのコード(Web上のJSまたはアプリ用のSDK)があり、サーバーにデータを送信します。
各イベントにはタイムスタンプが必要です。 また、2つの選択肢があります。クライアントのローカル時間またはサーバーがイベントを受信した時間です。 良いアドバイスと未解決の謎
サーバー時間:
- プラス:時間の精度、データ形式、タイムゾーンを完全に制御します。 すべてが標準であり、すべてが機能します。
- 少ない:ネットワーク遅延はタイムスタンプに影響します。 さらに、これがスマートフォンアプリケーションの場合は、おそらくネットワークの使用量を最小限に抑えるために、バッチデータの読み込みを使用しています。 通常、ユーザーからのイベントは、十分な数(たとえば、10)が入力されるまでローカルに保存され、一度にすべてマージされます。 この戦略は、EDGEを介して接続された最も安価なAndroidが半分以上のデバイスである新興市場で作業する場合に特に重要です。 その結果、データはバッチで送られ、タイムスタンプは1つしかありません。 イベント間の順序と時間を理解することはできません。 ところで、ここに、 Habrからの別の同様の例があります。
クライアント時間:
- プラス:クライアント上のイベントの順序とそれらの間の時間に関する正確なデータを提供します
- マイナス:デバイスのユーザーの時間が間違っていることに驚くでしょう!
私の経験では、ユーザーの1%から5%(私はさまざまなプロジェクトや視聴者を見ています)が遠い過去または未来に住んでいます。 私は正直に彼らがなぜこれをしているのか理解していない。
フィリピンと日本には特にそのようなユーザーが多いことに気付きました。
この問題は本当の悪夢です。 一般に、ユーザーアクティビティに関するすべての要求を中断します。これらは分析で最も一般的な質問です。
考えられる解決策の1つは、クライアント上に独自の時間カウンターを作成することです。 インターネット上のサーバーに時間を尋ね、システム時間との違いを覚えておいてください。 しかし、これは厄介な問題であり、シフトが安定しているという保証はなく、特別なものはありません(このデバイスには時間の経過とともに何らかの問題があります)。
それではどうしますか? 両方のタイムスタンプを保持し、状況に応じてより適切なタイムスタンプを使用してください。 いつものように、より多くのデータが優れています。 しかし、これを行うことはしばしば忘れられます。 それから忘れられないように書きます。
PS聴衆への質問:
- 他の方法は?
- 日本人とフィリピン人の何が間違っているのでしょうか?