GH GambleHub

Αποθήκευση χρονοσειρών

1) Γιατί μια ξεχωριστή αρχιτεκτονική για χρονοσειρές

Οι χρονοσειρές είναι ακολουθίες ζευγαριών (χρονοσφραγίδα, τιμή) με ετικέτες (ετικέτες), οι οποίες χαρακτηρίζονται από:
  • Υψηλή ταχύτητα καταγραφής (κατάποση) και συχνότητα.
  • Διαβάζει από χρονικές κλίμακες (σάρωση + συγκεντρωτικά στοιχεία/συναρτήσεις παραθύρων).
  • Εκρηκτική πληθικότητα λόγω συνδυασμών ετικετών.
  • Η ανάγκη κατακράτησης (περιορισμοί διάρκειας ζωής) και μείωσης της δειγματοληψίας (χρονική συμπίεση).
  • Ως εκ τούτου - ένα ειδικό μοντέλο αποθήκευσης, μορφότυποι συμπίεσης και πρωτόκολλα αιτήσεων.

2) Μοντέλο δεδομένων και συμβατικές μετρήσεις

2. 1 Ονομασία και ετικέτες

: μοναδικό ρήμα/ουσιαστικό ('http _ αιτήματα _ σύνολο', 'cpu _ χρήση _ δευτερόλεπτα _ σύνολο').
ετικέτες: κλειδιά χαρακτηριστικών ("εργασία", "παράδειγμα", "dc", "po ," κατάσταση "," μέθοδος ").
Αναλλοίωτες: μην αλλάξετε τη σημασιολογία του ονόματος, προσθέστε εκδόσεις ('metric _ v2') με ασύμβατες αλλαγές.

2. 2 Τύποι γραμμών

Gauge, Counter, Histogram/Περίληψη, Event/Span.
Για χρηματοοικονομικά στοιχεία/πυκνότητες - Καθορισμός μονάδων και συγκεντρωτικότητα (άθροισμα/μέσος όρος).

2. 3 Πολιτική διατήρησης και παράτασης

Θερμή λεπτομέρεια (δευτερόλεπτα/1-10 λεπτά) → θερμές μονάδες (5m/1h) → ψυχρές (1d/1w).
Για μετρητές - τιμή αποθήκευσης/συγκεντρωτικά μεγέθη deriv.

3) Διαδρομή καταγραφής: λήψη, ρυθμιστικό διάλυμα, συμπαγής

3. 1 Αγωγός κατάποσης

Ξύστρα (pull, Prometheus) ή ώθηση (OTLP/StatsD/Graphite), συχνά μέσω πύλης/παράγοντα.
Ρυθμιστικό διάλυμα σε WAL (λογάριθμος αναφοράς), κατόπιν συμπίεση σε τμήματα/μπλοκ (αρχιτεκτονική τύπου LSM).
Η παρτίδα και η διαλογή του χρόνου αυξάνουν τη συμπίεση και την ταχύτητα.

3. 2 Χειρισμός εκτός λειτουργίας και λήψη

Παράθυρο ανοχής (παράθυρο καθυστέρησης, για παράδειγμα 5-15 λεπτά) + πολιτική: 'drop

Αφαίρεση με '(series_id, χρονοσφραγίδα)' με έκδοση ή «τελευταία νίκη ρεκόρ».

3. 3 Συμπίεση

Delta-of-delta για χρονοσφραγίδες, Gorilla/XOR για πλωτήρες, RLE και varint για ακέραιους, λεξικό για ετικέτες.
Το βέλτιστο μέγεθος μπλοκ («κομμάτι») των σημείων 1-8K είναι ένας συμβιβασμός μεταξύ IOPS και CPU.

4) Συστήματα αποθήκευσης: TSDB έναντι SQL/στήλες

4. 1 Ειδική TSDB

Prometheus (τοπική, σύντομη κατακράτηση, PromQL, remote_write).
οριζόντια κλιμάκωση, μακρά κατακράτηση, απομακρυσμένη ανάγνωση.
Οι μορφές μπλοκ βελτιστοποιούνται για σάρωση εύρους + συσσώρευση προσφορών.

4. 2 Κινητήρες σχεσιμότητας/στήλης

