ಪ್ರಸ್ತುತ, ಪ್ರಪಂಚದ ಪ್ರತಿಯೊಂದು ಕಂಪನಿಯು ವೆಬ್ ಸಂಪನ್ಮೂಲದಲ್ಲಿ ಬಳಕೆದಾರರ ಕ್ರಿಯೆಗಳ ಬಗ್ಗೆ ಅಂಕಿಅಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಪ್ರೇರಣೆ ಸ್ಪಷ್ಟವಾಗಿದೆ - ಕಂಪನಿಗಳು ತಮ್ಮ ಉತ್ಪನ್ನ/ವೆಬ್ಸೈಟ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುತ್ತಾರೆ ಮತ್ತು ತಮ್ಮ ಬಳಕೆದಾರರನ್ನು ಚೆನ್ನಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಬಯಸುತ್ತಾರೆ. ಸಹಜವಾಗಿ, ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಮಾರುಕಟ್ಟೆಯಲ್ಲಿ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಪರಿಕರಗಳಿವೆ - ಡ್ಯಾಶ್ಬೋರ್ಡ್ಗಳು ಮತ್ತು ಗ್ರಾಫ್ಗಳ ರೂಪದಲ್ಲಿ ಡೇಟಾವನ್ನು ಒದಗಿಸುವ ವಿಶ್ಲೇಷಣಾ ವ್ಯವಸ್ಥೆಗಳಿಂದ (ಉದಾಹರಣೆಗೆ
ಆದರೆ ಇನ್ನೂ ಪರಿಹರಿಸದ ಸಮಸ್ಯೆಯನ್ನು ನಾವು ಕಂಡುಕೊಂಡಿದ್ದೇವೆ. ಹೀಗೆ ಹುಟ್ಟಿತು
ನಾವು ನಮ್ಮದೇ ಆದ ಸೇವೆಯನ್ನು ಏಕೆ ಅಭಿವೃದ್ಧಿಪಡಿಸಬೇಕು?
ಅದು ತೊಂಬತ್ತರ ದಶಕ, ನಾವು ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮವಾಗಿ ಬದುಕಿದ್ದೇವೆ. 2019, ನಾವು API ಮೊದಲ ಗ್ರಾಹಕ ಡೇಟಾ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದ್ದೇವೆ kSense, ಇದು ಹೆಚ್ಚು ಅನುಕೂಲಕರ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ, ಅವಲಂಬನೆಗಳನ್ನು ಗುರುತಿಸುವುದು ಇತ್ಯಾದಿಗಳಿಗಾಗಿ ವಿವಿಧ ಮೂಲಗಳಿಂದ (ಫೇಸ್ಬುಕ್ ಜಾಹೀರಾತುಗಳು, ಸ್ಟ್ರೈಪ್, ಸೇಲ್ಸ್ಫೋರ್ಸ್, ಗೂಗಲ್ ಪ್ಲೇ, ಗೂಗಲ್ ಅನಾಲಿಟಿಕ್ಸ್, ಇತ್ಯಾದಿ) ಡೇಟಾವನ್ನು ಒಟ್ಟುಗೂಡಿಸಲು ಸಾಧ್ಯವಾಗಿಸಿತು. ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ನಿರ್ದಿಷ್ಟವಾಗಿ Google Analytics (ಇನ್ನು ಮುಂದೆ GA) ಗಾಗಿ ನಮ್ಮ ವೇದಿಕೆಯನ್ನು ಅನೇಕ ಬಳಕೆದಾರರು ಬಳಸುವುದನ್ನು ನಾವು ಗಮನಿಸಿದ್ದೇವೆ. ನಾವು ಕೆಲವು ಬಳಕೆದಾರರೊಂದಿಗೆ ಮಾತನಾಡಿದ್ದೇವೆ ಮತ್ತು ಅವರು GA ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ವೀಕರಿಸುವ ಅವರ ಉತ್ಪನ್ನಕ್ಕಾಗಿ ವಿಶ್ಲೇಷಣಾ ಡೇಟಾದ ಅಗತ್ಯವಿದೆ ಎಂದು ಕಂಡುಕೊಂಡಿದ್ದೇವೆ, ಆದರೆ
ಅವರು ತಮ್ಮ ವೆಬ್ ಸಂಪನ್ಮೂಲದಲ್ಲಿ ಸೆಗ್ಮೆಂಟ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪಿಕ್ಸೆಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ ಮತ್ತು ಅವರ ಬಳಕೆದಾರರ ನಡವಳಿಕೆಯ ಡೇಟಾವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಡೇಟಾಬೇಸ್ಗೆ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ (ಉದಾಹರಣೆಗೆ ಪೋಸ್ಟ್ಗ್ರೆಸ್). ಆದರೆ ವಿಭಾಗವು ಅದರ ತೊಂದರೆಯನ್ನು ಹೊಂದಿದೆ - ಬೆಲೆ. ಉದಾಹರಣೆಗೆ, ವೆಬ್ ಸಂಪನ್ಮೂಲವು 90,000 MTU (ಮಾಸಿಕ ಟ್ರ್ಯಾಕ್ ಮಾಡಿದ ಬಳಕೆದಾರರು) ಹೊಂದಿದ್ದರೆ, ನಂತರ ನೀವು ಕ್ಯಾಷಿಯರ್ಗೆ ತಿಂಗಳಿಗೆ ~ 1,000 $ ಪಾವತಿಸಬೇಕಾಗುತ್ತದೆ. ಮೂರನೇ ಸಮಸ್ಯೆಯೂ ಇತ್ತು - ಕೆಲವು ಬ್ರೌಸರ್ ವಿಸ್ತರಣೆಗಳು (ಉದಾಹರಣೆಗೆ AdBlock) ವಿಶ್ಲೇಷಣೆಗಳ ಸಂಗ್ರಹವನ್ನು ನಿರ್ಬಂಧಿಸಿವೆ ಏಕೆಂದರೆ... ಬ್ರೌಸರ್ನಿಂದ http ವಿನಂತಿಗಳನ್ನು GA ಮತ್ತು ಸೆಗ್ಮೆಂಟ್ ಡೊಮೇನ್ಗಳಿಗೆ ಕಳುಹಿಸಲಾಗಿದೆ. ನಮ್ಮ ಗ್ರಾಹಕರ ಆಶಯಗಳ ಆಧಾರದ ಮೇಲೆ, ನಾವು ಸಂಪೂರ್ಣ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವ (ಮಾದರಿ ಇಲ್ಲದೆ), ಉಚಿತ ಮತ್ತು ನಮ್ಮ ಸ್ವಂತ ಮೂಲಸೌಕರ್ಯದಲ್ಲಿ ಕೆಲಸ ಮಾಡುವ ವಿಶ್ಲೇಷಣಾ ಸೇವೆಯನ್ನು ರಚಿಸಿದ್ದೇವೆ.
ಸೇವೆ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ
ಸೇವೆಯು ಮೂರು ಭಾಗಗಳನ್ನು ಒಳಗೊಂಡಿದೆ: ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪಿಕ್ಸೆಲ್ (ನಾವು ನಂತರ ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಪುನಃ ಬರೆದಿದ್ದೇವೆ), ಸರ್ವರ್ ಭಾಗವನ್ನು GO ಭಾಷೆಯಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ ಮತ್ತು Redshift ಮತ್ತು BigQuery ಅನ್ನು ಆಂತರಿಕ ಡೇಟಾಬೇಸ್ನಂತೆ ಬಳಸಲು ಯೋಜಿಸಲಾಗಿದೆ (ನಂತರ ಅವರು ಇದಕ್ಕೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಿದರು. ಪೋಸ್ಟ್ಗ್ರೆಸ್, ಕ್ಲಿಕ್ಹೌಸ್ ಮತ್ತು ಸ್ನೋಫ್ಲೇಕ್).
GA ಮತ್ತು ಸೆಗ್ಮೆಂಟ್ ಈವೆಂಟ್ಗಳ ರಚನೆಯನ್ನು ಬದಲಾಗದೆ ಬಿಡಲು ನಿರ್ಧರಿಸಲಾಯಿತು. ಪಿಕ್ಸೆಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿದ ವೆಬ್ ಸಂಪನ್ಮೂಲದಿಂದ ನಮ್ಮ ಬ್ಯಾಕೆಂಡ್ಗೆ ಎಲ್ಲಾ ಈವೆಂಟ್ಗಳನ್ನು ನಕಲು ಮಾಡುವುದು ಬೇಕಾಗಿರುವುದು. ಅದು ಬದಲಾದಂತೆ, ಇದನ್ನು ಮಾಡಲು ಕಷ್ಟವೇನಲ್ಲ. 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);
});
});
}
ಸೆಗ್ಮೆಂಟ್ ಪಿಕ್ಸೆಲ್ನೊಂದಿಗೆ ಎಲ್ಲವೂ ಸರಳವಾಗಿದೆ; ಇದು ಮಿಡಲ್ವೇರ್ ವಿಧಾನಗಳನ್ನು ಹೊಂದಿದೆ, ಅವುಗಳಲ್ಲಿ ಒಂದನ್ನು ನಾವು ಬಳಸಿದ್ದೇವೆ.
//'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 ಕ್ಷೇತ್ರವು ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ನೊಂದಿಗೆ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಹೊಂದಿದ್ದರೆ (ಕ್ಷೇತ್ರ_3_ಉಪ_ಕ್ಷೇತ್ರ_1_ಉಪ_ಉಪ_ಕ್ಷೇತ್ರ_1 ಮೇಲಿನ ಉದಾಹರಣೆಯಿಂದ), ನಂತರ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಪ್ರಕಾರದೊಂದಿಗೆ ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಕ್ಷೇತ್ರವನ್ನು ರಚಿಸಲು, ನೀವು ಕಾನ್ಫಿಗರೇಶನ್ನಲ್ಲಿ ಮ್ಯಾಪಿಂಗ್ ನಿಯಮವನ್ನು ಬರೆಯಬೇಕಾಗುತ್ತದೆ. ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಹೇಳುವುದಾದರೆ, ಕ್ಷೇತ್ರದ ಡೇಟಾ ಪ್ರಕಾರವನ್ನು ಮೊದಲು json ಮೌಲ್ಯದಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಂತರ ಟೈಪ್ ಕ್ಯಾಸ್ಟಿಂಗ್ ನಿಯಮವನ್ನು (ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ್ದರೆ) ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಾವು 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 ಮೂಲಕ ವಿನಂತಿಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
ಪ್ರಸ್ತುತ ಏಕೀಕರಣ ಯೋಜನೆಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:
ಸೇವೆಯನ್ನು ಸ್ವತಂತ್ರವಾಗಿ ಬಳಸಬಹುದಾದರೂ (ಉದಾಹರಣೆಗೆ ಡಾಕರ್ ಅನ್ನು ಬಳಸುವುದು), ನಾವು ಸಹ ಹೊಂದಿದ್ದೇವೆ
ನಿಮ್ಮ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು EventNative ಸಹಾಯ ಮಾಡಿದರೆ ನಾವು ಸಂತೋಷಪಡುತ್ತೇವೆ!
ನೋಂದಾಯಿತ ಬಳಕೆದಾರರು ಮಾತ್ರ ಸಮೀಕ್ಷೆಯಲ್ಲಿ ಭಾಗವಹಿಸಬಹುದು.
ನಿಮ್ಮ ಕಂಪನಿಯಲ್ಲಿ ಯಾವ ಅಂಕಿಅಂಶ ಸಂಗ್ರಹ ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ?
-
48,0%Google Analytics12
-
4,0%ವಿಭಾಗ 1
-
16,0%ಇನ್ನೊಂದು (ಕಾಮೆಂಟ್ಗಳಲ್ಲಿ ಬರೆಯಿರಿ) 4
-
32,0%ನಿಮ್ಮ ಸೇವೆಯನ್ನು ಜಾರಿಗೊಳಿಸಲಾಗಿದೆ8
25 ಬಳಕೆದಾರರು ಮತ ಹಾಕಿದ್ದಾರೆ. 6 ಬಳಕೆದಾರರು ದೂರ ಉಳಿದಿದ್ದಾರೆ.
ಮೂಲ: www.habr.com