אחסון יעיל של נתוני סדרות זמן לקריפטו: TimescaleDB מול ClickHouse

נתונים גולמיים מבלוקצ'יין או מבורסות - נתוני קריפטו - מצטברים במהירות - עשרות גיגה-בייט ביום עבור מקורות שמנותחים באופן פעיל. פרויקט ניתוח נתונים טיפוסי: ניתוח 5000 ארנקים כל 10 שניות מביא ל-43 מיליון שורות ביום. לאחר שישה חודשים, הנפח מגיע ל-7.8 מיליארד שורות. אחסון זה

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

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

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1005
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1270
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    719
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1011

נתונים גולמיים מבלוקצ'יין או מבורסות—נתוני קריפטו—מצטברים במהירות—עשרות גיגה-בייט ביום עבור מקורות שמנותחים באופן פעיל. פרויקט ניתוח נתונים טיפוסי: ניתוח 5000 ארנקים כל 10 שניות מביא ל-43 מיליון שורות ביום. לאחר שישה חודשים, הנפח מגיע ל-7.8 מיליארד שורות. אחסון זה ב-PostgreSQL רגיל בטבלה אחת מוביל להידרדרות בביצועי השאילתות תוך מספר חודשים. אנו מתמחים בתכנון מערכות אחסון לנתוני סדרות זמן קריפטו על TimescaleDB או ClickHouse המותאמות לדפוסי שאילתות ונפחים ספציפיים. הבחירה בין מסדי נתונים אלה היא פרקטית, לא דתית. עלות האחסון לאחר דחיסה יורדת ב-80%, וחוסכת עד $3,000 לטרה-בייט בחודש. השאילתות מואצות פי 50 בממוצע. הלקוחות שלנו נתקלים לעיתים קרובות בגידול בנפח לאחר שלושה חודשי פעילות: שאילתות מתחילות לקחת עשרות שניות, עלות האחסון עולה. אנו מציעים ארכיטקטורה שמתרחבת לינארית—הוספת צמתים חדשים ללא השבתה. אמינים על ידי 100+ לקוחות, 5+ שנים בהנדסת נתונים, 50+ פטה-בייט מנוהלים. קבלו ייעוץ לבחירת מערכת ניהול מסדי נתונים (DBMS) המתאימה לנתונים שלכם.

בחירה בין TimescaleDB ל-ClickHouse

TimescaleDB היא הרחבה של PostgreSQL. היא מוסיפה hypertables (חלוקה אוטומטית לפי זמן), continuous aggregates (תצוגות חומריות מצטברות), ודחיסה ביחס של 10-20x. אתם נשארים בסביבת PostgreSQL: SQL סטנדרטי, עסקאות ACID, JOINs עם טבלאות רגילות, וכלים מוכרים.

ClickHouse היא מסד נתונים עמודי OLAP. הנתונים מאוחסנים לפי עמודות, מה שמספק יתרון עצום באגרגציות על תת-קבוצה של עמודות. מהירות GROUP BY ו-SUM על מיליארדי שורות גבוהה פי 10-100 מ-PostgreSQL. נקודות חולשה: אין עסקאות, UPDATE/DELETE הן פעולות יקרות, JOIN עובד אחרת.

קריטריון TimescaleDB ClickHouse
דפוס שאילתות JOINs מורכבים, שילוב OLTP+OLAP אנליטיקה, אגרגציות על טווחים גדולים
כתיבה INSERT בעסקאות, UPSERT הכנסה בקבוצות, דדופליקציה בסופו של דבר
קריאה נקודתית מהירה (אינדקסי B-tree) איטית יותר (אין קריאות נקודתיות יעילות)
אנליטיקה טובה מהירה בהרבה (פי 10-100)
עדכונים UPDATE סטנדרטי יקר (ReplacingMergeTree)
מורכבות תפעולית בינונית גבוהה יותר
נפח נתונים עד ~1TB ביעילות יעיל מ-100GB+