Χρονοδιάγραμμα DB (PostgreSQL): υπερτάκτες, κομμάτια ανά χρόνο/χώρο, συνεχή συγκεντρωτικά μεγέθη.
ClickHouse: MergeTree/TTL/υλοποιημένες απόψεις, εξαιρετική συμπίεση και συγκέντρωση χρόνου.
Επιλογή - ανά ερωτηματικό οικοσύστημα (SQL/PromQL), απαιτήσεις συμμετοχής/ΔΥ και επιχειρησιακές δεξιότητες της ομάδας.

5) Σχέδιο και παραδείγματα

5. 1 Χρονοδιάγραμμα DB: υπερτάπητος + συνεχές σύνολο

sql
CREATE TABLE metrics_cpu(
ts timestamptz NOT NULL,
host text NOT NULL,
dc text NOT NULL,
usage double precision NOT NULL,
PRIMARY KEY (ts, host, dc)
);
SELECT create_hypertable('metrics_cpu', by_range('ts'), chunk_time_interval => interval '1 day');

-- Continuous unit (5 minutes)
CREATE MATERIALIZED VIEW cpu_5m
WITH (timescaledb. continuous) AS
SELECT time_bucket('5 minutes', ts) AS ts5m, host, dc, avg(usage) AS avg_usage
FROM metrics_cpu GROUP BY 1,2,3;

-- Politicians
SELECT add_retention_policy('metrics_cpu', INTERVAL '14 days');
SELECT add_retention_policy('cpu_5m',   INTERVAL '180 days');

5. 2 ClickHouse: Συγκέντρωση αποθήκευσης

sql
CREATE TABLE metrics_cpu (
ts DateTime,
host LowCardinality(String),
dc LowCardinality(String),
usage Float32
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (host, dc, ts)
TTL ts + INTERVAL 14 DAY
SETTINGS index_granularity = 8192;

-- Rollup in hourly detail
CREATE MATERIALIZED VIEW cpu_1h
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (host, dc, ts)
POPULATE AS
SELECT toStartOfHour(ts) AS ts, host, dc, avg(usage) AS usage
FROM metrics_cpu GROUP BY ts, host, dc;

5. 3 Προμηθέας/VictoriaMetrics: remote_write

yaml global:
scrape_interval: 15s remote_write:
- url: http://vminsert:8480/insert/0/prometheus/api/v1/write

6) Καρδινότητα: πώς να μην «ανατινάξετε» την αποθήκη

6. 1 Κανόνες

Οριακή πληθικότητα της ετικέτας (αριθμός μοναδικών τιμών). Δεν περιλαμβάνεται το 'χρήστης _ id', το 'request _ i , το' trace _ id '.
Κανονικοποιήστε τις ετικέτες «πολλαπλών αξιών» (κατηγορίες → κωδικοί).
Χρησιμοποιήστε τύπους LowCardinality (σε CH), λεξικά/δένδρα ετικετών (σε TSDB).

6. 2 Έλεγχοι και προειδοποιήσεις

Μετρικές: 'series _ count', 'label _ value {label}', top-N «ακριβές» σειρές.
Γράψτε πολιτικές αποτυχίας όταν σημειώνεται υπέρβαση του ορίου πληθικότητας ανά ενοικιαστή/θέση εργασίας.

6. 3 Ιστορικά/Ιστογράμματα

Για την υψηλή πληθικότητα, είναι προτιμότερο να αποθηκεύονται συγκεντρωτικά στοιχεία (κουβάδες ιστογράμματος) και προ-κυλίνδρους. ποσοτικά στοιχεία για τον υπολογισμό των επιγραμμικών μεγεθών.

7) Διατήρηση, μείωση της δειγματοληψίας και κλιμακωτή αποθήκευση

7. 1 Πολιτικές

3-30 ημέρες λεπτομέρειας δευτέρου/λεπτού.
Θερμό: 90-365 ημέρες συγκεντρωτικών υλικών 5m/1h.
Κρύο: έτη ημερήσιων μεγεθών, αρχείο αποθήκευσης αντικειμένων (S3/Glacier) με Parquet.

7. 2 Τεχνικοί

Συνεχή μεγέθη (Timescale), υλοποιημένες απόψεις (CH), εργασίες κατακράτησης + ανατροπής (Victoria/M3/Influence).
Κλιμακωτή αποθήκευση: «θερμά μπλοκ» τοπικά, «κρύο» σε αντικείμενο με τοπική κρύπτη.

8) Ερωτήματα και γλώσσες

8. 1 PromQL (παράδειγμα)

