Спостерігаємо за користувачем – два типу timestamp

Давним-давно, один фахівець з баз даних (з тих, бородатих і вже сивих) сказав мені, що мітки часу (timestamp) — це найскладніша тема в базах даних. Я йому, правда, не повірив, але приколи з часом реально зустрічаються.

Є стандартна проблема, яку часто бачу в чужих даних. Покладемо зібралися ви відстежувати події/дії користувача. Зазвичай, у вас буде це робити певний код (JS у вебі чи SDK для аппов), який буде слати дані серверу.

Кожній події потрібна мітка часу. І є вибір з двох: локальний час на клієнті або час одержання події сервером. Один хороший рада що робити і загадка без відповіді під катом

Серверне час:
  • Плюс: Повний контроль над точністю часу, форматом даних і часовим поясом. Все стандартно, все працює.
  • Мінус: На мітку часу впливають лаги мережі. Більш того, якщо це додаток для смартфона, то напевно ви використовуєте завантаження даних партіями, щоб мінімізувати використання мережі. Зазвичай події від користувача зберігаються локально поки не набереться достатньо (наприклад, 10) і потім вони зливаються все за раз. Особливу важливість ця тактика, якщо працюєте з ринками, що розвиваються, де більше половини пристроїв це максимально дешевий Android підключений через EDGE. В результаті дані приходять партіями і у них одна тимчасова мітка на всіх. Зрозуміти порядок і час між подіями не виходить. Ось, до речі, інший схожий приклад з хабра.
Клієнтське час:
  • Плюс: Дає точні дані про порядок подій на клієнті і часу між ними
  • Мінус: Ви будете здивовані, як часто у юзерів на девайсі встановлено некоректний час!


З мого досвіду від 1% до 5% користувачів (я дивлюся за різними проектами і аудиторіям) живуть у далекому минулому або навіть в майбутньому. Я, чесно сказати, не розумію навіщо вони це роблять.



Я помітив, що особливо багато таких користувачів на Філіппінах і в Японії.



Ця проблема – реальний кошмар. Вона ламає всі запити про активність користувачів в цілому, а це найпопулярніші питання в аналітиці.

Одне можливе рішення – це створити власний лічильник часу на клієнті. Запитати час якого-небудь сервера в інтернеті і запам'ятати різницю з системним часом. Але це справа тоскне і гарантій, що зрушення буде стабільним, особливих немає (на цьому девайсі вже гарантовано щось не так з часом).

Так що ж робити? Просто зберігати обидві мітки часу і використовувати більш відповідну залежно від ситуації. Як завжди, більше даних — краще. Але зробити це часто забувають. Потім і пишу, щоб не забували.

p.s. Питання залу:
  • Інші способи?
  • Є ідеї, що не так з японцями і філіппінцями?
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.