ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ከሶስት አመት በፊት ቪክቶር ታርናቭስኪ እና አሌክሲ ሚሎቪዶቭ ከ Yandex በመድረክ ላይ HighLoad ++ የተነገረው, የትኛው ClickHouse ጥሩ ነው, እና እንዴት አይቀንስም. እና በሚቀጥለው ደረጃ ላይ ነበር አሌክሳንደር Zaitsev с ሪፖርት አድርግ ወደ መንቀሳቀስ ስለ ጠቅታ ቤት ከሌላ የትንታኔ ዲቢኤምኤስ እና ከዚያ መደምደሚያ ጋር ጠቅታ ቤት, በእርግጥ, ጥሩ, ግን በጣም ምቹ አይደለም. መቼ በ 2016 ኩባንያው LifeStreet, በዚያን ጊዜ እስክንድር ይሠራበት ነበር, መልቲፔታባይት ትንታኔ ሥርዓት ወደ ተርጉሞታል ጠቅታ ቤትበማይታወቁ አደጋዎች የተሞላው አስደናቂ "ቢጫ የጡብ መንገድ" ነበር - ጠቅታ ቤት ከዚያም ፈንጂ መስሎ ነበር.

ከሦስት ዓመት በኋላ ጠቅታ ቤት በጣም ጥሩ ሆነ - በዚህ ጊዜ አሌክሳንደር ወደ መንቀሳቀስ ብቻ ሳይሆን የአልቲኒቲ ኩባንያን አቋቋመ ጠቅታ ቤት በደርዘን የሚቆጠሩ ፕሮጄክቶች ፣ ግን ደግሞ ምርቱን እራሱን ያሻሽላል ከ Yandex ባልደረቦች ጋር። አሁን ጠቅታ ቤት አሁንም ግድየለሽ የእግር ጉዞ አይደለም ፣ ግን ከእንግዲህ ፈንጂ አይደለም።

አሌክሳንደር ከ 2003 ጀምሮ ትላልቅ ፕሮጀክቶችን በማዘጋጀት በተከፋፈሉ ስርዓቶች ውስጥ ተሳትፏል MySQL, Oracle и ቬርቲካ. በመጨረሻው HighLoad ++ 2019 አሌክሳንደር, የአጠቃቀም አቅኚዎች አንዱ ጠቅታ ቤትይህ DBMS አሁን ምን እንደሆነ ተነግሯል። ስለ ዋና ዋና ባህሪያት እንማራለን ጠቅታ ቤትከሌሎች ስርዓቶች እንዴት እንደሚለይ እና በምን ጉዳዮች ላይ እሱን ለመጠቀም የበለጠ ውጤታማ ነው። ምሳሌዎችን በመጠቀም፣ ስርአቶችን ለመገንባት አዲስ እና በፕሮጀክት የተረጋገጡ ልምዶችን እንመልከት ጠቅታ ቤት.


ወደ ኋላ መለስ ብሎ: ከ 3 ዓመታት በፊት የተከሰተው

ከሶስት አመት በፊት ኩባንያውን አስተላልፈናል። LifeStreet ላይ ጠቅታ ቤት ከተለየ የትንታኔ ዳታቤዝ፣ እና የማስታወቂያ አውታረ መረብ ትንታኔ ፍልሰት ይህን ይመስላል።

  • ሰኔ 2016. ውስጥ ክፍት ምንጭ ታየ ጠቅታ ቤት እና የእኛን ፕሮጀክት ጀመረ;
  • ነሐሴ. የፅንሰ-ሀሳብ ማረጋገጫትልቅ የማስታወቂያ አውታር, መሠረተ ልማት እና 200-300 ቴራባይት ውሂብ;
  • ጥቅምት. የመጀመሪያው የምርት መረጃ;
  • ታህሳስ. ሙሉ የምርት ጭነት - በቀን ከ10-50 ቢሊዮን ክስተቶች.
  • ሰኔ 2017 የተጠቃሚዎች ስኬታማ ሽግግር ጠቅታ ቤትበ2,5 አገልጋዮች ስብስብ ላይ 60 petabytes ውሂብ።

ስደት እየገፋ ሲሄድ ግንዛቤው እያደገ ሄደ ጠቅታ ቤት አብሮ መስራት ደስ የሚል ጥሩ ስርዓት ነው, ግን ይህ የ Yandex ውስጣዊ ፕሮጀክት ነው. ስለዚህ, ልዩነቶች አሉ-Yandex በመጀመሪያ ከራሱ የውስጥ ደንበኞች ጋር ይገናኛል ከዚያም ከማህበረሰቡ እና ከውጪ ተጠቃሚዎች ፍላጎቶች ጋር ብቻ ነው, ክሊክሃውስ ግን ብዙ ተግባራዊ በሆኑ አካባቢዎች የድርጅት ደረጃ ላይ አልደረሰም. ስለዚህ በማርች 2017 Altinity ለመሥራት ተመስርተናል ጠቅታ ቤት እንዲያውም ፈጣን እና የበለጠ ምቹ ለ Yandex ብቻ ሳይሆን ለሌሎች ተጠቃሚዎችም ጭምር. እና አሁን እኛ:

  • እኛ በማሰልጠን ላይ በመመስረት መፍትሄዎችን ለመገንባት እንረዳለን ጠቅታ ቤት ደንበኞች እብጠቶችን እንዳይሞሉ እና በመጨረሻም መፍትሄው እንዲሰራ;
  • የ24/7 ድጋፍ እንሰጣለን። ጠቅታ ቤት- ጭነቶች;
  • የራሳችንን የስነ-ምህዳር ፕሮጀክቶችን እናዘጋጃለን;
  • ለልሴ በንቃት ስጥ ጠቅታ ቤትየተወሰኑ ባህሪያትን ማየት ለሚፈልጉ ተጠቃሚዎች ለሚቀርቡ ጥያቄዎች ምላሽ መስጠት።

እና በእርግጥ, ወደ መውሰዱ እንረዳዋለን ጠቅታ ቤት с MySQL, ቬርቲካ, Oracle, ግሪንፕለም, ቀይ አሳይ እና ሌሎች ስርዓቶች. በተለያዩ የመዛወሪያ ቦታዎች ላይ ተሳትፈናል እና ሁሉም ስኬታማ ሆነዋል።

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ለምን እንኳን ወደ መንቀሳቀስ ጠቅታ ቤት

አይዘገይም! ዋናው ምክንያት ይህ ነው። ጠቅታ ቤት - ለተለያዩ ሁኔታዎች በጣም ፈጣን የውሂብ ጎታ;

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

አብረው ከሚሠሩ ሰዎች የዘፈቀደ ጥቅሶች ጠቅታ ቤት.

የመጠን አቅም. በሌላ የውሂብ ጎታ ላይ፣ በአንድ ሃርድዌር ላይ ጥሩ አፈጻጸም ማሳካት ትችላለህ፣ ነገር ግን ጠቅታ ቤት በቀላሉ አገልጋዮችን በመጨመር በአቀባዊ ብቻ ሳይሆን በአግድም መመዘን ይችላሉ። ሁሉም ነገር እኛ የምንፈልገውን ያህል በተቀላጠፈ አይሰራም, ግን ይሰራል. ንግድዎ ሲያድግ ስርዓቱን ማሳደግ ይችላሉ። አሁን በውሳኔው መገደባችን አስፈላጊ ነው እና ሁልጊዜም የእድገት እምቅ መኖሩ አስፈላጊ ነው.

