ನಮ್ಮ ಓಪನ್ ಸೋರ್ಸ್‌ನ ಇತಿಹಾಸ: ನಾವು Go ನಲ್ಲಿ ಅನಾಲಿಟಿಕ್ಸ್ ಸೇವೆಯನ್ನು ಹೇಗೆ ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ಅದನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಿದೆವು

ಪ್ರಸ್ತುತ, ಪ್ರಪಂಚದ ಪ್ರತಿಯೊಂದು ಕಂಪನಿಯು ವೆಬ್ ಸಂಪನ್ಮೂಲದಲ್ಲಿ ಬಳಕೆದಾರರ ಕ್ರಿಯೆಗಳ ಬಗ್ಗೆ ಅಂಕಿಅಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಪ್ರೇರಣೆ ಸ್ಪಷ್ಟವಾಗಿದೆ - ಕಂಪನಿಗಳು ತಮ್ಮ ಉತ್ಪನ್ನ/ವೆಬ್‌ಸೈಟ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುತ್ತಾರೆ ಮತ್ತು ತಮ್ಮ ಬಳಕೆದಾರರನ್ನು ಚೆನ್ನಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಬಯಸುತ್ತಾರೆ. ಸಹಜವಾಗಿ, ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಮಾರುಕಟ್ಟೆಯಲ್ಲಿ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಪರಿಕರಗಳಿವೆ - ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳು ಮತ್ತು ಗ್ರಾಫ್‌ಗಳ ರೂಪದಲ್ಲಿ ಡೇಟಾವನ್ನು ಒದಗಿಸುವ ವಿಶ್ಲೇಷಣಾ ವ್ಯವಸ್ಥೆಗಳಿಂದ (ಉದಾಹರಣೆಗೆ ಗೂಗಲ್ ಅನಾಲಿಟಿಕ್ಸ್) ಗ್ರಾಹಕ ಡೇಟಾ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗೆ, ಯಾವುದೇ ಗೋದಾಮಿನಲ್ಲಿ ವಿವಿಧ ಮೂಲಗಳಿಂದ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ಒಟ್ಟುಗೂಡಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ (ಉದಾಹರಣೆಗೆ ಸೆಗ್ಮೆಂಟ್).

ಆದರೆ ಇನ್ನೂ ಪರಿಹರಿಸದ ಸಮಸ್ಯೆಯನ್ನು ನಾವು ಕಂಡುಕೊಂಡಿದ್ದೇವೆ. ಹೀಗೆ ಹುಟ್ಟಿತು EventNative - ಓಪನ್ ಸೋರ್ಸ್ ಅನಾಲಿಟಿಕ್ಸ್ ಸೇವೆ. ನಮ್ಮದೇ ಆದ ಸೇವೆಯನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ನಾವು ಏಕೆ ನಿರ್ಧರಿಸಿದ್ದೇವೆ, ಅದು ನಮಗೆ ಏನು ನೀಡಿದೆ ಮತ್ತು ಅಂತಿಮ ಫಲಿತಾಂಶ ಏನು (ಕೋಡ್ ತುಣುಕುಗಳೊಂದಿಗೆ) ಬಗ್ಗೆ ಓದಿ.

ನಮ್ಮ ಓಪನ್ ಸೋರ್ಸ್‌ನ ಇತಿಹಾಸ: ನಾವು Go ನಲ್ಲಿ ಅನಾಲಿಟಿಕ್ಸ್ ಸೇವೆಯನ್ನು ಹೇಗೆ ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ಅದನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಿದೆವು

ನಾವು ನಮ್ಮದೇ ಆದ ಸೇವೆಯನ್ನು ಏಕೆ ಅಭಿವೃದ್ಧಿಪಡಿಸಬೇಕು?