המלצה לניתוח נתוני on-chain:

  • TimescaleDB — אם הנתונים נדרשים ללוגיקת מוצר (יתרות, פוזיציות, חשבונות), יש JOINs עם נתונים רלציוניים, ונדרשות ערבויות ACID.
  • ClickHouse — אם מדובר בצינור אנליטי (אותות מסחר, סטטיסטיקות מצטברות, ניתוח היסטורי), שאילתות עובדות עם טווחי תאריכים גדולים.

בייצור, אנו משלבים לעיתים קרובות: TimescaleDB לנתונים חמים/תפעוליים + ClickHouse למחסן אנליטי. שילוב זה נותן חיסכון של עד 90% באחסון נתונים קרים. קבלו ייעוץ—נעזור לכם לבחור את מערכת ניהול מסדי הנתונים האופטימלית.

כיצד להגדיר דחיסה ב-TimescaleDB

הרעיון הבסיסי: טבלת PostgreSQL רגילה הופכת ל-hypertable—מתחת למכסה המנוע נוצרים chunks (מחיצות) לאורך ממד הזמן. כל chunk הוא קובץ נפרד; chunks ישנים יכולים להידחס או להועבר לארכיון.

CREATE TABLE trades ( time TIMESTAMPTZ NOT NULL, exchange TEXT NOT NULL, symbol TEXT NOT NULL, price NUMERIC(20, 8) NOT NULL, volume NUMERIC(20, 8) NOT NULL, side CHAR(4) NOT NULL ); SELECT create_hypertable('trades', 'time', chunk_time_interval => INTERVAL '1 day'); CREATE INDEX ON trades (symbol, time DESC); 

Continuous aggregates מחליפים GROUP BY יקר בזמן אמת בתצוגות חומריות מצטברות. כעת השאילתה CREATE TABLE trades ( time TIMESTAMPTZ NOT NULL, exchange TEXT NOT NULL, symbol TEXT NOT NULL, price NUMERIC(20, 8) NOT NULL, volume NUMERIC(20, 8) NOT NULL, side CHAR(4) NOT NULL ); SELECT create_hypertable('trades', 'time', chunk_time_interval => INTERVAL '1 day'); CREATE INDEX ON trades (symbol, time DESC); היא SELECT מהתצוגה החומרית, לא אגרגציה על נתונים גולמיים.

נתונים ישנים נדחסים כמעט ללא אובדן פונקציונליות (למעט UPDATE/DELETE):

ALTER TABLE trades SET ( timescaledb.compress, timescaledb.compress_orderby = 'time DESC', timescaledb.compress_segmentby = 'symbol' ); SELECT add_compression_policy('trades', INTERVAL '7 days'); 

יחס דחיסה טיפוסי לנתוני בורסה: 10–20x. 100GB גולמי -> 5–10GB דחוס. חיסכון באחסון מגיע ל-80% עבור נתונים בני יותר מחודש. לפי תיעוד TimescaleDB, דחיסה יכולה להפחית את טביעת האחסון באופן דרמטי תוך שמירה על יכולת שאילתה.

ארכיטקטורת ClickHouse

בחירת המנוע היא קריטית. לניתוח נתונים, אנו משתמשים לרוב ב-MergeTree, ReplacingMergeTree (דדופליקציה), ו-SummingMergeTree (אגרגציות).

CREATE TABLE trades ( time DateTime64(3), exchange LowCardinality(String), symbol LowCardinality(String), price Decimal(20, 8), volume Decimal(20, 8), side Enum8('buy' = 1, 'sell' = 2) ) ENGINE = MergeTree() PARTITION BY toYYYYMM(time) ORDER BY (symbol, exchange, time); 

ORDER BY ב-ClickHouse הוא גם המפתח הראשי (אינדקס דליל) וגם סדר האחסון הפיזי. בחרו לפי דפוסי שאילתות: אם אתם בדרך כלל מסננים לפי (symbol, time), השתמשו ב-ORDER BY זה.