ተንቀሳቃሽነት. ለአንድ ነገር ምንም ማያያዝ የለም. ለምሳሌ በ የአማዞን Redshift የሆነ ቦታ ለመንቀሳቀስ አስቸጋሪ. ሀ ጠቅታ ቤት በእርስዎ ላፕቶፕ, አገልጋይ ላይ ማስቀመጥ, ወደ ደመና ማሰማራት ይችላሉ, ይሂዱ ኩባንያቶች - በመሠረተ ልማት አውታር ላይ ምንም ገደቦች የሉም. ይህ ለሁሉም ሰው ምቹ ነው, እና ይህ ሌሎች ብዙ ተመሳሳይ የውሂብ ጎታዎች ሊመኩ የማይችሉት ትልቅ ጥቅም ነው.

ተለዋዋጭ. ጠቅታ ቤት በአንድ ነገር ላይ አይቆምም, ለምሳሌ, Yandex.Metrica, ነገር ግን ከጊዜ ወደ ጊዜ በተለያዩ ፕሮጀክቶች እና ኢንዱስትሪዎች ውስጥ እየተገነባ እና ጥቅም ላይ ይውላል. አዳዲስ ችግሮችን ለመፍታት አዳዲስ ባህሪያትን በመጨመር ሊሰፋ ይችላል. ለምሳሌ በመረጃ ቋት ውስጥ መዝገቦችን ማከማቸት መጥፎ ጠባይ ነው ተብሎ ስለሚታመን ለዚህ ዓላማ መጡ Elasticsearch. ግን ለተለዋዋጭነት ምስጋና ይግባው ጠቅታ ቤትበውስጡም ምዝግብ ማስታወሻዎችን ማከማቸት ይችላሉ, እና ብዙውን ጊዜ ከውስጥ እንኳን የተሻለ ነው Elasticsearch - ውስጥ ጠቅታ ቤት 10 እጥፍ ያነሰ ብረት ያስፈልገዋል.

ፍርይ ክፍት ምንጭ. ለማንኛውም ነገር መክፈል የለብዎትም። ስርዓቱን በእርስዎ ላፕቶፕ ወይም አገልጋይ ላይ ለማስቀመጥ ፈቃድ መደራደር አያስፈልግም። ምንም የተደበቁ ክፍያዎች የሉም። በተመሳሳይ ጊዜ ምንም ሌላ የ Open Source ዳታቤዝ ቴክኖሎጂ በፍጥነት ሊወዳደር አይችልም። ጠቅታ ቤት. MySQL፣ MariaDB፣ Greenplum - ሁሉም በጣም ቀርፋፋ ናቸው.

ማህበረሰብ, መንዳት እና ደስታ… አለኝ ጠቅታ ቤት ታላቅ ማህበረሰብ: ስብሰባዎች ፣ ቻቶች እና አሌክሲ ሚሎቪዶቭ ፣ ሁላችንንም በጉልበቱ እና በብሩህ ተስፋው ያስከፍለናል።

ወደ ClickHouse በመሄድ ላይ

ወደ ለመቀየር ጠቅታ ቤት ከአንድ ነገር ጋር ሶስት ነገሮችን ብቻ ያስፈልግዎታል

  • ገደቦችን ይረዱ ጠቅታ ቤት እና የማይስማማው ነገር.
  • ጥቅሞቹን ተጠቀም ቴክኖሎጂ እና ከፍተኛ ጥንካሬዎቹ.
  • ሙከራ. እንዴት እንደሚሰራ እንኳን ማወቅ ጠቅታ ቤት፣ መቼ ፈጣን እንደሚሆን ፣ መቼ እንደሚዘገይ ፣ መቼ የተሻለ እንደሚሆን እና መቼ እንደሚከፋ መገመት ሁልጊዜ አይቻልም። ስለዚህ ይሞክሩ።

የመንቀሳቀስ ችግር

አንድ "ግን" ብቻ አለ: ወደ ከተዛወሩ ጠቅታ ቤት ከሌላ ነገር ጋር ፣ ብዙውን ጊዜ አንድ ነገር ስህተት ነው። በተወዳጅ የውሂብ ጎታችን ውስጥ የሚሰሩ አንዳንድ ልምዶችን እና ነገሮችን እንለማመዳለን። ለምሳሌ, ማንኛውም ሰው አብሮ ይሰራል SQL-የውሂብ ጎታዎች፣ የሚከተሉትን የተግባሮች ስብስብ አስገዳጅ እንደሆነ ይገነዘባል፡-

  • ግብይቶች;
  • ገደቦች;
  • ወጥነት;
  • ኢንዴክሶች;
  • አዘምን/ሰርዝ;
  • ባዶዎች;
  • ሚሊሰከንዶች;
  • አውቶማቲክ ዓይነት ልወጣዎች;
  • ብዙ መቀላቀል;
  • የዘፈቀደ ክፍልፋዮች;
  • የክላስተር አስተዳደር መሳሪያዎች.

ምልመላ ግዴታ ነው፣ ​​ግን ከሶስት አመት በፊት በ ጠቅታ ቤት ከእነዚህ ባህሪያት ውስጥ አንዳቸውም አልነበሩም! አሁን ከማይታወቁት ቅሪቶች ውስጥ ከግማሽ ያነሱ፡ ግብይቶች፣ እገዳዎች፣ ወጥነት፣ ሚሊሰከንዶች እና የመውሰድ አይነት።

እና ዋናው ነገር ውስጥ ነው ጠቅታ ቤት አንዳንድ መደበኛ ልማዶች እና አቀራረቦች አይሰሩም ወይም እንደለመድነው አይሰሩም። ውስጥ የሚታየው ሁሉ ጠቅታ ቤት, ጋር ይዛመዳል "የቤቱን መንገድ ጠቅ ያድርጉ”፣ ማለትም እ.ኤ.አ. ተግባራት ከሌሎች ዲቢዎች የተለዩ ናቸው. ለምሳሌ:

  • ኢንዴክሶች አልተመረጡም፣ ግን ተዘለዋል።
  • አዘምን/ሰርዝ የተመሳሰለ አይደለም፣ ግን አልተመሳሰልም።
  • ብዙ መቀላቀሎች አሉ፣ ግን ምንም የመጠይቅ እቅድ አውጪ የለም። ከዚያ በኋላ እንዴት እንደሚፈጸሙ በአጠቃላይ የውሂብ ጎታ ዓለም ላሉ ሰዎች በጣም ግልጽ አይደለም.

ClickHouse Scenarios

በ 1960, የሃንጋሪ ተወላጅ የሆነ አሜሪካዊ የሂሳብ ሊቅ WignerEP አንድ ጽሑፍ ጻፈበተፈጥሮ ሳይንስ ውስጥ ያለው ምክንያታዊ ያልሆነ የሂሳብ ውጤታማነት"("በተፈጥሮ ሳይንስ ውስጥ ያለው የሂሳብ ውጤታማነት ለመረዳት የማይቻል") በዙሪያችን ያለው ዓለም በሆነ ምክንያት በሂሳብ ህጎች በደንብ ተገልጿል. ሂሳብ ረቂቅ ሳይንስ ነው፣ እና በሂሳብ መልክ የተገለጹት ፊዚካል ህጎች ቀላል አይደሉም፣ እና WignerEP ይህ በጣም እንግዳ መሆኑን አጽንኦት ሰጥቷል.