promql rate(http_requests_total{job="api",status=~"5.."}[5m])

Αναζήτηση ποσοστού σφάλματος 5xx API.

8. 2 συγκεντρωτικά μεγέθη SQL ανά παράθυρο

sql
SELECT time_bucket('1h', ts) AS hour,
dc, avg(usage) AS avg, max(usage) AS pmax
FROM metrics_cpu
WHERE ts >= now() - interval '24 hours'
GROUP BY 1,2 ORDER BY 1;

8. 3 Ανωμαλίες (σκίτσο)

Z-score/ESD ανά window statistics, STL αποσύνθεση της εποχικότητας· αποθηκεύουν τα αποτελέσματα σε ξεχωριστή σειρά «ανωμαλία = 1/0».

9) Ολοκλήρωση και πρωτόκολλα

OTLP (OpenTelemetry): μετρήσεις/μονοπάτια/αρχεία καταγραφής, εξαγωγείς σε πράκτορες (otel-collector) → TSDB/clickhouse/αντικείμενο.
StatsD/γραφίτης: απλοί μετρητές/χρονοδιακόπτες. διαμεσολαβητής προς την άκρη, στη συνέχεια μετατροπή σε ένα ενιαίο μορφότυπο.
Kafka/NATS: ρυθμιστικό διάλυμα για εκρήξεις κατάποσης, αναπαραγωγή για οπισθοπλήρωση· οι καταναλωτές γράφουν batchami.

Παράδειγμα του Kafka-ClickHouse (ψευδο):
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary

10) Προσβασιμότητα, HA και Ομοσπονδία

Ζεύγη αντιγράφων/TSDB HA ή ομοσπονδία Προμηθέα (περιοχή → παγκόσμιο επίπεδο).
Απομακρυσμένη ανάγνωση/εγγραφή για μακροπρόθεσμη αποθήκευση και κεντρικά ταμπλό.
Shard-by-label/time: ομοιόμορφη κατανομή της κατανάλωσης, τοποθεσία ανά «dc/ενοικιαστή».

11) Παρατηρησιμότητα της ίδιας της αποθήκευσης

11. 1 Μετρήσεις

Εισαγωγή: 'δείγματα/sec', 'append _ latency', 'wal _ fsync _ m .
: 'blocks _ coun Хранение,' compaction _ queue _ len ',' chunk _ compression _ ratio '.
: 'query _ qp Запросы,' scan _ bytes ',' p95/p99 _ latency ',' http _ bytes '.
Cardinality: 'series _ count', top-labels.

11. 2 SLO

«p99 latency for 1h range ≤ 200ms at QPS≤500».

"Κατάποση-σταγόνα ≤ 0. 01% σε διάρρηξη πριν από X δείγματα/sec"

«Εκκρεμότητες συμπίεσης <10 λεπτά».

11. 3 Καταχωρίσεις

Αύξηση 'σειρές _ καταμέτρηση'> Y %/ώρα.
Σειρά αναμονής συμπίεσης/κατώφλι έκπλυσης>.
εκτός τάξης> N%, dedup/late-drops.

12) Ασφάλεια και πολυπλοκότητα

απομόνωση από τον «ενοικιαστή» (επισήμανση σε κλειδιά, μεμονωμένοι πίνακες/βάσεις δεδομένων, ποσοστώσεις).
Απολύμανση ετικετών (απαγόρευση PII), έλεγχος μεγέθους/αξίας.
Κρυπτογράφηση «σε ηρεμία» και στις μεταφορές, έλεγχος πρόσβασης σε «ευαίσθητες» μετρήσεις.

13) Πρακτικές λειτουργίας

Προθέρμανση και κρύο ξεκίνημα: καρφίτσα από «ζεστά» μπλοκ στην κρύπτη, πρόγνωση των τελευταίων N ωρών.
Backfill: μεμονωμένοι αγωγοί χαμηλής προτεραιότητας δεν αναμειγνύονται με το διαδίκτυο.
Έκδοση σχήματος: μετανάστευση με παράλληλη γραφή (διπλή γραφή) και επακόλουθο διακόπτη.
Προϋπολογισμός αποθήκευσης: έλεγχος της «cost _ per _ TB _ μήνα» + πρόβλεψη της αύξησης της πληθικότητας.

14) Αντι-μοτίβα

