Дар айни замон, қариб ҳар як ширкат дар ҷаҳон оморро дар бораи амалҳои корбарон дар манбаи веб ҷамъоварӣ мекунад. Ҳавасмандӣ равшан аст - ширкатҳо мехоҳанд бидонанд, ки маҳсулот / вебсайти онҳо чӣ гуна истифода мешавад ва корбарони худро беҳтар фаҳманд. Албатта, дар бозор шумораи зиёди абзорҳо барои ҳалли ин мушкилот мавҷуданд - аз системаҳои таҳлилӣ, ки маълумотро дар шакли панелҳо ва графикҳо пешниҳод мекунанд (масалан
Вале мо проблемаеро ёфтем, ки то хол хал нашудааст. Ҳамин тавр таваллуд шудааст
Чаро мо бояд хидмати худро инкишоф диҳем?
Солҳои навадум буд, мо то ҳадди имкон зинда мондем. 2019, мо платформаи аввалини маълумоти муштариёнро таҳия кардем kSense, ки имкон дод, ки маълумот аз манбаъҳои гуногун (рекламаҳои Facebook, Stripe, Salesforce, Google play, Google Analytics ва ғайра) барои таҳлили қулайтар маълумот, муайян кардани вобастагӣ ва ғ. Мо мушоҳида кардем, ки бисёр корбарон платформаи моро барои таҳлили додаҳо махсусан Google Analytics (минбаъд GA) истифода мебаранд. Мо бо баъзе корбарон сӯҳбат кардем ва фаҳмидем, ки онҳо ба маълумоти таҳлилӣ барои маҳсулоти худ, ки бо истифода аз GA мегиранд, лозиманд, аммо
Онҳо дар манбаи веби худ як пиксели Javascript Segment насб карданд ва маълумот дар бораи рафтори корбарони онҳо ба махзани муайяншуда бор карда шуд (масалан Postgres). Аммо Сегмент инчунин як нуқсони худро дорад - нарх. Масалан, агар як манбаи веб 90,000 MTU (корбарони ҳармоҳа пайгирӣ) дошта бошад, шумо бояд ба хазинадор дар як моҳ ~ 1,000 доллар пардохт кунед. Мушкилоти сеюм низ вуҷуд дошт - баъзе васеъшавии браузерҳо (ба монанди AdBlock) ҷамъоварии таҳлилҳоро маҳкам карданд, зеро... Дархостҳои http аз браузер ба доменҳои GA ва Segment фиристода шуданд. Дар асоси хоҳишҳои мизоҷони худ, мо як хидмати таҳлилиро таъсис додем, ки маҷмӯи пурраи маълумотро (бидуни интихоб) ҷамъоварӣ мекунад, ройгон аст ва метавонад дар инфрасохтори худамон кор кунад.
Чӣ тавр хидмат кор мекунад
Хидмат аз се қисм иборат аст: пиксели javascript (ки мо онро баъдтар дар хатти чопӣ аз нав навиштем), қисми сервер бо забони GO амалӣ карда мешавад ва ба нақша гирифта шудааст, ки Redshift ва BigQuery ҳамчун пойгоҳи додаҳои дохилӣ истифода шаванд (баъдтар онҳо барои Postgres, ClickHouse ва Snowflake).
Қарор дода шуд, ки сохтори рӯйдодҳои GA ва Segment бетағйир монад. Ҳама чизе, ки лозим буд, такрор кардани ҳама рӯйдодҳоро аз манбаи веб, ки пиксел дар пушти мо насб шудааст, буд. Чунон ки маълум мешавад, ин корро кардан душвор нест. Пиксели Javascript усули аслии китобхонаи GA-ро бо усули нав бекор кард, ки ин ҳодисаро дар системаи мо такрор кард.
//'ga' - стандартное название переменной Google Analytics
if (window.ga) {
ga(tracker => {
var originalSendHitTask = tracker.get('sendHitTask');
tracker.set('sendHitTask', (model) => {
var payLoad = model.get('hitPayload');
//отправка оригинального события в GA
originalSendHitTask(model);
let jsonPayload = this.parseQuery(payLoad);
//отправка события в наш сервис
this.send3p('ga', jsonPayload);
});
});
}
Бо Pixel Segment ҳама чиз соддатар аст; он дорои усулҳои миёнаравӣ мебошад, ки яке аз онҳоро мо истифода мебарем.
//'analytics' - стандартное название переменной Segment
if (window.analytics) {
if (window.analytics.addSourceMiddleware) {
window.analytics.addSourceMiddleware(chain => {
try {
//дублирование события в наш сервис
this.send3p('ajs', chain.payload);
} catch (e) {
LOG.warn('Failed to send an event', e)
}
//отправка оригинального события в Segment
chain.next(chain.payload);
});
} else {
LOG.warn("Invalid interceptor state. Analytics js initialized, but not completely");
}
} else {
LOG.warn('Analytics.js listener is not set.');
}
Илова ба нусхабардории рӯйдодҳо, мо қобилияти фиристодани json-и худсаронаро илова кардем:
//Отправка событий с произвольным json объектом
eventN.track('product_page_view', {
product_id: '1e48fb70-ef12-4ea9-ab10-fd0b910c49ce',
product_price: 399.99,
price_currency: 'USD'
product_release_start: '2020-09-25T12:38:27.763000Z'
});
Минбаъд, биёед дар бораи қисми сервер сӯҳбат кунем. Бозгашт бояд дархостҳои http-ро қабул кунад ва онҳоро бо маълумоти иловагӣ пур кунад, масалан, маълумотҳои гео (ташаккур
//входящий json
{
"field_1": {
"sub_field_1": "text1",
"sub_field_2": 100
},
"field_2": "text2",
"field_3": {
"sub_field_1": {
"sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
}
}
}
//результат
{
"field_1_sub_field_1": "text1",
"field_1_sub_field_2": 100,
"field_2": "text2",
"field_3_sub_field_1_sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
}
Аммо, массивҳо дар айни замон танҳо ба сатр табдил дода мешаванд, зеро На ҳама пойгоҳи додаҳои релятсионӣ майдонҳои такрориро дастгирӣ мекунанд. Инчунин бо истифода аз қоидаҳои ихтиёрии харитасозӣ номи майдонҳоро тағир додан ё нест кардан мумкин аст. Онҳо ба шумо имкон медиҳанд, ки схемаи маълумотро дар ҳолати зарурӣ тағир диҳед ё як намуди маълумотро ба дигараш табдил диҳед. Масалан, агар майдони json дорои сатр бо тамғаи вақт (field_3_sub_field_1_sub_sub_field_1 аз мисоли дар боло овардашуда), пас барои эҷод кардани майдон дар пойгоҳи додаҳо бо навъи тамғаи вақт, шумо бояд дар конфигуратсия қоидаи харитасозӣ нависед. Ба ибораи дигар, навъи додаҳои майдон аввал бо арзиши json муайян карда мешавад ва сипас қоидаи casting навъи (агар танзим карда шуда бошад) татбиқ карда мешавад. Мо 4 намуди асосии маълумотро муайян кардем: STRING, FLOAT64, INT64 ва TIMESTAMP. Қоидаҳои харитасозӣ ва навъи рехтагарӣ чунинанд:
rules:
- "/field_1/subfield_1 -> " #правило удаления поля
- "/field_2/subfield_1 -> /field_10/subfield_1" #правило переноса поля
- "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #правило переноса поля и приведения типа
Алгоритм барои муайян кардани намуди маълумот:
- табдил додани сохтори json ба сохтори ҳамвор
- муайян кардани намуди маълумотҳои майдонҳо аз рӯи арзишҳо
- татбиқи қоидаҳои харитасозӣ ва навъи рехтагарӣ
Пас аз сохтори json воридшаванда:
{
"product_id": "1e48fb70-ef12-4ea9-ab10-fd0b910c49ce",
"product_price": 399.99,
"price_currency": "USD",
"product_type": "supplies",
"product_release_start": "2020-09-25T12:38:27.763000Z",
"images": {
"main": "picture1",
"sub": "picture2"
}
}
схемаи маълумот гирифта мешавад:
"product_id" character varying,
"product_price" numeric (38,18),
"price_currency" character varying,
"product_type" character varying,
"product_release_start" timestamp,
"images_main" character varying,
"images_sub" character varying
Мо инчунин фикр мекардем, ки корбар бояд тақсимотро дар пойгоҳи додаҳо мувофиқи дигар меъёрҳо танзим кунад ё тақсим кунад ва қобилияти муқаррар кардани номи ҷадвалро бо доимӣ ё
tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'
Аммо, сохтори рӯйдодҳои воридотӣ метавонад дар вақти иҷро тағйир ёбад. Мо алгоритмеро барои санҷидани фарқияти байни сохтори ҷадвали мавҷуда ва сохтори ҳодисаи воридотӣ амалӣ кардем. Агар фарқият пайдо шавад, ҷадвал бо майдонҳои нав нав карда мешавад. Барои ин, дархости SQL-ро истифода баред:
#Пример для Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying
меъморӣ
Чаро шумо бояд рӯйдодҳоро ба системаи файлӣ нависед, на танҳо онҳоро мустақиман ба пойгоҳи додаҳо нависед? Пойгоҳи додаҳо ҳангоми кор бо миқдори зиёди воридотҳо на ҳамеша хуб кор мекунанд (
Сарчашмаи кушода ва нақшаҳо барои оянда
Дар баъзе лаҳзаҳо, хидмат ба маҳсулоти мукаммал табдил ёфт ва мо тасмим гирифтем, ки онро ба кушодаасос нашр кунем. Дар айни замон, ҳамгироӣ бо Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake амалӣ карда шудааст. Ҳамаи интегратсияҳо ҳам шеваҳои партия ва ҳам ҷараёнҳои боркунии маълумотро дастгирӣ мекунанд. Дастгирии дархостҳо тавассути API илова карда шуд.
Нақшаи кунунии ҳамгироӣ чунин менамояд:
Гарчанде ки хидмат метавонад мустақилона истифода шавад (масалан бо истифодаи Docker), мо низ дорем
Агар EventNative дар ҳалли мушкилоти шумо кӯмак кунад, мо хурсанд хоҳем шуд!
Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд.
Дар ширкати шумо кадом системаи ҷамъоварии омор истифода мешавад?
-
48,0%Google Analytics 12
-
4,0%Сегмент 1
-
16,0%Дигар (дар шарҳҳо нависед)4
-
32,0%Хизматрасонии шуморо ба амал овард8
25 корбар овоз доданд. 6 корбар худдорӣ карданд.
Манбаъ: will.com