በእኔ እይታ፣ ጠቅታ ቤት - ተመሳሳይ እብድ. ዊግነርን ለማስተካከል፣ ይህን ማለት እንችላለን፡ አስደናቂው የማይታሰብ ብቃት ነው። ጠቅታ ቤት በተለያዩ የትንታኔ መተግበሪያዎች ውስጥ!

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ለምሳሌ እንውሰድ የእውነተኛ ጊዜ የውሂብ ማከማቻ, ወደ የትኛው ውሂብ ያለማቋረጥ ማለት ይቻላል ይጫናል. ለሁለተኛ ጊዜ መዘግየት ከእሱ ጥያቄዎችን መቀበል እንፈልጋለን. እባክዎ ይጠቀሙ ጠቅታ ቤትምክንያቱም የተዘጋጀው ለዚህ ሁኔታ ነው። ጠቅታ ቤት በድር ላይ ብቻ ሳይሆን በግብይት እና በፋይናንሺያል ትንታኔዎች ውስጥም ጥቅም ላይ የሚውለው በዚህ መንገድ ነው ፣ AdTech, እንዲሁም ውስጥ የማጭበርበር ማወቂያn. ውስጥ የእውነተኛ ጊዜ የውሂብ ማከማቻ እንደ "ኮከብ" ወይም "የበረዶ ቅንጣት" ያሉ ውስብስብ የተዋቀረ ንድፍ ጥቅም ላይ ይውላል, ብዙ ጠረጴዛዎች ያሉት JOIN (አንዳንድ ጊዜ ብዙ)፣ እና ውሂቡ አብዛኛውን ጊዜ በአንዳንድ ስርዓቶች ውስጥ ይከማቻል እና ይቀየራል።

ሌላ ሁኔታ እንውሰድ - የጊዜ ተከታታይየመቆጣጠሪያ መሳሪያዎች, አውታረ መረቦች, የአጠቃቀም ስታቲስቲክስ, የነገሮች ኢንተርኔት. እዚህ በጊዜ የታዘዙ ቀላል ቀላል ክስተቶችን እንገናኛለን። ጠቅታ ቤት መጀመሪያ ላይ ለዚህ አልተፈጠረም, ነገር ግን እራሱን በደንብ አሳይቷል, ስለዚህ ትላልቅ ኩባንያዎች ይጠቀማሉ ጠቅታ ቤት መረጃን ለመከታተል እንደ ማጠራቀሚያ. የሚስማማ መሆኑን ለማየት ጠቅታ ቤት ለጊዜ-ተከታታይ, በአቀራረብ እና በውጤቶች ላይ በመመስረት መለኪያ አደረግን InfluxDB и ታይምስሌል ዲ.ቢ. - ልዩ የጊዜ ተከታታይ የውሂብ ጎታዎች. ሆኖ ተገኘ, ያ ጠቅታ ቤትለእንደዚህ አይነት ስራዎች ማመቻቸት ባይኖርም, በባዕድ ሜዳም ያሸንፋል.

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

В የጊዜ ተከታታይ ብዙውን ጊዜ ጠባብ ጠረጴዛ ጥቅም ላይ ይውላል - ብዙ ትናንሽ ዓምዶች. ብዙ መረጃዎች ከክትትል ሊመጡ ይችላሉ - በሚሊዮኖች የሚቆጠሩ መዝገቦች በሰከንድ - እና እነሱ ብዙውን ጊዜ በትንሽ ማስገቢያዎች ውስጥ ይመጣሉ (በተመሳሳይ ሰዐት ዥረት)። ስለዚህ, የተለየ አስገባ ስክሪፕት ያስፈልገናል, እና መጠይቆች እራሳቸው - ከራሳቸው የተወሰኑ ዝርዝሮች ጋር.

ሎግ ማኔጅመንት. በመረጃ ቋቱ ውስጥ የምዝግብ ማስታወሻዎችን መሰብሰብ ብዙውን ጊዜ መጥፎ ነው፣ ግን ውስጥ ጠቅታ ቤት ይህ ከላይ እንደተገለፀው በአንዳንድ አስተያየቶች ሊከናወን ይችላል. ብዙ ኩባንያዎች ይጠቀማሉ ጠቅታ ቤት ለዚህ ብቻ። በዚህ ሁኔታ, ጠፍጣፋ ሰፊ ጠረጴዛ ጥቅም ላይ ይውላል, ሙሉውን ምዝግብ ማስታወሻዎች የምናከማችበት (ለምሳሌ, በቅጹ JSON), ወይም ወደ ቁርጥራጮች ይቁረጡ. ውሂቡ ብዙ ጊዜ የሚጫነው በትልቅ መደብ (ፋይሎች) ነው፣ እና የተወሰነ መስክ እየፈለግን ነው።

ለእያንዳንዳቸው እነዚህ ተግባራት, ልዩ የውሂብ ጎታዎች አብዛኛውን ጊዜ ጥቅም ላይ ይውላሉ. ጠቅታ ቤት አንድ ሰው ሁሉንም ነገር ማድረግ ይችላል እና በጥሩ ሁኔታ በአፈፃፀም ውስጥ ያገኛቸዋል. አሁን ጠለቅ ብለን እንመርምር የጊዜ ተከታታይ ስክሪፕት እና እንዴት "ማብሰል" እንደሚቻል ጠቅታ ቤት በዚህ ሁኔታ ስር.

የጊዜ ተከታታይ

ይህ በአሁኑ ጊዜ ለየትኛው ዋና ሁኔታ ነው ጠቅታ ቤት መደበኛውን መፍትሄ ግምት ውስጥ ያስገባል. የጊዜ ተከታታይ በጊዜ ሂደት የሚደረጉ ለውጦችን የሚወክሉ በጊዜ የታዘዙ ክስተቶች ስብስብ ነው። ለምሳሌ, በቀን የልብ ምት ወይም በስርዓቱ ውስጥ ያሉ ሂደቶች ብዛት ሊሆን ይችላል. ጊዜ የሚሰጥ ነገር ሁሉ ከአንዳንድ ልኬቶች ጋር ነው። የጊዜ ተከታታይ:

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

አብዛኛዎቹ እነዚህ ክስተቶች ከክትትል የሚመጡ ናቸው። ይህ የድር ቁጥጥር ብቻ ሳይሆን እውነተኛ መሳሪያዎችም ሊሆን ይችላል-መኪናዎች ፣ የኢንዱስትሪ ስርዓቶች ፣ IoT, ኢንዱስትሪዎች ወይም ሰው አልባ ታክሲዎች, Yandex አስቀድሞ በሚያስቀምጠው ግንድ ውስጥ ጠቅታ ቤት- አገልጋይ.

ለምሳሌ, ከመርከቦች መረጃን የሚሰበስቡ ኩባንያዎች አሉ. በየጥቂት ሴኮንዶች ከመያዣ መርከብ የሚመጡ ዳሳሾች በመቶዎች የሚቆጠሩ የተለያዩ መለኪያዎችን ይልካሉ። መሐንዲሶች ያጠኗቸዋል, ሞዴሎችን ይገነባሉ እና መርከቧ ምን ያህል ውጤታማ በሆነ መንገድ ጥቅም ላይ እንደሚውል ለመረዳት ይሞክራሉ, ምክንያቱም የእቃ መጫኛ መርከብ ለአንድ ሰከንድ ያህል ስራ ፈትቶ መቆም የለበትም. ማንኛውም የእረፍት ጊዜ ገንዘብ ማባከን ነው, ስለዚህ የመኪና ማቆሚያ አነስተኛ እንዲሆን መንገዱን መተንበይ አስፈላጊ ነው.

አሁን የሚለኩ ልዩ የውሂብ ጎታዎች እድገት አለ። የጊዜ ተከታታይ. በጣቢያው ላይ ዲቢ-ኤንጂኖች እንደምንም የተለያዩ የውሂብ ጎታዎች ደረጃ ተሰጥቷቸዋል፣ እና በአይነት ሊታዩ ይችላሉ፡

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

