Sa pagkakaron, halos tanang kompaniya sa kalibotan nangolekta og mga estadistika bahin sa mga aksyon sa tiggamit sa usa ka kapanguhaan sa web. Klaro ang panukmod - gusto sa mga kompanya nga mahibal-an kung giunsa ang ilang produkto / website gigamit ug mas masabtan ang ilang mga tiggamit. Siyempre, adunay daghang mga himan sa merkado aron masulbad kini nga problema - gikan sa mga sistema sa analytics nga naghatag mga datos sa porma sa mga dashboard ug mga graph (pananglitan
Apan nakakita kami og problema nga wala pa masulbad. Busa natawo
Nganong kinahanglan natong pauswagon ang atong kaugalingong serbisyo?
Nineties kadto, nakalahutay kami kutob sa among mahimo. 2019, among gihimo ang First Customer Data Platform API kSense, nga nagtugot sa pagtipon sa datos gikan sa lain-laing mga tinubdan (Facebook ads, Stripe, Salesforce, Google play, Google Analytics, ug uban pa) alang sa mas sayon ββββnga pagtuki sa datos, pag-ila sa mga dependency, ug uban pa. Namatikdan namo nga daghang tiggamit ang naggamit sa among data analytics platform, partikular ang Google Analytics (gitawag dinhi nga GA). Nakigsulti kami sa pipila ka mga tiggamit ug nahibal-an nga kinahanglan nila ang ilang data sa analytics sa produkto, nga ilang nadawat gamit ang GA, apan
Nag-instalar sila og Segment javascript pixel sa ilang web resource ug ang ilang data sa pamatasan sa tiggamit gikarga sa usa ka piho nga database (eg Postgres). Apan ang Segment usab adunay minus - ang presyo. Pananglitan, kung ang usa ka kapanguhaan sa web adunay 90,000 MTU (buwan nga gisubay nga mga tiggamit), nan kinahanglan nimo nga magbayad ~ $ 1,000 matag bulan sa cashier. Adunay usab usa ka ikatulo nga problema - pipila ka mga extension sa browser (sama sa AdBlock) gibabagan ang pagkolekta sa mga analytics. Ang mga hangyo sa http gikan sa browser gipadala sa mga domain sa GA ug Segment. Pinasukad sa gusto sa among mga kliyente, naghimo kami usa ka serbisyo sa pag-analisa nga nagkolekta usa ka kompleto nga set sa datos (nga walaβy sampling), nga walaβy bayad ug mahimong magamit sa among kaugalingon nga imprastraktura.
Giunsa ang serbisyo molihok
Ang serbisyo naglangkob sa tulo ka bahin: usa ka javascript pixel (nga sa ulahi among gisulat pag-usab sa typescript), usa ka bahin sa server nga gipatuman sa GO nga pinulongan, ug kini giplanohan nga gamiton ang Redshift ug BigQuery isip usa ka in-house nga database (sa ulahi ilang gidugang ang suporta alang sa Postgres , ClickHouse ug Snowflake).
Ang istruktura sa mga panghitabo nakahukom ang GA ug Segment nga dili mausab. Ang tanan nga gikinahanglan mao ang pagdoble sa tanan nga mga panghitabo gikan sa kapanguhaan sa web diin ang pixel gi-install sa among backend. Ingon nga kini nahimo, kini dali nga buhaton. Gi-override sa Javascript pixel ang orihinal nga pamaagi sa library sa GA gamit ang bag-o nga nagdoble sa panghitabo sa among sistema.
//'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);
});
});
}
Uban sa Segment pixel, ang tanan mas simple, kini adunay middleware nga mga pamaagi, ug among gigamit ang usa niini.
//'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.');
}
Dugang sa pagkopya sa mga panghitabo, gidugang namo ang abilidad sa pagpadala sa arbitraryong 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'
});
Sunod, maghisgot kita bahin sa bahin sa server. Ang backend kinahanglan nga modawat sa mga hangyo sa http, pun-on kini sa dugang nga impormasyon, pananglitan, geodata (salamat
//Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ 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"
}
Bisan pa, ang mga array sa pagkakaron yano nga nakabig sa mga kuwerdas. dili tanang relational database nagsuporta sa balikbalik nga field. Posible usab nga usbon ang mga ngalan sa field o tangtangon kini gamit ang opsyonal nga mga lagda sa pagmapa. Gitugotan ka nila nga usbon ang eskema sa datos, kung kinahanglan, o ihulog ang usa ka tipo sa datos sa lain. Pananglitan, kung ang field sa json adunay sulud nga adunay usa ka timestamp (field_3_sub_field_1_sub_sub_field_1 gikan sa panig-ingnan sa ibabaw), unya aron makahimo usa ka uma sa database nga adunay tipo sa timestamp, kinahanglan nimo nga magsulat usa ka lagda sa mapping sa pagsumpo. Sa laing pagkasulti, ang tipo sa datos sa natad gitino una sa json nga kantidad, ug dayon ang tipo nga pagmando sa paghulma (kung gi-configure) gipadapat. Nailhan namo ang 4 ka nag-unang matang sa datos: STRING, FLOAT64, INT64 ug TIMESTAMP. Ang mga lagda sa mapping ug casting ingon niini:
rules:
- "/field_1/subfield_1 -> " #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ
- "/field_2/subfield_1 -> /field_10/subfield_1" #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ»Ρ
- "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ»Ρ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°
Algorithm sa pagtino sa tipo sa datos:
- i-convert ang json struct ngadto sa flat struct
- pagtino sa tipo sa datos sa mga natad pinaagi sa mga kantidad
- pagpadapat sa mapping ug type casting rules
Unya gikan sa umaabot nga istruktura sa 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"
}
}
data schema makuha:
"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
Naghunahuna usab kami nga ang user kinahanglan nga makahimo sa pag-set up sa partitioning o split data sa database sumala sa ubang mga criteria ug gipatuman ang abilidad sa pagtakda sa ngalan sa lamesa isip usa ka kanunay o
tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'
Bisan pa, ang istruktura sa umaabot nga mga panghitabo mahimong mabag-o sa oras sa pagdagan. Nagpatuman kami og usa ka algorithm alang sa pagsusi sa kalainan tali sa istruktura sa usa ka kasamtangan nga lamesa ug sa istruktura sa usa ka umaabot nga panghitabo. Kung adunay makit-an nga kalainan, ang lamesa ma-update sa bag-ong mga natad. Aron mahimo kini, gamita ang patch SQL query:
#ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying
arkitektura
Ngano nga kinahanglan nimo nga isulat ang mga panghitabo sa file system, ug dili lang isulat kini direkta sa database? Ang mga database dili kanunay magpakita sa taas nga pasundayag nga adunay daghang gidaghanon sa mga pagsal-ot (
Open Source ug mga plano sa umaabot
Sa usa ka punto, ang serbisyo nahimong sama sa usa ka hingpit nga produkto ug nakahukom kami nga ibutang kini sa Open Source. Sa pagkakaron, ang mga panagsama sa Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake gipatuman. Gisuportahan sa tanan nga mga panagsama ang mga mode sa pagkarga sa datos sa batch ug streaming. Gidugang nga suporta alang sa mga hangyo pinaagi sa API.
Ang kasamtangan nga laraw sa panagsama ingon niini:
Bisan kung ang serbisyo mahimong magamit nga independente (pananglitan, gamit ang Docker), aduna usab kami
β
β
β
Malipay kami kung ang EventNative makatabang kanimo sa pagsulbad sa imong mga problema!
Ang mga rehistradong tiggamit lamang ang makaapil sa survey.
Unsa nga sistema sa pagkolekta sa istatistika ang gigamit sa imong kompanya
-
48,0%Google Analytics12
-
4,0%Segment1
-
16,0%Uban pa (isulat sa mga komento) 4
-
32,0%Gipatuman ang imong serbisyo8
25 ka tiggamit ang nagboto. 6 ka tiggamit ang nag-abstain.
Source: www.habr.com