בניית אנליטיקת ווב עם ClickHouse: סכמה, שאילתות, אינטגרציה

כאשר מספר האירועים באפליקציית אינטרנט גדל מדי, שאילתות אנליטיות מתחילות להאט ודוחות לוקחים דקות להפקה. אנו מגדירים את ClickHouse לצרכים שלך: אנו מתכננים את ה-schema, מייעלים שאילתות ומספקים פתרון turnkey. הצוות שלנו מטפל בכל המחזור מביקורת ועד תמיכה, כך שאתה מקבל תוצאות מהירות ואמינות ללא החמצת מועדים.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
בניית אנליטיקת ווב עם ClickHouse: סכמה, שאילתות, אינטגרציה
מורכב
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

מדריך זה מכסה את ההגדרה המלאה של ClickHouse לניתוח נתוני יישומי אינטרנט. כאשר יישום האינטרנט שלך מייצר מעל 100 מיליון אירועים, PostgreSQL מתחיל להחזיר תוצאות תוך דקות. ראינו זאת פעמים רבות: לקוח מבקש דוח DAU על פני 90 יום מפולח לפי מקורות, והשאילתה נתקעת למשך 40 שניות. ClickHouse הוא מסד נתונים OLAP חזק המיועד לניתוח בזמן אמת. הוא מעבד מיליארדי שורות בשניות. הניסיון שלנו ביישום ClickHouse ביותר מ-10 פרויקטים במשך 5 שנים מראה האצה עקבית של פי 10–100. עבור שאילתות אנליטיות מתקדמות כמו DAU, ClickHouse מהיר פי 100 מ-PostgreSQL. ClickHouse אינו מחליף מסדי נתונים טרנזקציוניים—הוא משלים אותם: PostgreSQL לנתונים תפעוליים, ClickHouse לניתוח. עבור פרויקט בגודל בינוני טיפוסי, מעבר ל-ClickHouse יכול לחסוך $30,000–$50,000 בשנה בעלויות תשתית. אנו מבטיחים: לאחר כוונון, תשכחו מהגדרות זמן קצובות.

ClickHouse חוסך פי 5–10 בעלויות שרתים; לדוגמה, לקוח אחד חסך $50,000 בשנה.

מדריך זה מכסה הגדרת ClickHouse, ניתוח נתוני יישומי אינטרנט, עיצוב סכימת טבלאות ClickHouse, מנוע MergeTree, שאילתות אנליטיות ב-ClickHouse, תצוגות מהותיות (Materialized Views), אינטגרציית Laravel עם ClickHouse, לקוח Node.js ל-ClickHouse, יכולות מסד נתונים OLAP, האצת שאילתות, צבירת נתונים, ושכפול ClickHouse.

מה הופך את ClickHouse לאידיאלי לניתוח נתוני יישומי אינטרנט?

ClickHouse משתמש באחסון עמודי: הנתונים של כל עמודה מאוחסנים בנפרד—השאילתה קוראת רק את העמודות הנדרשות. עיבוד וקטורי מאפשר למעבד לפעול על קבוצות ערכים במקום על שורות בודדות. נתונים דומים נדחסים פי 5–10 ביעילות רבה יותר מאשר ב-PostgreSQL. ClickHouse מציע מנועי טבלאות ייעודיים כמו MergeTree המייעלים אחסון ושאילתות לתרחישים אנליטיים.

MergeTree: מבנה ואופטימיזציה

MergeTree הוא מנוע ה-ClickHouse הראשי. הוא ממיין נתונים לפי מפתח ORDER BY ומפצל לגרגירים של 8192 שורות. בעת שאילתה, ClickHouse חותך גרגירים שלמים על סמך האינדקס הראשי ואינדקסים נוספים כמו bloom_filter. זה מספק חיתוך ברמת בלוק, ומפחית משמעותית את כמות הנתונים הנסרקים.

כיצד לתכנן סכימת טבלה יעילה עבור ClickHouse?

CREATE TABLE events (
    event_date Date,
    event_time DateTime,
    event_type LowCardinality(String),
    user_id UInt64,
    session_id String,
    tenant_id UInt32,
    page_url String,
    referrer String,
    country LowCardinality(String),
    device_type LowCardinality(String),
    properties String
) ENGINE = MergeTree()
ORDER BY (tenant_id, event_date, event_type, user_id)
PARTITION BY toYYYYMM(event_date);
ALTER TABLE events ADD INDEX idx_session session_id TYPE bloom_filter(0.01) GRANULARITY 4;

ORDER BY הוא מפתח המיון שלפיו ClickHouse מאחסן נתונים. שאילתות עם מסננים על tenant_id ו-event_date משתמשות בו לחיתוך. LowCardinality הוא אופטימיזציה לעמודות עם מספר קטן של ערכים ייחודיים (~10k)—מאוחסן כקידוד מילון.

הכנסת נתונים יעילה ב-ClickHouse

ClickHouse מותאם להכנסות אצווה. השתמשו ב-buffering כמו בדוגמה למטה.

import { createClient } from '@clickhouse/client';
const client = createClient({
  host: process.env.CLICKHOUSE_HOST,
  username: process.env.CLICKHOUSE_USER,
  password: process.env.CLICKHOUSE_PASSWORD,
  database: 'analytics',
});

class EventBuffer {
  private buffer: EventRow[] = [];
  private flushTimer: NodeJS.Timeout;

  async push(event: EventRow) {
    this.buffer.push(event);
    if (this.buffer.length >= 1000) await this.flush();
  }

  async flush() {
    if (!this.buffer.length) return;
    const rows = [...this.buffer];
    this.buffer = [];
    await client.insert({
      table: 'events',
      values: rows,
      format: 'JSONEachRow',
    });
  }
}