በጣም ፈጣን እድገት ዓይነት ተከታታይ ጊዜኤስ. የግራፍ ዳታቤዝ እንዲሁ እያደጉ ናቸው፣ ግን ተከታታይ ጊዜባለፉት ጥቂት ዓመታት ውስጥ s በፍጥነት እያደገ ነው። የዚህ የውሂብ ጎታ ቤተሰብ የተለመዱ ተወካዮች ናቸው። InfluxDB, ፕሮሚትየስ, KDB, ታይምስሌል ዲ.ቢ. (በላይ የተሰራ PostgreSQL), መፍትሄዎች ከ አማዞን. ጠቅታ ቤት እዚህም ጥቅም ላይ ሊውል ይችላል, እና ጥቅም ላይ ይውላል. ጥቂት የአደባባይ ምሳሌዎችን ልስጥ።

ከአቅኚዎቹ አንዱ ኩባንያው ነው። CloudFlare (CDNአቅራቢ)። ይከታተላሉ CDN በኩል ጠቅታ ቤት (ዲ ኤን ኤስ- ጥያቄዎች; HTTP-ጥያቄዎች) ከትልቅ ጭነት ጋር - 6 ሚሊዮን ክስተቶች በሰከንድ. ሁሉም ነገር ያልፋል ካፋካ፣ ይሄዳል ጠቅታ ቤት, ይህም በስርዓቱ ውስጥ የእውነተኛ ጊዜ ዳሽቦርዶችን የማየት ችሎታ ይሰጣል.

ኮምከር - በዩናይትድ ስቴትስ ውስጥ በቴሌኮሙኒኬሽን ውስጥ ካሉት መሪዎች አንዱ: ኢንተርኔት, ዲጂታል ቴሌቪዥን, ቴሌፎን. ተመሳሳይ የቁጥጥር ስርዓት ፈጠሩ CDN በማዕቀፉ ውስጥ ክፍት ምንጭ ፕሮጀክት Apache የትራፊክ ቁጥጥር ያላቸውን ግዙፍ ውሂብ ጋር ለመስራት. ጠቅታ ቤት ለትንታኔ እንደ ጀርባ ጥቅም ላይ ይውላል.

Conርኮዋ ውስጥ ተገንብቷል ጠቅታ ቤት በእርስዎ ውስጥ ፒኤምኤምየተለየ ክትትል ለማድረግ MySQL.

የተወሰኑ መስፈርቶች

የጊዜ ተከታታይ የውሂብ ጎታዎች የራሳቸው ልዩ መስፈርቶች አሏቸው።

  • ከብዙ ወኪሎች በፍጥነት ማስገባት. ከብዙ ዥረቶች ውሂብ በፍጥነት ማስገባት አለብን። ጠቅታ ቤት ጥሩ ያደርገዋል, ምክንያቱም ሁሉም የማያግድ ማስገቢያዎች አሉት. ማንኛውም አስገባ በዲስክ ላይ ያለ አዲስ ፋይል ነው ፣ እና ትናንሽ ማስገቢያዎች በአንድ ወይም በሌላ መንገድ ሊቀመጡ ይችላሉ። ውስጥ ጠቅታ ቤት በአንድ ጊዜ ከአንድ መሾመር ይልቅ መረጃን በትልቅ ስብስቦች ውስጥ ማስገባት የተሻለ ነው.
  • ተለዋዋጭ ወረዳ. በ የጊዜ ተከታታይ ብዙውን ጊዜ የመረጃውን መዋቅር ሙሉ በሙሉ አናውቅም። ለአንድ የተወሰነ መተግበሪያ የክትትል ስርዓት መገንባት ይቻላል, ግን ከዚያ ለሌላ መተግበሪያ ለመጠቀም አስቸጋሪ ነው. ይህ የበለጠ ተለዋዋጭ እቅድ ያስፈልገዋል. ጠቅታ ቤት, ይህን እንዲያደርጉ ይፈቅድልዎታል, ምንም እንኳን በጠንካራ የተተየበው መሠረት ቢሆንም.
  • ውጤታማ ማከማቻ እና "የመርሳት" ውሂብ. አብዛኛውን ጊዜ ውስጥ የጊዜ ተከታታይ ከፍተኛ መጠን ያለው ውሂብ, ስለዚህ በተቻለ መጠን በብቃት ማከማቸት አለባቸው. ለምሳሌ በ InfluxDB ጥሩ መጨናነቅ ዋናው ባህሪው ነው. ነገር ግን ከማጠራቀሚያ በተጨማሪ የድሮ ውሂብን "መርሳት" እና አንዳንድ ማድረግ መቻል አለብዎት ዝቅተኛ ናሙና ማድረግ - የስብስብ አውቶማቲክ ቆጠራ።
  • በተዋሃደ ውሂብ ላይ ፈጣን መጠይቆች. አንዳንድ ጊዜ የመጨረሻዎቹን 5 ደቂቃዎች በሚሊሰከንዶች ትክክለኛነት መመልከቱ አስደሳች ነው ፣ ግን በወርሃዊ መረጃ ፣ ደቂቃ ወይም ሁለተኛ ደረጃ ግራናላይቲስ ላያስፈልግ ይችላል - አጠቃላይ ስታቲስቲክስ በቂ ነው። የዚህ ዓይነቱ ድጋፍ አስፈላጊ ነው, አለበለዚያ የ 3 ወራት ጥያቄ በ ውስጥ እንኳን በጣም ረጅም ጊዜ ይፈጸማል ጠቅታ ቤት.
  • እንደ" ያሉ ጥያቄዎችየመጨረሻው ነጥብ, እንደ». እነዚህ ለ ዓይነተኛ ናቸው የጊዜ ተከታታይ ጥያቄዎች: የመጨረሻውን መለኪያ ወይም የስርዓቱን ሁኔታ በጊዜ ውስጥ ይመልከቱ t. ለዳታቤዝ፣ እነዚህ በጣም ደስ የሚል መጠይቆች አይደሉም፣ ነገር ግን መፈጸም መቻል አለባቸው።
  • ተከታታይ ጊዜ "ማጣበቅ".. የጊዜ ተከታታይ ተከታታይ ጊዜ ነው። ሁለት ተከታታይ ጊዜ ካለ, ከዚያም ብዙውን ጊዜ መገናኘት እና ማዛመድ ያስፈልጋቸዋል. በሁሉም የውሂብ ጎታዎች ላይ ይህን ለማድረግ ምቹ አይደለም, በተለይም ያልተጣጣሙ ተከታታይ ጊዜዎች: አንዳንድ የጊዜ ምልክቶች እዚህ አሉ, ሌሎችም አሉ. አማካይውን ግምት ውስጥ ማስገባት ይችላሉ, ነገር ግን በድንገት አንድ ቀዳዳ ይኖራል, ስለዚህ ግልጽ አይደለም.

እነዚህ መስፈርቶች እንዴት እንደተሟሉ እንይ ጠቅታ ቤት.

መርሃግብሩ

В ጠቅታ ቤት እቅድ ለ የጊዜ ተከታታይ እንደ የውሂብ መደበኛነት ደረጃ ላይ በመመስረት በተለያዩ መንገዶች ሊከናወን ይችላል። ሁሉንም መለኪያዎች አስቀድመን ስናውቅ በመደበኛ መረጃ ላይ ስርዓት መገንባት ይቻላል. ለምሳሌ አደረጉ CloudFlare ከክትትል ጋር CDN በደንብ የተሻሻለ ስርዓት ነው. አጠቃላይ መሠረተ ልማትን ፣ የተለያዩ አገልግሎቶችን የሚቆጣጠር አጠቃላይ ስርዓት መገንባት ይችላሉ። መደበኛ ያልሆነ መረጃን በተመለከተ እኛ የምንከታተለውን አስቀድመን አናውቅም - እና ይህ ምናልባት በጣም የተለመደው ጉዳይ ነው.

መደበኛ ውሂብ. አምዶች። መርሃግብሩ ቀላል ነው - አስፈላጊ ዓይነቶች ያላቸው አምዶች:

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