ಅದು ತೊಂಬತ್ತರ ದಶಕ, ನಾವು ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮವಾಗಿ ಬದುಕಿದ್ದೇವೆ. 2019, ನಾವು API ಮೊದಲ ಗ್ರಾಹಕ ಡೇಟಾ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದ್ದೇವೆ kSense, ಇದು ಹೆಚ್ಚು ಅನುಕೂಲಕರ ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ, ಅವಲಂಬನೆಗಳನ್ನು ಗುರುತಿಸುವುದು ಇತ್ಯಾದಿಗಳಿಗಾಗಿ ವಿವಿಧ ಮೂಲಗಳಿಂದ (ಫೇಸ್‌ಬುಕ್ ಜಾಹೀರಾತುಗಳು, ಸ್ಟ್ರೈಪ್, ಸೇಲ್ಸ್‌ಫೋರ್ಸ್, ಗೂಗಲ್ ಪ್ಲೇ, ಗೂಗಲ್ ಅನಾಲಿಟಿಕ್ಸ್, ಇತ್ಯಾದಿ) ಡೇಟಾವನ್ನು ಒಟ್ಟುಗೂಡಿಸಲು ಸಾಧ್ಯವಾಗಿಸಿತು. ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ ನಿರ್ದಿಷ್ಟವಾಗಿ Google Analytics (ಇನ್ನು ಮುಂದೆ GA) ಗಾಗಿ ನಮ್ಮ ವೇದಿಕೆಯನ್ನು ಅನೇಕ ಬಳಕೆದಾರರು ಬಳಸುವುದನ್ನು ನಾವು ಗಮನಿಸಿದ್ದೇವೆ. ನಾವು ಕೆಲವು ಬಳಕೆದಾರರೊಂದಿಗೆ ಮಾತನಾಡಿದ್ದೇವೆ ಮತ್ತು ಅವರು GA ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ವೀಕರಿಸುವ ಅವರ ಉತ್ಪನ್ನಕ್ಕಾಗಿ ವಿಶ್ಲೇಷಣಾ ಡೇಟಾದ ಅಗತ್ಯವಿದೆ ಎಂದು ಕಂಡುಕೊಂಡಿದ್ದೇವೆ, ಆದರೆ Google ಮಾದರಿಗಳ ಡೇಟಾ ಮತ್ತು ಅನೇಕರಿಗೆ, GA ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಅನುಕೂಲತೆಯ ಮಾನದಂಡವಲ್ಲ. ನಾವು ನಮ್ಮ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಾಕಷ್ಟು ಸಂಭಾಷಣೆಗಳನ್ನು ನಡೆಸಿದ್ದೇವೆ ಮತ್ತು ಅನೇಕರು ಸೆಗ್ಮೆಂಟ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಅನ್ನು ಸಹ ಬಳಸುತ್ತಿದ್ದಾರೆ ಎಂದು ಅರಿತುಕೊಂಡಿದ್ದೇವೆ (ಇದು ಹಿಂದಿನ ದಿನವಾಗಿತ್ತು $3.2 ಶತಕೋಟಿಗೆ ಮಾರಾಟವಾಯಿತು).

ಅವರು ತಮ್ಮ ವೆಬ್ ಸಂಪನ್ಮೂಲದಲ್ಲಿ ಸೆಗ್ಮೆಂಟ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪಿಕ್ಸೆಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ ಮತ್ತು ಅವರ ಬಳಕೆದಾರರ ನಡವಳಿಕೆಯ ಡೇಟಾವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಡೇಟಾಬೇಸ್‌ಗೆ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ (ಉದಾಹರಣೆಗೆ ಪೋಸ್ಟ್‌ಗ್ರೆಸ್). ಆದರೆ ವಿಭಾಗವು ಅದರ ತೊಂದರೆಯನ್ನು ಹೊಂದಿದೆ - ಬೆಲೆ. ಉದಾಹರಣೆಗೆ, ವೆಬ್ ಸಂಪನ್ಮೂಲವು 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 ಈವೆಂಟ್‌ನ ರಚನೆಯ ಆಧಾರದ ಮೇಲೆ ಡೇಟಾ ಸ್ಕೀಮಾವನ್ನು ನಿರ್ಧರಿಸುವ ಕಾರ್ಯವನ್ನು ನಾವು ಕಾರ್ಯಗತಗೊಳಿಸಿದ್ದೇವೆ. ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಮೌಲ್ಯಗಳಿಂದ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ನೆಸ್ಟೆಡ್ ವಸ್ತುಗಳನ್ನು ಕೊಳೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಸಮತಟ್ಟಾದ ರಚನೆಗೆ ಇಳಿಸಲಾಗುತ್ತದೆ:

//входящий 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

ಬಳಕೆದಾರನು ಇತರ ಮಾನದಂಡಗಳ ಪ್ರಕಾರ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ವಿಭಜನೆ ಅಥವಾ ಡೇಟಾವನ್ನು ವಿಭಜಿಸಲು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ ಎಂದು ನಾವು ಭಾವಿಸಿದ್ದೇವೆ ಮತ್ತು ಟೇಬಲ್ ಹೆಸರನ್ನು ಸ್ಥಿರವಾಗಿ ಹೊಂದಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿದ್ದೇವೆ ಅಥವಾ ಅಭಿವ್ಯಕ್ತಿ ಸಂರಚನೆಯಲ್ಲಿ. ಕೆಳಗಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಉತ್ಪನ್ನ_ಪ್ರಕಾರ ಮತ್ತು _ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್ ಕ್ಷೇತ್ರಗಳ ಮೌಲ್ಯಗಳ ಆಧಾರದ ಮೇಲೆ ಲೆಕ್ಕಹಾಕಿದ ಹೆಸರಿನೊಂದಿಗೆ ಈವೆಂಟ್ ಅನ್ನು ಟೇಬಲ್‌ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ (ಉದಾಹರಣೆಗೆ ಸರಬರಾಜು_2020_10):

tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'

ಆದಾಗ್ಯೂ, ಒಳಬರುವ ಈವೆಂಟ್‌ಗಳ ರಚನೆಯು ರನ್‌ಟೈಮ್‌ನಲ್ಲಿ ಬದಲಾಗಬಹುದು. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಟೇಬಲ್‌ನ ರಚನೆ ಮತ್ತು ಒಳಬರುವ ಈವೆಂಟ್‌ನ ರಚನೆಯ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಪರಿಶೀಲಿಸಲು ನಾವು ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಅಳವಡಿಸಿದ್ದೇವೆ. ವ್ಯತ್ಯಾಸ ಕಂಡುಬಂದರೆ, ಹೊಸ ಕ್ಷೇತ್ರಗಳೊಂದಿಗೆ ಟೇಬಲ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತದೆ. ಇದನ್ನು ಮಾಡಲು, ಪ್ಯಾಚ್ SQL ಪ್ರಶ್ನೆಯನ್ನು ಬಳಸಿ:

#Пример для Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying

ವಾಸ್ತುಶಿಲ್ಪ

ನಮ್ಮ ಓಪನ್ ಸೋರ್ಸ್‌ನ ಇತಿಹಾಸ: ನಾವು Go ನಲ್ಲಿ ಅನಾಲಿಟಿಕ್ಸ್ ಸೇವೆಯನ್ನು ಹೇಗೆ ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ಅದನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಿದೆವು

ನೀವು ಫೈಲ್ ಸಿಸ್ಟಮ್‌ಗೆ ಈವೆಂಟ್‌ಗಳನ್ನು ಏಕೆ ಬರೆಯಬೇಕು ಮತ್ತು ಅವುಗಳನ್ನು ನೇರವಾಗಿ ಡೇಟಾಬೇಸ್‌ಗೆ ಬರೆಯಬಾರದು? ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಒಳಸೇರಿಸುವಿಕೆಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ ಡೇಟಾಬೇಸ್‌ಗಳು ಯಾವಾಗಲೂ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ (Postgres ಶಿಫಾರಸುಗಳು) ಇದನ್ನು ಮಾಡಲು, ಲಾಗರ್ ಒಳಬರುವ ಈವೆಂಟ್‌ಗಳನ್ನು ಫೈಲ್‌ಗೆ ಬರೆಯುತ್ತದೆ ಮತ್ತು ಪ್ರತ್ಯೇಕ ಗೊರೂಟಿನ್ (ಥ್ರೆಡ್) ಫೈಲ್ ರೀಡರ್ ಫೈಲ್ ಅನ್ನು ಓದುತ್ತದೆ, ನಂತರ ಡೇಟಾವನ್ನು ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ. ಟೇಬಲ್ ಸ್ಕೀಮಾವು ನವೀಕೃತವಾಗಿದೆ ಎಂದು ಟೇಬಲ್ ಮ್ಯಾನೇಜರ್ ಖಚಿತಪಡಿಸಿದ ನಂತರ, ಡೇಟಾವನ್ನು ಒಂದು ಬ್ಯಾಚ್‌ನಲ್ಲಿ ಡೇಟಾಬೇಸ್‌ಗೆ ಬರೆಯಲಾಗುತ್ತದೆ. ತರುವಾಯ, ನಾವು ಡೇಟಾವನ್ನು ನೇರವಾಗಿ ಡೇಟಾಬೇಸ್‌ಗೆ ಬರೆಯುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಿದ್ದೇವೆ, ಆದರೆ ನಾವು ಈ ಮೋಡ್ ಅನ್ನು ಹಲವಾರು ಅಲ್ಲದ ಈವೆಂಟ್‌ಗಳಿಗಾಗಿ ಬಳಸುತ್ತೇವೆ - ಉದಾಹರಣೆಗೆ, ಪರಿವರ್ತನೆಗಳು.

ತೆರೆದ ಮೂಲ ಮತ್ತು ಭವಿಷ್ಯದ ಯೋಜನೆಗಳು

