ሰላም ሀብር።
አንድ ሰው ስርዓቱን እየሰራ ከሆነ
ClickHouse በደንብ የተገለጹትን ችግሮች ይፈታል. ለምሳሌ፣ 2TiB ውሂብ ከሹክሹክታ ካፈሰሱ በኋላ፣ ወደ 300ጊቢ ይስማማሉ። በንጽጽር ላይ በዝርዝር አልቆይም, በዚህ ርዕስ ላይ በቂ ጽሑፎች አሉ. በተጨማሪም፣ እስከ ቅርብ ጊዜ ድረስ፣ በእኛ ClickHouse ማከማቻ ሁሉም ነገር ፍጹም አልነበረም።
የተበላሹ የጠፈር ጉዳዮች
በቅድመ-እይታ, ሁሉም ነገር በደንብ መስራት አለበት. በመከተል ላይ retention
), ከዚያም በተመረጠው የግራፍ-ድር ጀርባ አስተያየት መሰረት ሠንጠረዥ ይፍጠሩ:
የትኛው እንደሆነ ለመረዳት ፣ ማስገቢያዎች እንዴት እንደሚሠሩ እና በቤተሰብ ሞተሮች ሰንጠረዦች ውስጥ ያለው ተጨማሪ የሕይወት ጎዳና ማወቅ ያስፈልግዎታል *የመዋሃድ ዛፍ ClickHouse (ሥዕላዊ መግለጫዎች ከ
- ገብቷል
блок
ውሂብ. በእኛ ሁኔታ, እነዚህ መለኪያዎች ናቸው.
- እያንዳንዱ እንደዚህ ያለ እገዳ ወደ ዲስክ ከመጻፉ በፊት እንደ ቁልፉ ይደረደራል.
ORDER BY
ሠንጠረዡ ሲፈጠር የተገለጸው. - ከተደረደሩ በኋላ፣
кусок
(part
) ውሂብ ወደ ዲስክ ተጽፏል.
- አገልጋዩ እንደዚህ አይነት ቁርጥራጮች እንዳይበዙ ከበስተጀርባ ይከታተላል እና ዳራውን ይጀምራል
слияния
(merge
, ከዚያም ይዋሃዱ).
- ውሂቡ በንቃት ወደ ውስጥ መግባቱን እንዳቆመ አገልጋዩ ውህደቶችን በራሱ ማስጀመር ያቆማል
партицию
(partition
), ግን ሂደቱን በትእዛዙ እራስዎ መጀመር ይችላሉOPTIMIZE
. - በክፋዩ ውስጥ አንድ ቁራጭ ብቻ ከቀረ ፣ ከዚያ በተለመደው ትዕዛዝ ውህደቱን መጀመር አይችሉም ፣ መጠቀም አለብዎት።
OPTIMIZE ... FINAL
ስለዚህ, የመጀመሪያዎቹ መለኪያዎች ይደርሳሉ. እና የተወሰነ ቦታ ይይዛሉ. ተከታይ ክስተቶች በብዙ ሁኔታዎች ላይ ተመስርተው በመጠኑ ሊለያዩ ይችላሉ፡-
- የክፋይ ቁልፉ በጣም ትንሽ (አንድ ቀን) ወይም በጣም ትልቅ (በርካታ ወራት) ሊሆን ይችላል.
- የማቆያ ውቅሩ በንቁ ክፍልፍል ውስጥ (መለኪያዎቹ የተፃፉበት) ወይም ላይሆን ይችላል በርካታ ጉልህ የውሂብ ማጠቃለያ ገደቦችን ሊያሟላ ይችላል።
- ብዙ ውሂብ ካለ ፣ ከበስተጀርባ ውህደት የተነሳ (ጥሩ ያልሆነ የመከፋፈያ ቁልፍ ሲመርጡ) በጣም ትልቅ ሊሆኑ የሚችሉ የመጀመሪያዎቹ ቁርጥራጮች እራሳቸውን ከትኩስ ትናንሽ ቁርጥራጮች ጋር አይዋሃዱም።
እና ሁልጊዜም እንዲሁ ያበቃል. በ ClickHouse ውስጥ በሜትሪክስ የተያዘው ቦታ የሚያድገው፡-
- አትመልከቱ
OPTIMIZE ... FINAL
በእጅ ወይም - ፈጥኖም ሆነ ዘግይቶ የጀርባ ውህደት ለመጀመር ቀጣይነት ባለው መልኩ በሁሉም ክፍሎች ውስጥ ውሂብን አታስገባ
ሁለተኛው ዘዴ ለመተግበር በጣም ቀላሉ ይመስላል, ስለዚህም, የተሳሳተ እና በመጀመሪያ ደረጃ የተሞከረ ነው.
ላለፉት 4 ዓመታት ለእያንዳንዱ ቀን ዱሚ መለኪያዎችን የሚልክ እና በየሰዓቱ በክሮን የሚሰራ ትክክለኛ ቀላል የፓይቶን ስክሪፕት ጻፍኩ።
ሁሉም የ ClickHouse DBMS ሥራ ይህ ሥርዓት ይዋል ይደር እንጂ ሁሉ የጀርባ ሥራ ያደርጋል እውነታ ላይ የተመሠረተ ነው, ነገር ግን መቼ አይታወቅም, እኔ አሮጌ ግዙፍ ቁርጥራጮች deign ውህደት ለመጀመር ቅጽበት መጠበቅ አልቻልኩም ነበር. ከአዳዲስ ትናንሽ ጋር. የግዳጅ ማመቻቸትን በራስ ሰር የምንሰራበት መንገድ መፈለግ እንዳለብን ግልጽ ሆነ።
በ ClickHouse ስርዓት ሰንጠረዦች ውስጥ ያለ መረጃ
የሠንጠረዡን መዋቅር እንመልከት
- የውሂብ ጎታ ስም (
database
); - የጠረጴዛ ስም (
table
); - የክፍፍል ስም እና መታወቂያ (
partition
&partition_id
); - ቁሱ ሲፈጠር (
modification_time
); - በክፍል ውስጥ ዝቅተኛው እና ከፍተኛው ቀን (መከፋፈል በቀን ነው) (
min_date
&max_date
);
ጠረጴዛም አለ
- የውሂብ ጎታ ስም (
Tables.database
); - የጠረጴዛ ስም (
Tables.table
); - ቀጣዩ ድምር መተግበር ያለበት የመለኪያው ዕድሜ (
age
);
ስለዚህ:
- የጭራሾች ሰንጠረዥ እና የመደመር ደንቦች ሰንጠረዥ አለን.
- መገናኛቸውን አንድ እናደርጋለን እና ሁሉንም * GraphiteMergeTree ሰንጠረዦችን እንቀበላለን።
- እኛ በውስጡ ያሉትን ሁሉንም ክፍሎች እንፈልጋለን-
- ከአንድ በላይ ቁራጭ
- ወይም የሚቀጥለውን የመደመር ደንብ ተግባራዊ ለማድረግ ጊዜው ደርሷል, እና
modification_time
ከዚህ ቅጽበት በላይ የቆየ።
ትግበራ
ይህ ጥያቄ
SELECT
concat(p.database, '.', p.table) AS table,
p.partition_id AS partition_id,
p.partition AS partition,
-- Самое "старое" правило, которое может быть применено для
-- партиции, но не в будущем, см (*)
max(g.age) AS age,
-- Количество кусков в партиции
countDistinct(p.name) AS parts,
-- За самую старшую метрику в партиции принимается 00:00:00 следующего дня
toDateTime(max(p.max_date + 1)) AS max_time,
-- Когда партиция должна быть оптимизированна
max_time + age AS rollup_time,
-- Когда самый старый кусок в партиции был обновлён
min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
-- Все правила для всех таблиц *GraphiteMergeTree
SELECT
Tables.database AS database,
Tables.table AS table,
age
FROM system.graphite_retentions
ARRAY JOIN Tables
GROUP BY
database,
table,
age
) AS g ON
(p.table = g.table)
AND (p.database = g.database)
WHERE
-- Только активные куски
p.active
-- (*) И только строки, где правила аггрегации уже должны быть применены
AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
table,
partition
HAVING
-- Только партиции, которые младше момента оптимизации
(modified_at < rollup_time)
-- Или с несколькими кусками
OR (parts > 1)
ORDER BY
table ASC,
partition ASC,
age ASC
የዲስክ ቦታን ለማስለቀቅ መቀላቀል ያለባቸውን እያንዳንዱን * GraphiteMergeTree የጠረጴዛ ክፍልፋዮችን ይመልሳል። ለትናንሽ ነገሮች ብቻ ይቀራል: ሁሉንም በጥያቄ ይለፉ OPTIMIZE ... FINAL
. የመጨረሻው አተገባበርም ከንቁ መዝገብ ጋር ክፍልፋዮችን መንካት አያስፈልግም የሚለውን እውነታ ግምት ውስጥ ያስገባ ነበር.
ፕሮጀክቱ የሚያደርገው ይህ ነው።
ፕሮግራሙን በ ClickHouse በአገልጋዩ ላይ ካስኬዱት፣ በቀላሉ በዴሞን ሁነታ መስራት ይጀምራል። ከሶስት ቀናት በላይ የቆዩ አዲስ ክፍልፋዮች መኖራቸውን በማጣራት በሰዓት አንድ ጊዜ መጠይቅ ይፈጸማል።
በቅርብ ጊዜ ውስጥ - ቢያንስ የዴብ ፓኬጆችን ለማቅረብ, እና ከተቻለ - እንዲሁም ራፒኤም.
ከዚህ ይልቅ አንድ መደምደሚያ
ላለፉት 9+ ወራት፣ በኩባንያዬ ውስጥ ነበርኩ።
በጥያቄው ልማት ላይ በርካታ ሊትር የቢራ እና የአስተዳዳሪ ቀናት አሳልፈዋል
ምንጭ: hab.com