ይህ አንዳንድ ዓይነት የስርዓት ማስነሻ እንቅስቃሴዎችን የሚቆጣጠር መደበኛ ጠረጴዛ ነው (ተጠቃሚ, ስርዓት, ፈት, ጥሩ). ቀላል እና ምቹ, ግን ተለዋዋጭ አይደለም. የበለጠ ተለዋዋጭ እቅድ ከፈለግን, ከዚያም ድርድሮችን መጠቀም እንችላለን.

መደበኛ ያልሆነ ውሂብ። ድርድሮች:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

መዋቅር የተተከለ ሁለት ድርድሮች ናቸው: መለኪያዎች.ስም и መለኪያዎች.እሴት. እዚህ እንደዚህ ያለ የዘፈቀደ ክትትል መረጃዎችን እንደ የስም ድርድር እና ለእያንዳንዱ ክስተት የመለኪያ ድርድር ማከማቸት ይችላሉ። ለበለጠ ማመቻቸት, ከአንድ ይልቅ ብዙ እንደዚህ ያሉ መዋቅሮች ሊደረጉ ይችላሉ. ለምሳሌ አንድ ለ ተንሳፈፈ- እሴት, ሌላ - ለ int- ትርጉም, ምክንያቱም int በብቃት ማከማቸት እፈልጋለሁ።

ነገር ግን እንዲህ ዓይነቱ መዋቅር ለመድረስ የበለጠ አስቸጋሪ ነው. ከመረጃ ጠቋሚው መጀመሪያ እና ከዚያ የድርድር እሴቶችን ለማውጣት ልዩ ተግባራትን በመጠቀም ልዩ ግንባታን መጠቀም አለብዎት-

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

ግን አሁንም በበቂ ፍጥነት ይሰራል። መደበኛ ያልሆነ መረጃን ለማከማቸት ሌላኛው መንገድ በረድፎች ነው.

መደበኛ ያልሆነ ውሂብ። ሕብረቁምፊዎች. በዚህ ባህላዊ መንገድ ያለ ድርድሮች፣ ስሞች እና እሴቶች በአንድ ጊዜ ይከማቻሉ። በአንድ ጊዜ 5 መለኪያዎች ከአንድ መሣሪያ ቢመጡ 000 ረድፎች በመረጃ ቋቱ ውስጥ ይፈጠራሉ፡

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

ጠቅታ ቤት ይህንን ይቋቋማል - ልዩ ቅጥያዎች አሉት ጠቅታ ቤት SQL. ለምሳሌ ቢበዛ - አንዳንድ ሁኔታዎች ሲሟሉ ከፍተኛውን በመለኪያ የሚያሰላ ልዩ ተግባር። በአንድ መጠይቅ ውስጥ ብዙ እንደዚህ ያሉ አባባሎችን መጻፍ እና ወዲያውኑ ለብዙ መለኪያዎች ዋጋውን ማስላት ይችላሉ።

ሶስት አቀራረቦችን እናወዳድር፡-

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ዝርዝሮች

እዚህ ለአንዳንድ የሙከራ የውሂብ ስብስብ "በዲስክ ላይ ያለው የውሂብ መጠን" ጨምሬያለሁ. በአምዶች ውስጥ, በጣም ትንሹ የውሂብ መጠን አለን: ከፍተኛው የመጨመቂያ, ከፍተኛ የመጠይቅ ፍጥነት, ነገር ግን ሁሉንም ነገር በአንድ ጊዜ በማስተካከል እንከፍላለን.

በድርድር ሁኔታ ነገሮች ትንሽ የከፋ ናቸው። መረጃው አሁንም በደንብ ይጨመቃል እና መደበኛ ያልሆነ ስርዓተ-ጥለት ማከማቸት ይቻላል. ግን ጠቅታ ቤት - የአምድ ዳታቤዝ ፣ እና ሁሉንም ነገር በድርድር ውስጥ ማከማቸት ስንጀምር ፣ ወደ ሕብረቁምፊነት ይለወጣል ፣ እና ለተለዋዋጭነት በብቃት እንከፍላለን። ለማንኛውም ክዋኔ ሙሉውን ድርድር ወደ ማህደረ ትውስታ ማንበብ አለብዎት ፣ ከዚያ የሚፈልጉትን ንጥረ ነገር በውስጡ ይፈልጉ - እና ድርድር ካደገ ፍጥነቱ ይቀንሳል።

ይህንን አካሄድ ከሚጠቀሙ ኩባንያዎች ውስጥ በአንዱ (ለምሳሌ ፣ በ Uber), ድርድሮች ወደ 128 ንጥረ ነገሮች የተቆራረጡ ናቸው. በ 200 ቴባ የውሂብ / ቀን መጠን ያለው የበርካታ ሺህ ሜትሪክስ ውሂብ በአንድ ድርድር ውስጥ አይከማችም ፣ ግን በ 10 ወይም 30 ድርድሮች ውስጥ በልዩ የማከማቻ አመክንዮ።

በጣም ቀላሉ አቀራረብ በገመድ ነው. ነገር ግን ውሂቡ በደንብ አልተጨመቀም, የሰንጠረዡ መጠን ትልቅ ነው, እና መጠይቆች በበርካታ ልኬቶች ላይ የተመሰረቱ ቢሆኑም, ClickHouse በትክክል አይሰራም.

ድብልቅ እቅድ

የድርድር እቅድ እንደመረጥን እናስብ። ነገር ግን አብዛኛዎቹ ዳሽቦርዶቻችን የተጠቃሚ እና የስርዓት መለኪያዎችን ብቻ እንደሚያሳዩ ካወቅን እነዚህን መለኪያዎች በጠረጴዛ ደረጃ ከድርድር ወደ አምዶች በዚህ መንገድ ልናደርጋቸው እንችላለን።

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

ሲለጠፍ ጠቅታ ቤት በራስ-ሰር ይቆጥራቸዋል. በዚህ መንገድ ንግድን ከደስታ ጋር ማጣመር ይችላሉ-መርሃግብሩ ተለዋዋጭ እና አጠቃላይ ነው ፣ ግን በብዛት ጥቅም ላይ የዋሉ አምዶችን አውጥተናል። ይህ አስገባ መቀየር አያስፈልገውም መሆኑን ልብ ይበሉ እና ETL, እሱም ወደ ጠረጴዛው ውስጥ ድርድሮችን ማስገባት የቀጠለ. በቃ አደረግን። TABLE ን ይለውጡ, ሁለት ድምጽ ማጉያዎችን ጨምሯል እና ድብልቅ እና ፈጣን እቅድ አግኝተው ወዲያውኑ መጠቀም ይችላሉ.

ኮዴኮች እና መጭመቅ

ለ የጊዜ ተከታታይ ውሂቡን ምን ያህል በደንብ ማሸግ አስፈላጊ ነው, ምክንያቱም የመረጃው ድርድር በጣም ትልቅ ሊሆን ይችላል. ውስጥ ጠቅታ ቤት የመጨመቂያ 1:10፣ 1:20 እና አንዳንድ ጊዜ ተጨማሪ ውጤትን ለማግኘት የመሳሪያዎች ስብስብ አለ። ይህ ማለት 1 ቴባ ያልተጨመቀ መረጃ በዲስክ ላይ ከ50-100 ጂቢ ይወስዳል። አነስ ያለ መጠን ጥሩ ነው፣ ውሂብ በፍጥነት ሊነበብ እና ሊሰራ ይችላል።

ከፍተኛ የጨመቅ ደረጃን ለማግኘት; ጠቅታ ቤት የሚከተሉትን ኮዴኮች ይደግፋል:

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

የሰንጠረዥ ምሳሌ፡-

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