ಕೆಲವು ಹಂತದಲ್ಲಿ, ಸೇವೆಯು ಪೂರ್ಣ ಪ್ರಮಾಣದ ಉತ್ಪನ್ನದಂತೆ ಕಾಣಲಾರಂಭಿಸಿತು ಮತ್ತು ನಾವು ಅದನ್ನು ಮುಕ್ತ ಮೂಲಕ್ಕೆ ಬಿಡುಗಡೆ ಮಾಡಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ. ಪ್ರಸ್ತುತ, Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake ಜೊತೆಗಿನ ಏಕೀಕರಣಗಳನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ. ಎಲ್ಲಾ ಸಂಯೋಜನೆಗಳು ಡೇಟಾ ಲೋಡಿಂಗ್‌ನ ಬ್ಯಾಚ್ ಮತ್ತು ಸ್ಟ್ರೀಮಿಂಗ್ ಮೋಡ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತವೆ. API ಮೂಲಕ ವಿನಂತಿಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.

ಪ್ರಸ್ತುತ ಏಕೀಕರಣ ಯೋಜನೆಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

ನಮ್ಮ ಓಪನ್ ಸೋರ್ಸ್‌ನ ಇತಿಹಾಸ: ನಾವು Go ನಲ್ಲಿ ಅನಾಲಿಟಿಕ್ಸ್ ಸೇವೆಯನ್ನು ಹೇಗೆ ಮಾಡಿದ್ದೇವೆ ಮತ್ತು ಅದನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಿದೆವು

ಸೇವೆಯನ್ನು ಸ್ವತಂತ್ರವಾಗಿ ಬಳಸಬಹುದಾದರೂ (ಉದಾಹರಣೆಗೆ ಡಾಕರ್ ಅನ್ನು ಬಳಸುವುದು), ನಾವು ಸಹ ಹೊಂದಿದ್ದೇವೆ ಹೋಸ್ಟ್ ಮಾಡಿದ ಆವೃತ್ತಿ, ಇದರಲ್ಲಿ ನೀವು ಡೇಟಾ ವೇರ್‌ಹೌಸ್‌ನೊಂದಿಗೆ ಏಕೀಕರಣವನ್ನು ಹೊಂದಿಸಬಹುದು, ನಿಮ್ಮ ಡೊಮೇನ್‌ಗೆ CNAME ಅನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಈವೆಂಟ್‌ಗಳ ಸಂಖ್ಯೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ವೀಕ್ಷಿಸಿ. ವೆಬ್ ಸಂಪನ್ಮೂಲದಿಂದ ಅಂಕಿಅಂಶಗಳನ್ನು ಮಾತ್ರವಲ್ಲದೆ ಬಾಹ್ಯ ಡೇಟಾ ಮೂಲಗಳಿಂದ ಡೇಟಾವನ್ನು ಒಟ್ಟುಗೂಡಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸುವುದು ಮತ್ತು ನಿಮ್ಮ ಆಯ್ಕೆಯ ಯಾವುದೇ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಅವುಗಳನ್ನು ಉಳಿಸುವುದು ನಮ್ಮ ತಕ್ಷಣದ ಯೋಜನೆಗಳು!

→ GitHub
→ ದಾಖಲೆ
→ ಸಡಿಲ

ನಿಮ್ಮ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು EventNative ಸಹಾಯ ಮಾಡಿದರೆ ನಾವು ಸಂತೋಷಪಡುತ್ತೇವೆ!

ನೋಂದಾಯಿತ ಬಳಕೆದಾರರು ಮಾತ್ರ ಸಮೀಕ್ಷೆಯಲ್ಲಿ ಭಾಗವಹಿಸಬಹುದು. ಸೈನ್ ಇನ್ ಮಾಡಿ, ದಯವಿಟ್ಟು.

ನಿಮ್ಮ ಕಂಪನಿಯಲ್ಲಿ ಯಾವ ಅಂಕಿಅಂಶ ಸಂಗ್ರಹ ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ?

  • 48,0%Google Analytics12

  • 4,0%ವಿಭಾಗ 1

  • 16,0%ಇನ್ನೊಂದು (ಕಾಮೆಂಟ್‌ಗಳಲ್ಲಿ ಬರೆಯಿರಿ) 4

  • 32,0%ನಿಮ್ಮ ಸೇವೆಯನ್ನು ಜಾರಿಗೊಳಿಸಲಾಗಿದೆ8

25 ಬಳಕೆದಾರರು ಮತ ಹಾಕಿದ್ದಾರೆ. 6 ಬಳಕೆದಾರರು ದೂರ ಉಳಿದಿದ್ದಾರೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