תצוגות חומריות ב-ClickHouse מבוססות על טריגרים, ומתעדכנות בעת הכנסה (לא לפי לוח זמנים כמו TimescaleDB). תכונה ייחודית היא ASOF JOIN לחיבור לפי ערך הזמן הקרוב ביותר.

סוגי נתונים. השתמשו ב-LowCardinality(String) לשדות עם קרדינליות נמוכה (בורסה, symbol, side)—חוסך פי 2-10 בגודל ומאיץ סינון. השתמשו ב-Decimal במקום Float לערכים פיננסיים—אין בעיות דיוק.

חלוקה. לפי חודש (toYYYYMM) היא סטנדרטית לרוב הנתונים הפיננסיים. מאפשרת מחיקת מחיצות ישנות ללא DELETE.

פרמטר TimescaleDB ClickHouse
סוגי שדות PostgreSQL סטנדרטי LowCardinality, Decimal, Enum
אינדוקס B-tree על symbol+time ORDER BY (אינדקס דליל)
דחיסה 10-20x (מדיניות דחיסה) 5-10x (LZ4, ZSTD)
חלוקה לפי יום (chunk_interval) לפי חודש (toYYYYMM)

למה לשלב TimescaleDB ו-ClickHouse?

אחסון כל הנתונים במערכת אחת הוא פשרה. TimescaleDB מתמודד היטב עם שאילתות נקודתיות ועומסי OLTP, אך מפגר באנליטיקה עם 100+ מיליארד שורות. ClickHouse, לעומת זאת, אינו יעיל לעדכונים תכופים ועסקאות. בשילובם, אתם מקבלים: נתונים תפעוליים על TimescaleDB (שכבה חמה 30 יום) ושכבה אנליטית על ClickHouse (היסטוריה לכל הזמן). עלויות התשתית יורדות ב-40% הודות לחלוקת עומסים. ארכיטקטורת האחסון הופכת למודולרית וניתנת להרחבה. קבלו ייעוץ לבחירת מערכת ניהול מסדי נתונים (DBMS) המתאימה לנתונים שלכם.

תוצרים: מה כלול

  • ביקורת על הנתונים הקיימים והשאילתות הטיפוסיות לניתוח נתונים
  • תכנון סכמה (hypertable / MergeTree) עם חלוקה, אינדקסים ובחירות דחיסה
  • סקריפטי הגירה עם בקרת תקינות
  • הגדרה של continuous aggregates או תצוגות חומריות
  • אינטגרציה עם Grafana: לוחות מחוונים לגודל טבלאות, מספר חלקים, זמן ביצוע שאילתות
  • תיעוד תפעולי והמלצות להרחבה עתידית
  • הכשרת צוות הלקוח

תהליך

  1. אנליטיקה — איסוף מדדי עומס, נפחים, תדירות שאילתות. זיהוי נתונים חמים וקרים.
  2. תכנון — בחירת מערכת ניהול מסדי נתונים, סכמה ומדיניות שמירה/דחיסה.
  3. יישום — פריסת הקלאסטר, כתיבת צינור ETL.
  4. בדיקות — בדיקות עומס על נפחים קרובים לאמיתיים.
  5. פריסה — הגירת נתונים, הגדרת ניטור, מסירת תיעוד.

לוח זמנים ועלות

לוחות זמנים: משבוע אחד לתכנון סכמה ועד 3 שבועות בהגירת נתונים קיימים. העלות מחושבת באופן אישי לפי הנפח והמורכבות שלכם. חיסכון טיפוסי: $5,000/חודש ללקוח. צרו קשר לדיון בפרטים.

פרטים מרכזיים

  • יחס דחיסה טיפוסי: 10-20x על TimescaleDB, 5-10x על ClickHouse.
  • Continuous aggregates מתעדכנים כל 60 שניות לסיכומים בזמן אמת.
  • גודל הכנסה בקבוצות אופטימלי ב-ClickHouse: 10,000-100,000 שורות לקבוצה.
  • קלאסטר מרובה צמתים עם 3+ צמתים לזמינות גבוהה.