እዚህ ኮዴክን እንገልፃለን DoubleDelta በአንድ ጉዳይ ላይ, በሁለተኛው ውስጥ ጎሪላ, እና ተጨማሪ ማከልዎን እርግጠኛ ይሁኑ LZ4 መጭመቅ. በዚህ ምክንያት በዲስክ ላይ ያለው የውሂብ መጠን በእጅጉ ቀንሷል.

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ይህ የሚያሳየው አንድ አይነት ውሂብ ምን ያህል ቦታ እንደሚወስድ ነው፣ ነገር ግን የተለያዩ ኮዴኮችን እና መጭመቂያዎችን በመጠቀም፡-

  • በዲስክ ላይ በ GZIP ፋይል ውስጥ;
  • በ ClickHouse ያለ ኮዴኮች ፣ ግን ከ ZSTD መጭመቂያ ጋር;
  • በ ClickHouse ከ LZ4 እና ZSTD ኮዴኮች እና መጭመቂያ ጋር።

ኮዴክ ያላቸው ጠረጴዛዎች በጣም ያነሰ ቦታ እንደሚይዙ ማየት ይቻላል.

የመጠን መጠን ጉዳዮች

ያነሰ አስፈላጊ አይደለም ለመምረጥ። ትክክለኛ የውሂብ አይነት:

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ከላይ ባሉት ምሳሌዎች ሁሉ ተጠቅሜያለሁ ተንሳፋፊ64. ግን ከመረጥን ተንሳፋፊ32ያ ደግሞ የተሻለ ይሆናል። ይህ ከላይ ባለው አገናኝ ላይ ባለው መጣጥፍ ውስጥ በፔርኮና በመጡ ሰዎች በደንብ አሳይቷል። ለሥራው የሚስማማውን በጣም የታመቀ ዓይነት መጠቀም አስፈላጊ ነው፡ በዲስክ ላይ ካለው መጠን ከጥያቄ ፍጥነት ያነሰ እንኳን። ጠቅታ ቤት ለእሱ በጣም ስሜታዊ።

መጠቀም ከቻሉ int32 በ int64, ከዚያም የአፈጻጸም ሁለት እጥፍ የሚጠጉ ጭማሪ ይጠብቁ. መረጃው አነስተኛ ማህደረ ትውስታን ይይዛል, እና ሁሉም "ሂሳብ" በጣም በፍጥነት ይሰራል. ጠቅታ ቤት በውስጡ በጣም ጥብቅ የተተየበ ስርዓት ነው, ዘመናዊ ስርዓቶች ከሚሰጡት ሁሉንም እድሎች የበለጠ ይጠቀማል.

ድምር እና ሰውነትን የለበሱ ዕይታዎች

ድምር እና ተጨባጭ እይታዎች ለተለያዩ አጋጣሚዎች ድምርን ለመስራት ያስችሉዎታል፡-

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ለምሳሌ፣ ያልተጠቃለለ የምንጭ መረጃ ሊኖርህ ይችላል፣ እና በልዩ ሞተር በኩል በራስ-ሰር በማጠቃለል የተለያዩ ቁሳዊ እይታዎችን በእነሱ ላይ መስቀል ትችላለህ። SummingMergeTree (SMT). SMT ድምርን በራስ-ሰር የሚቆጥር ልዩ የማጠቃለያ ውሂብ መዋቅር ነው። ጥሬ መረጃ በመረጃ ቋቱ ውስጥ ገብቷል፣ በራስ-ሰር ይሰበሰባል፣ እና ዳሽቦርዶች ወዲያውኑ ጥቅም ላይ ሊውሉ ይችላሉ።

ቲቲኤል - የድሮውን ውሂብ "መርሳት".

ከአሁን በኋላ የማይፈለግ ውሂብን እንዴት "መርሳት" ይቻላል? ጠቅታ ቤት እንዴት እንደሚሰራ ያውቃል. ሠንጠረዦችን ሲፈጥሩ, መግለጽ ይችላሉ ቲቲኤል አገላለጾች፡ ለምሳሌ የደቂቃ ውሂብን ለአንድ ቀን፣ ዕለታዊ መረጃን ለ30 ቀናት እናከማቻለን፣ እና ሳምንታዊ ወይም ወርሃዊ መረጃን ፈጽሞ አንንኩ፡-

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

ባለብዙ ደረጃ - በዲስኮች ላይ መረጃን መከፋፈል

ይህንን ሃሳብ በማዳበር ውሂብ በ ውስጥ ሊከማች ይችላል። ጠቅታ ቤት በተለያዩ ቦታዎች. ባለፈው ሳምንት በጣም ፈጣን በሆነ አካባቢያዊ ላይ ትኩስ መረጃዎችን ማከማቸት እንፈልጋለን እንበል ኤስኤስዲእና ተጨማሪ ታሪካዊ መረጃዎችን ወደ ሌላ ቦታ እንጨምራለን. ውስጥ ጠቅታ ቤት አሁን ይቻላል:

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

የማቆያ ፖሊሲውን ማዋቀር ይችላሉ (የማከማቻ መመሪያ) ስለዚህ ጠቅታ ቤት አንዳንድ ሁኔታዎች ሲሟሉ በራስ ሰር ውሂብ ወደ ሌላ ማከማቻ ያስተላልፋል።

ግን ያ ብቻ አይደለም። በአንድ የተወሰነ ሰንጠረዥ ደረጃ, ውሂብ ወደ ቀዝቃዛ ማከማቻ ሲተላለፍ በትክክል ደንቦችን መግለፅ ይችላሉ. ለምሳሌ, የ 7 ቀናት ውሂብ በጣም ፈጣን በሆነ ዲስክ ላይ ይተኛል, እና ሁሉም ነገር የቆየው ወደ ቀርፋፋ ይተላለፋል. ይህ ጥሩ ነው ምክንያቱም ስርዓቱ ከፍተኛ አፈፃፀም እንዲኖረው ስለሚያስችለው ወጪዎችን በመቆጣጠር እና በቀዝቃዛ ውሂብ ላይ ገንዘብ ሳያወጡ።

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

ልዩ ባህሪያት ጠቅታ ቤት

ሁሉም ነገር ማለት ይቻላል ጠቅታ ቤት እንደዚህ ያሉ “ማድመቂያዎች” አሉ ፣ ግን እነሱ በልዩ ደረጃ የተቀመጡ ናቸው - በሌሎች የውሂብ ጎታዎች ውስጥ የሌለ። ለምሳሌ, አንዳንድ ልዩ ባህሪያት እዚህ አሉ ጠቅታ ቤት:

  • ድርድሮች. በ ጠቅታ ቤት ለድርድሮች በጣም ጥሩ ድጋፍ, እንዲሁም ውስብስብ ስሌቶችን በእነሱ ላይ የማከናወን ችሎታ.
  • የውሂብ አወቃቀሮችን ማሰባሰብ. ይህ ከ "ገዳይ ባህሪያት" አንዱ ነው. ጠቅታ ቤት. ምንም እንኳን ከ Yandex የመጡ ሰዎች እኛ ውሂብ መሰብሰብ አንፈልግም ቢሉም ፣ ሁሉም ነገር በ ውስጥ ተደባልቋል ። ጠቅታ ቤትምክንያቱም ፈጣን እና ምቹ ነው.
  • ቁሳዊ እይታዎች. የውሂብ አወቃቀሮችን ከማዋሃድ ጋር፣ በቁሳቁስ የተሰሩ እይታዎች ምቹ እንዲያደርጉ ያስችሉዎታል በተመሳሳይ ሰዐት ድምር።
  • ClickHouse SQL. ይህ የቋንቋ ቅጥያ ነው። SQL በ ውስጥ ብቻ ከሚገኙ አንዳንድ ተጨማሪ እና ልዩ ባህሪያት ጋር ጠቅታ ቤት. ቀደም ሲል, እንደ ሁኔታው, በአንድ በኩል ማራዘሚያ, እና በሌላኛው በኩል ደግሞ ጉድለት ነበር. አሁን ከሞላ ጎደል ሁሉም ድክመቶች ሲነፃፀሩ SQL 92 አስወግደነዋል፣ አሁን ቅጥያ ብቻ ነው።
  • ላብላ- መግለጫዎች. አሁንም በአንዳንድ የውሂብ ጎታ ውስጥ አሉ?
  • ML- ድጋፍ. ይህ በተለያዩ የውሂብ ጎታዎች ውስጥ ነው, አንዳንዶቹ የተሻሉ ናቸው, አንዳንዶቹ የከፋ ናቸው.
  • ክፍት ምንጭ. ማስፋት እንችላለን ጠቅታ ቤት አንድ ላየ. አሁን ገብቷል። ጠቅታ ቤት ወደ 500 የሚጠጉ አበርካቾች፣ እና ይህ ቁጥር በየጊዜው እያደገ ነው።

