Nunc, fere omnis societas in mundo colligit statisticam de actionibus usoris in ope interretiali. Motus patet - societates scire cupiunt quomodo eorum producti/wesite adhibetur et melius eorum utentes intellegit. Nimirum in foro instrumenta multa sunt ad solvendam hanc quaestionem - e systematibus analyticis quae in forma ashboardorum et graphorum notitias praebent (exem. gr.
Sed invenimus quaestionem nondum solutam. Ita natus est
Cur nostrum servitium excolere debemus?
Nonaginta, quantum potuimus, supervivimus. MMXIX, API Primum Customer Data rostris elaboravimus kSensequae effecit ut notitias ex diversis fontibus aggregaret (Facebook ads, Stripe, Salesforce Google fabula, Google Analytica, etc.) pro commodius analysi analysi, clientelas cognoscendi, etc. Animadvertimus multos users utentes suggestu nostro pro analysi analytica specie Google Analyticorum (infra GA). Locuti sumus cum aliquibus usoribus et invenimus nos egent notitias analyticas pro suo producto ut GA accipiant, sed
Segmentum pixel html struxerunt in opibus interretialibus et notitia de moribus utentium utentium in datorum definitorum (exempli gratia Postgres). Sed Segmentum etiam downside habet - pretium. Exempli gratia, si subsidii telae 90,000 MTU (menses investigati utentes), debes 1,000 $ per mensem fisco solvere. Tertia quaestio etiam fuit - tractus quidam navigatri (ut AdBlock) collectionem analyticorum obstruxit, quia... http petitiones ex pasco missae sunt ad GA et Segmentum ditiones. Ex voluntate clientium nostrorum, ministerium analyticum creavimus, quod plenam notitiarum copiam colligit (sine sampling), liberum est et in infrastructura nostra operari potest.
Quomodo opera opera
Ministerium ex tribus partibus consistit: pixel html (quam postea in typographo rescripsimus), pars server in lingua GO impletur et institutum est ut Redshift et BigQuery uti database in domo instrumenti (postea subsidium addiderunt pro Postgres, ClickHouse et Snowflake).
Placuit structuram GA et Segmentum immutata eventus relinquere. Omnia quae opus erant duplicare debebant ex subsidiis interretialibus ubi pixel ad tergum nostrum instituitur. Hoc ut evenit, non difficile est. Pixela Javascript praeripuit methodum bibliothecae originalis GA cum nova una quae eventum in systemate nostro duplicavit.
//'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);
});
});
}
Segmento pixel omnia simpliciora sunt, medias rationes habet, quarum una utebamur.
//'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.');
}
Certe praeter describendi facultatem nos adiecimus mittendi arbitra- jsonem;
//ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ 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'
});
Deinceps de parte ministri fama. Backendula petitiones http accipere debet, eas cum informationis replere, exempli gratia, datas geo (gratias)
//Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΉ 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"
}
Autem, vestit nunc simpliciter convertuntur ad chordas quia Non omnes databases relativi agros repetitos sustinent. Possibile est etiam nomina campi mutare vel ea delere utentes ad libitum destinata praecepta. Permittunt tibi schema data mutare, si opus est vel unum genus in aliud emittere. Exempli gratia, si json ager filum cum indicatione temporis contineat (field_3_sub_field_1_sub_sub_field_1 ab exemplo supra), tum ut campum in datorum signo cum indicatione temporis crearet, regulam destinatam in configuratione scribere debes. Aliis verbis, notitia generis agri primo valore json determinatur, et deinde ratio regulae (si figuratur) applicatur. Notae notae 4 principales notae sunt: ββNERVUS, FLOAT64, INT64 et TIMESTAMP. Tabulae mapping et speciei praecepta mittentes sic spectant:
rules:
- "/field_1/subfield_1 -> " #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ
- "/field_2/subfield_1 -> /field_10/subfield_1" #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ»Ρ
- "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΏΠΎΠ»Ρ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°
Algorithmus ad determinandum genus notitiae:
- conversus json structuram ad plana structuram
- ad determinandum genus notitia ex agris values
- applicare mapping et generis mittentes praecepta
Inde advenientis json compages ;
{
"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"
}
}
schema de notitia habebitur;
"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
Nos etiam putavimus utentis usoris notitias in datorum partiendis vel dividendis configurare posse secundum alias normas et facultatem efficiendi ut nomen mensae constanti vel
tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'
Sed structura advenientium eventuum mutare potest tempore runtime. Algorithmum insecuti sumus ad differentiam reprimendam inter structuram mensae exsistentis et structuram eventus advenientis. Si differentia inveniatur, mensa novis agris renovabitur. Ad hoc faciendum, interrogationi SQL commissura utere:
#ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying
Architecture
Cur necesse est res tabellae rationi scribere, et non tantum directe datorum scribere? Database non semper bene faciunt cum de magnis interiectis numeris (
Patefacio fons et consilia in posterum
Aliquando, servitium coepit spectare quasi productum plenae emissarium et placuit eam aperire Source. In statu, integrationes cum Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake adimpletae sunt. All integrations support both batch and streaming modos of data loading. Adiecta subsidia petitionum per API.
Ratio integrationis hodiernae hoc modo spectat:
Etsi servitium independenter adhiberi potest (exempli gratia Docker utens), nos etiam habemus
β
β
β
Laetamur si EventNative auxilia problemata tua solve!
Tantum usores descripserunt in aliquet participare possunt.
Quid systema statistica collectio in tuo comitatu adhibetur?
-
48,0%Google Analytics12
-
4,0%Segment1
-
16,0%Alius (scribere in comment) 4
-
32,0%Impleri tuum service8
25 utentes censuerunt. 6 Utentes abstinuerunt.
Source: www.habr.com