לעולם אל תכניסו שורה אחר שורה—לעומסים גבוהים, השתמשו ב-Kafka Engine.

האצת שאילתות

הנה דוגמאות לשאילתות אנליטיות שמתבצעות בשניות על 100 מיליון שורות.

-- DAU за 90 дней
SELECT event_date, uniqExact(user_id) AS dau
FROM events
WHERE tenant_id = 42
  AND event_date >= today() - 90
  AND event_type = 'pageview'
GROUP BY event_date
ORDER BY event_date;

-- Воронка конверсии
SELECT
  countIf(event_type = 'product_view') AS views,
  countIf(event_type = 'add_to_cart') AS cart,
  countIf(event_type = 'checkout_start') AS checkout,
  countIf(event_type = 'purchase') AS purchases,
  round(100.0 * purchases / views, 2) AS conversion_pct
FROM events
WHERE tenant_id = 42
  AND event_date BETWEEN '2024-01-01' AND '2024-01-31';

uniqExact נותן ספירה ייחודית מדויקת. uniq הוא משוער (~2% שגיאה) אבל מהיר בסדר גודל.

השוואת ביצועים: PostgreSQL לעומת ClickHouse

ClickHouse לעומת PostgreSQL ביצועים
שאילתה PostgreSQL (100M שורות) ClickHouse (100M שורות) האצה
DAU על פני 90 יום 42 שניות 0.4 שניות ~פי 100
משפך המרה על פני רבעון 18 שניות 0.2 שניות ~פי 90
ניתוח קבוצות (Cohort) 35 שניות 0.6 שניות ~פי 58

תצוגות מהותיות: צבירה מוקדמת אוטומטית

CREATE MATERIALIZED VIEW daily_metrics
ENGINE = SummingMergeTree()
ORDER BY (tenant_id, event_date, country, device_type)
AS SELECT
    tenant_id,
    event_date,
    country,
    device_type,
    count() AS events_count,
    uniqState(user_id) AS unique_users_state,
    uniqState(session_id) AS unique_sessions_state
FROM events
GROUP BY tenant_id, event_date, country, device_type;

SELECT
    event_date,
    sum(events_count) AS total_events,
    uniqMerge(unique_users_state) AS unique_users
FROM daily_metrics
WHERE tenant_id = 42 AND event_date >= today() - 7
GROUP BY event_date;

תצוגות מהותיות מתעדכנות אוטומטית בעת הכנסה ומאחסנות מדדים מצטברים מראש. זה מאיץ דוחות טיפוסיים בעשרות מונים.

אינטגרציה ותפעול

אינטגרציה עם Laravel ו-Node.js

לאינטגרציית Laravel עם ClickHouse, השתמשו בחבילה sanchov/laravel-clickhouse. הוסיפו חיבור clickhouse ב-config/database.php ושאילתה כמו: CREATE TABLE events ( event_date Date, event_time DateTime, event_type LowCardinality(String), user_id UInt64, session_id String, tenant_id UInt32, page_url String, referrer String, country LowCardinality(String), device_type LowCardinality(String), properties String ) ENGINE = MergeTree() ORDER BY (tenant_id, event_date, event_type, user_id) PARTITION BY toYYYYMM(event_date); ALTER TABLE events ADD INDEX idx_session session_id TYPE bloom_filter(0.01) GRANULARITY 4; . לקוח ה-Node.js הרשמי של ClickHouse הוא @clickhouse/client, שבו השתמשנו בדוגמה למעלה.

שכפול ו-TTL

CREATE TABLE events ON CLUSTER analytics_cluster (
    ...
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/events', '{replica}')
ORDER BY (tenant_id, event_date, event_type, user_id)
PARTITION BY toYYYYMM(event_date)
TTL event_date + INTERVAL 2 YEAR DELETE;

TTL מוחק אוטומטית נתונים ישנים משנתיים. לצורך עמידה ברגולציה, ניתן להגדיר העברה לאחסון קר.

טעויות נפוצות והתהליך שלנו

טעויות נפוצות

הטעות השכיחה ביותר היא ניסיון להכניס נתונים שורה אחר שורה. ClickHouse אינו מיועד להכנסות טרנזקציוניות. השנייה היא בחירת מפתח מיון ORDER BY שגוי. אם אתם מסננים לפי user_id ו-event_date, סדר ORDER BY צריך להתאים לתדירות הסינון. השלישית היא שכחת תצוגות מהותיות לדוחות טיפוסיים, מה שמוביל לסריקות טבלה מלאות.

מה כלול בעבודה שלנו

  1. ניתוח מודל הנתונים והמדדים הנוכחיים
  2. עיצוב סכימת אירועים + תצוגות מהותיות
  3. הגדרת שכפול ו-TTL
  4. קוד אינטגרציה ל-Laravel או Node.js
  5. תיעוד סכימה ושאילתות
  6. הדרכת צוות (1–2 שעות)
  7. חודש תמיכה לאחר היישום

שלבים ולוחות זמנים

שלב לוח זמנים עלות
סכימת אירועים + תצוגות מהותיות + אינטגרציית Laravel 1–2 שבועות בהתאמה אישית
ניתוח קבוצות, שימור, שכפול, Kafka Engine 2–4 שבועות בהתאמה אישית

הזמינו ביקורת של סכימת הניתוח הנוכחית שלכם—המהנדס שלנו עם 10 שנות ניסיון ינתח צווארי בקבוק. לדיון בפרטים, צרו קשר דרך טופס האתר. החזר ההשקעה של הפרויקט הוא 3–6 חודשים הודות לחיסכון בעלויות תשתית.

תיעוד רשמי של ClickHouse