ተንኮለኛ መጠይቆች

В ጠቅታ ቤት ተመሳሳይ ነገር ለማድረግ ብዙ የተለያዩ መንገዶች አሉ. ለምሳሌ የመጨረሻውን ዋጋ ከሠንጠረዥ ለመመለስ ሦስት የተለያዩ መንገዶች አሉ። ሲፒዩ (አራተኛው ደግሞ አለ, ግን የበለጠ እንግዳ ነው).

የመጀመሪያው ወደ ውስጥ ለመግባት ምን ያህል ምቹ እንደሆነ ያሳያል ጠቅታ ቤት ያንን ማረጋገጥ በሚፈልጉበት ጊዜ ጥያቄዎች ዋልታ በንኡስ መጠይቁ ውስጥ ተካትቷል. ይህ እኔ በግሌ በሌሎች የውሂብ ጎታዎች ውስጥ የጎደለኝ ነገር ነው። አንድን ነገር ከንዑስ መጠይቅ ጋር ማነፃፀር ከፈለግኩ በሌሎች የውሂብ ጎታዎች ውስጥ ስካላር ብቻ ከእሱ ጋር ሊወዳደር ይችላል እና ለብዙ አምዶች መፃፍ አለብኝ። JOIN. በ ጠቅታ ቤት tuple መጠቀም ይችላሉ:

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

ሁለተኛው መንገድ ተመሳሳይ ነው ነገር ግን አጠቃላይ ተግባርን ይጠቀማል argMax:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В ጠቅታ ቤት ብዙ ደርዘን አጠቃላይ ተግባራት አሉ ፣ እና አጣማሪዎችን ከተጠቀሙ ፣ ከዚያ በተዋሃዱ ህጎች መሠረት አንድ ሺህ ያህል ያገኛሉ። ArgMax - ከፍተኛውን እሴት ከሚቆጠሩት ተግባራት አንዱ፡ መጠይቁ እሴቱን ይመልሳል ተጠቃሚ_ተጠቃሚ, ከፍተኛው ዋጋ የሚደርስበት የተፈጠረ_በ:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

ASOF ይቀላቀሉ - ከተለያዩ ጊዜያት ጋር "ማጣበቅ" ረድፎች. ይህ ለዳታቤዝ ልዩ ባህሪ ነው እና የሚገኘው በ ውስጥ ብቻ ነው። kdb+. የተለያየ ጊዜ ያላቸው ሁለት ተከታታይ ጊዜያት ካሉ፣ ASOF ይቀላቀሉ በአንድ ጥያቄ ውስጥ እንዲቀይሩ እና እንዲጣበቁ ያስችላቸዋል. በአንድ ተከታታይ ጊዜ ላለው እያንዳንዱ እሴት፣ በሌላው ውስጥ ያለው የቅርቡ እሴት ይገኛል፣ እና በተመሳሳይ መስመር ይመለሳሉ፡

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

የትንታኔ ተግባራት

በደረጃው ውስጥ SQL-2003 እንደሚከተለው መጻፍ ይችላሉ-

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В ጠቅታ ቤት ይህ የማይቻል ነው - ደረጃውን አይደግፍም SQL-2003 እና ምናልባት በጭራሽ አይሆንም. ይልቁንስ በ ጠቅታ ቤት እንደሚከተለው መጻፍ የተለመደ ነው.

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ላምዳስ ቃል ገባሁ - እነሆ!

ይህ በስታንዳርድ ውስጥ የትንታኔ ጥያቄ አናሎግ ነው። SQL-2003: በሁለት መካከል ያለውን ልዩነት ይቆጥራል የጊዜ ማህተም, ቆይታ, ተራ - ብዙውን ጊዜ የትንታኔ ተግባራትን የምንቆጥረው ሁሉም ነገር. ውስጥ ጠቅታ ቤት እኛ በድርድር እንቆጥራቸዋለን፡ በመጀመሪያ ውሂቡን ወደ ድርድር እንሰበስባለን ፣ ከዚያ በኋላ በድርድር ላይ የፈለግነውን እናደርጋለን እና ከዚያ መልሰው እናሰፋዋለን። በጣም ምቹ አይደለም, ቢያንስ ቢያንስ ተግባራዊ ፕሮግራሚንግ ፍቅርን ይጠይቃል, ግን በጣም ተለዋዋጭ ነው.

ልዩ ተግባራት

በተጨማሪም ፣ በ ጠቅታ ቤት ብዙ ልዩ ባህሪያት. ለምሳሌ፣ ስንት ክፍለ ጊዜዎች በተመሳሳይ ጊዜ እንደሚሄዱ እንዴት መወሰን ይቻላል? ለክትትል የተለመደ ተግባር በአንድ ጥያቄ ውስጥ ከፍተኛውን ጭነት መወሰን ነው. ውስጥ ጠቅታ ቤት ለዚህ ዓላማ ልዩ ተግባር አለ-

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

በአጠቃላይ ፣ ClickHouse ለብዙ ዓላማዎች ልዩ ተግባራት አሉት።

  • ሩጫ ልዩነት, ሩጫ አከማቸ, ጎረቤት;
  • sumMap (ቁልፍ, እሴት);
  • timeSeriesGroupSum(uid፣ timestamp፣ value);
  • timeSeriesGroupRateSum(uid፣ timestamp፣ value);
  • skewPop፣ skewSamp፣ kurtPop፣ kurtSamp;
  • ከመሙላት ጋር / በማያያዝ;
  • ቀላል መሾመር ሪግሬሽን፣ ስቶካስቲክላይን ሪግሬሽን።

ይህ ሙሉ የባህሪዎች ዝርዝር አይደለም, ከነሱ ውስጥ 500-600 ብቻ ናቸው. ፍንጭ፡ ሁሉም ተግባራት በ ጠቅታ ቤት በስርዓት ሠንጠረዥ ውስጥ አለ (ሁሉም አልተመዘገቡም ፣ ግን ሁሉም አስደሳች ናቸው)

select * from system.functions order by name

ጠቅታ ቤት ስለራሱ ብዙ መረጃዎችን ያከማቻል, ጨምሮ የምዝግብ ማስታወሻዎች ጠረጴዛዎች, መጠይቅ_መዝገብ፣ የመከታተያ ምዝግብ ማስታወሻ ፣ የክወና መዝገብ ከዳታ ብሎኮች ጋር (ክፍል_ሎግ), የመለኪያዎች መዝገብ እና የስርዓት ምዝግብ ማስታወሻ, ብዙውን ጊዜ ወደ ዲስክ ይጽፋል. የመለኪያ ምዝግብ ማስታወሻው ነው። የጊዜ ተከታታይ в ጠቅታ ቤት በእውነቱ ጠቅታ ቤትዳታቤዙ ራሱ ሚና መጫወት ይችላል። የጊዜ ተከታታይ የውሂብ ጎታዎች, ስለዚህም እራሱን "ይበላል".

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ይህ ደግሞ ልዩ ነገር ነው - ጥሩ ስራ እየሰራን ስለሆነ የጊዜ ተከታታይለምንድነው የምንፈልገውን ሁሉ በራሳችን ውስጥ ማከማቸት ያቃተን? አንፈልግም። ፕሮሚትየስሁሉንም ነገር በራሳችን እናስቀምጣለን። ተገናኝቷል። ግራፋና እና እራሳችንን እንቆጣጠራለን. ቢሆንም, ከሆነ ጠቅታ ቤት ይወድቃል፣ አናይም - ለምን - ለዛ ነው ብዙውን ጊዜ ያንን የማያደርጉት።