Ετικέτες με υψηλή πληθικότητα (user_id, uuid) → έκρηξη γραμμών.
«Αιώνιες» σειρές χωρίς συγκράτηση → ανεξέλεγκτη ανάπτυξη.
Καταγραφή μη σφαγής/διαλογής → κακή συμπίεση και καταιγίδα IOPS.
Αναμίξτε OLTP και μακριές σαρώσεις στην ίδια δεξαμενή δίσκων.
Έλλειψη πολιτικής εκτός τάξης → επαναλήψεις και φούσκωμα.
Τα ιστογράμματα με εκατοντάδες κουβάδες κοστίζουν × 10 χωρίς όφελος.

15) Κατάλογος ελέγχου εφαρμογής

  • Ορισμός των μετρήσεων, των τύπων και των μονάδων τους. καθορίζει την ονομασία/το σήμα σύμβασης.
  • Επιλέξτε τον κινητήρα (TSDB έναντι SQL/στήλη) και τη γλώσσα ερωτημάτων (PromQL/SQL).
  • Σχεδιάστε κατακράτηση/κύλιση (ζεστό/ζεστό/κρύο) και ILM.
  • Ρύθμιση κατάποσης: WAL/παρτίδες/διαλογή, παράθυρα εκτός λειτουργίας.
  • Ενεργοποιήστε τη συμπίεση (delta-of-delta/XOR/RLE), βέλτιστα κομμάτια.
  • Έλεγχος της πληθικότητας: ποσοστώσεις, προειδοποιήσεις, πολιτικές εξαίρεσης.
  • Διαμόρφωση HA/ομοσπονδία και απομακρυσμένη γραφή/ανάγνωση.
  • Ταμιευτήρες SLO και μετρήσεις αποθήκευσης (κατάποση/ερώτηση/αποθήκευση).
  • Πολιτικές απομόνωσης ασφάλειας/ενοικιαστών και έλλειψη PII στα σήματα.
  • Κανονική «ημέρα παιχνιδιού»: backfill, απώλεια κόμβου, αύξηση της κατανάλωσης.

16) ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ

Ε: Τι να επιλέξετε για την παρακολούθηση των υποδομών: Προμηθέας ή ClickHouse/Χρονοδιάγραμμα

A: Για εγχώρια παρακολούθηση και PromQL - Προμηθέας + μακροχρόνια αποθήκευση (Victoria/M3). Για σενάρια BI/αποθήκης και SQL - Timescale/ClickHouse.

Ε: Πώς να αποθηκεύσετε ποσοτικά στοιχεία χωρίς βαριές περιλήψεις

A: Χρησιμοποιήστε το ιστόγραμμα με καθαρούς κουβάδες και υπολογίστε τους ποσοτικούς υπολογισμούς όταν τους ζητηθεί. ή t-digest/CKMS σε συγκεντρωτικά στοιχεία.

Ε: Πώς να αντιμετωπίσετε την εκτός τάξης κατάσταση

Α: Εισάγετε το παράθυρο ανοχής (5-15 λεπτά) και την καθορισμένη πολιτική αφαίρεσης. για την τηλεμετρία από κινητό/άκρο - το παράθυρο είναι ευρύτερο.

Ε: Πότε χρειάζεται μια ανατροπή

A: Πάντα> 30-90 ημέρες: τα συγκεντρωτικά στοιχεία μειώνουν το μέγεθος × 10-100 και επιταχύνουν την ανάλυση.

Ε: Είναι δυνατή η ανάμειξη κορμοτεμαχίων και μετρήσεων

A: Αποθηκεύεται χωριστά (οι μορφότυποι/ερωτήματα διαφέρουν). Για συσχέτιση, χρησιμοποιήστε Exemplar/TraceID και ταμπλό, αλλά μην προσθέσετε τα πάντα σε έναν πίνακα.

17) Σύνολα

Αποτελεσματική αποθήκευση χρονοσειρών είναι η σύμβαση μετρήσεων + πειθαρχία ετικετών, ικανή κατάποση (WAL/συμπίεση), συμπίεση και πολιτικές κατακράτησης/ανατροπής. Προσθέστε τον έλεγχο της πληθικότητας, τη NA/ομοσπονδία και την παρατηρησιμότητα του ίδιου του καταστήματος - και παίρνετε προβλέψιμο p95, λογικό κόστος για μήνες έως χρόνια και αυξημένη αντίσταση.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.