ትልቅ ስብስብ ወይም ብዙ ትናንሽ ጠቅታ ቤት

ምን የተሻለ ነው - አንድ ትልቅ ክላስተር ወይም ብዙ ትናንሽ ClickHouses? ባህላዊ አቀራረብ ወደ DWH ለእያንዳንዱ መተግበሪያ እቅዶች የተመደቡበት ትልቅ ስብስብ ነው። ወደ የመረጃ ቋቱ አስተዳዳሪ መጥተናል - ንድፍ ይስጡን ፣ እና እኛ ተሰጥቶናል-

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

В ጠቅታ ቤት በተለየ መንገድ ማድረግ ይችላሉ. እያንዳንዱ መተግበሪያ የራሱ ማድረግ ይችላል ጠቅታ ቤት:

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ከእንግዲህ ትልቅ ጭራቅ አያስፈልገንም። DWH እና የማይተባበሩ አስተዳዳሪዎች። ለእያንዳንዱ መተግበሪያ የራሱን መስጠት እንችላለን ጠቅታ ቤት, እና ገንቢው እራሱ ማድረግ ይችላል, ጀምሮ ጠቅታ ቤት ለመጫን በጣም ቀላል እና ውስብስብ አስተዳደር አያስፈልገውም:

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ግን ብዙ ካለን ጠቅታ ቤት, እና ብዙ ጊዜ ማዋቀር ያስፈልግዎታል, ከዚያ ይህን ሂደት በራስ-ሰር ማድረግ ይፈልጋሉ. ለዚህ, ለምሳሌ, መጠቀም እንችላለን ኩባንያቶች и ጠቅታ ቤት- ኦፕሬተር. ውስጥ Kubernetes ClickHouse "በጠቅታ" ማድረግ ትችላለህ: አንድ አዝራር ጠቅ ማድረግ እችላለሁ, መግለጫውን ማስኬድ እና የውሂብ ጎታ ዝግጁ ነው. ወዲያውኑ እቅድ መፍጠር ይችላሉ, እዚያ መለኪያዎችን መጫን ይጀምሩ, እና ከ 5 ደቂቃዎች በኋላ ዳሽቦርድ ዝግጁ አለኝ ግራፋና. በጣም ቀላል ነው!

መጨረሻው ምንድን ነው?

እና ስለዚህ, ጠቅታ ቤት - ይህ:

  • በፍጥነት. ይህንን ሁሉም ሰው ያውቃል።
  • በቀላሉ. ትንሽ አከራካሪ ነገር ግን ለመማር ከባድ፣ ለመዋጋት ቀላል ይመስለኛል። እንዴት እንደሆነ ከተረዱ ጠቅታ ቤት ይሰራል, ሁሉም ነገር በጣም ቀላል ነው.
  • ሁለንተናዊ. ለተለያዩ ሁኔታዎች ተስማሚ ነው- DWH፣ የጊዜ ተከታታይ፣ የምዝግብ ማስታወሻ ማከማቻ. ግን አይደለም OLTP የመረጃ ቋት (ዳታቤዝ)፣ ስለዚህ አጫጭር ማስገቢያዎችን ለመስራት እና እዚያ ለማንበብ አይሞክሩ።
  • የሚስብ. አብሮ የሚሰራው ሳይሆን አይቀርም ጠቅታ ቤት፣ ብዙ አስደሳች ደቂቃዎችን በጥሩ እና በመጥፎ ስሜት አጣጥመዋል። ለምሳሌ, አዲስ ልቀት ወጣ, ሁሉም ነገር መስራት አቁሟል. ወይም ለሁለት ቀናት ከአንድ ተግባር ጋር ሲታገሉ, ነገር ግን በቴሌግራም ቻት ውስጥ ከጥያቄ በኋላ, ተግባሩ በሁለት ደቂቃዎች ውስጥ ተፈትቷል. ወይም ፣ በሌሻ ሚሎቪዶቭ ዘገባ ላይ በተደረገው ኮንፈረንስ ፣ ቅጽበታዊ ገጽ እይታ ጠቅታ ቤት ስርጭቱን ሰበረ HighLoad ++. እንደዚህ አይነት ነገሮች በየጊዜው ይከሰታሉ እናም ህይወታችንን ያደርጉታል ጠቅታ ቤት ብሩህ እና አስደሳች!

የዝግጅት አቀራረብ ሊታይ ይችላል እዚህ.

ወደ ClickHouse መንቀሳቀስ፡ ከ3 ዓመታት በኋላ

ለረጅም ጊዜ ሲጠበቅ የነበረው የከፍተኛ ጭነት ስርዓቶች ገንቢዎች ስብሰባ በ HighLoad ++ እ.ኤ.አ ኖቬምበር 9 እና 10 በስኮልኮቮ ውስጥ ይካሄዳል. በመጨረሻም፣ የHighLoad++ ሃይል በመስመር ላይ መጠቅለል ስለማይችል ከመስመር ውጭ ኮንፈረንስ ይሆናል (ምንም እንኳን ሁሉም ጥንቃቄዎች ቢደረጉም)።

ለኮንፈረንሱ እኛ አግኝተን እናሳይሃለን ስለቴክኖሎጂ ከፍተኛ እድሎች ጉዳዮች፡ HighLoad ++ ነበር፣ እና በሁለት ቀናት ውስጥ Facebook፣ Yandex፣ VKontakte፣ Google እና Amazon እንዴት እንደሚሰሩ የሚማሩበት ብቸኛው ቦታ ነው።

ከ 2007 ጀምሮ ያለማቋረጥ ስብሰባዎቻችንን በማካሄድ ዘንድሮ ለ14ኛ ጊዜ እንገናኛለን። በዚህ ጊዜ ውስጥ ኮንፈረንሱ 10 ጊዜ አድጓል, ባለፈው አመት የኢንዱስትሪው ቁልፍ ክስተት 3339 ተሳታፊዎችን ሰብስቧል, 165 የሪፖርቶች እና ስብሰባዎች ተናጋሪዎች, እና 16 ትራኮች በተመሳሳይ ጊዜ ይጫወቱ ነበር.
ባለፈው አመት ለእርስዎ 20 አውቶቡሶች, 5280 ሊትር ሻይ እና ቡና, 1650 ሊትር የፍራፍሬ መጠጦች እና 10200 ጠርሙስ ውሃ ነበር. እና ሌላ 2640 ኪሎ ግራም ምግብ, 16 ሳህኖች እና 000 ኩባያዎች. በነገራችን ላይ እንደገና ጥቅም ላይ ከዋለ ወረቀት በተሰበሰበው ገንዘብ 25 የኦክ ችግኞችን ተከልን 🙂

ቲኬቶችን መግዛት ይቻላል እዚህስለ ጉባኤው ዜና መቀበል - እዚህ, እና በሁሉም ማህበራዊ አውታረ መረቦች ውስጥ ይነጋገሩ: ቴሌግራም, Facebook, Vkontakte и Twitter.

ምንጭ: hab.com

አስተያየት ያክሉ