ځینې وختونه تاسو حتی یخ ته اړتیا لرئ - په هغه حالتونو کې چې تاسو په هر سرور او سلګونو سرورونو کې لسګونه یا حتی په سلګونو ټیرابایټونه لرئ. دلته یو حل شتون لري چې ما د خپلو همکارانو څخه د Yandex.Metrica څخه اخیستی دی. زه به دا ټولو ته وړاندیز نه کړم - دا ولولئ او د ځان لپاره پریکړه وکړئ چې ایا دا مناسب دی که نه.
که تاسو وکړئ برخه ضمیمه کړئ د مختلف جوړښت سره تقسیم کړئ، نو ClickHouse به تاسو ته ووایي چې دا ممکنه نه ده. دا د حل لاره ده. لومړی دا دی چې د زاړه جوړښت سره د MergeTree ډول لنډمهاله جدول رامینځته کړئ ، د اتصال په کارولو سره ډیټا ضمیمه کړئ ، او د بدلون پوښتنه وکړئ. بیا تاسو کولی شئ دا ډاټا کاپي یا انتقال کړئ او بیا ضمیمه کړئ، یا غوښتنه وکاروئ د جدول حرکت کولو تقسیم بدل کړئ.
اوس دویمه پوښتنه دا ده چې ایا Btrfs کارول کیدی شي. د پیل کولو لپاره، که تاسو LVM لرئ، نو د LVM سنیپ شاټونه کافي دي، او د فایل سیسټم کیدای شي ext4 وي، دا مهمه نده. د Btrts سره، هرڅه د دې کارولو په تجربه پورې اړه لري. دا یو بالغ فایل سیسټم دی، مګر لاهم پدې اړه ځینې شکونه شتون لري چې هر څه به په یوه ځانګړي سناریو کې په عمل کې څنګه کار وکړي. زه به د دې کارولو وړاندیز ونه کړم پرته لدې چې تاسو په تولید کې Btrfs نلرئ.
د معلوماتو د بیا تنظیمولو اوسني غوره کړنې کوم دي؟
د بیا شریکولو مسله پیچلې او څو اړخیزه ده. دلته ډیری احتمالي ځوابونه شتون لري. تاسو کولی شئ د یوې خوا څخه لاړ شئ او دا ووایاست - ClickHouse د جوړ شوي resharding ځانګړتیا نلري. مګر زه ویره لرم چې دا ځواب به د هیچا سره مناسب نه وي. له همدې امله، تاسو کولی شئ له بل لوري لاړ شئ او ووایاست چې ClickHouse د معلوماتو بیا ځای کولو لپاره ډیری لارې لري.
که کلستر د ځای څخه تیریږي یا دا نشي کولی بار اداره کړي، تاسو نوي سرورونه اضافه کړئ. مګر دا سرورونه د ډیفالټ له مخې خالي دي ، په دوی کې هیڅ معلومات شتون نلري ، هیڅ بار شتون نلري. تاسو اړتیا لرئ ډاټا بیا تنظیم کړئ ترڅو دا په مساوي ډول په نوي، لوی کلستر کې خپور شي.
لومړۍ لاره چې دا ترسره کیدی شي د غوښتنې په کارولو سره نوي سرورونو ته د برخې برخې کاپي کول دي د جدول د راوړلو تقسیم بدل کړئ. د مثال په توګه، تاسو د میاشتې لخوا ویشونه درلودل، او تاسو د 2017 لومړۍ میاشت واخلئ او نوي سرور ته یې کاپي کړئ، بیا دریمه میاشت بل نوي سرور ته کاپي کړئ. او تاسو دا تر هغه وخته پورې کوئ چې دا ډیر یا لږ هم شي.
لیږد یوازې د هغو برخو لپاره ترسره کیدی شي چې د ثبت کولو پرمهال نه بدلیږي. د تازه برخو لپاره، ثبت کول باید غیر فعال وي، ځکه چې د دوی لیږد اټومي نه دی. که نه نو، تاسو به په ډاټا کې د نقلونو یا تشو سره پای ته ورسیږئ. په هرصورت، دا طریقه عملي ده او په اغیزمنه توګه کار کوي. چمتو شوي کمپریس شوي برخې په شبکه کې لیږدول کیږي، دا دا دی چې ډاټا نه کمپریس شوي یا بیا کوډ شوي.
دا طریقه یو نیمګړتیا لري، او دا د شارډینګ سکیم پورې اړه لري، ایا تاسو د دې شارډینګ سکیم سره ژمنه کړې، تاسو کوم شارډینګ کیلي لرئ. ستاسو په مثال کې د میټریک سره قضیه کې، د شارډینګ کیلي د لارې هش دی. کله چې تاسو توزیع شوی جدول غوره کړئ، دا په یوځل کې د کلستر ټولو شارډونو ته ځي او له هغه ځایه ډاټا اخلي.
دا پدې مانا ده چې دا واقعیا تاسو ته مهمه نده چې کوم معلومات په کوم شارډ پای ته رسیدلي. اصلي شی دا دی چې د یوې لارې په اوږدو کې ډاټا په یوه شارډ کې پای ته رسیږي، مګر کوم یو مهم نه دی. په دې حالت کې، د چمتو شوي ویشونو لیږد مناسب دی، ځکه چې د انتخاب پوښتنو سره به تاسو بشپړ معلومات هم ترلاسه کړئ - که د بیا شارډ کولو دمخه یا وروسته، سکیم واقعیا مهمه نده.
مګر داسې قضیې شتون لري چې ډیر پیچلي دي. که د غوښتنلیک منطق په کچه تاسو په ځانګړي شارډینګ سکیم تکیه کوئ ، چې دا پیرودونکی په داسې او داسې شارډ کې موقعیت لري ، او غوښتنه مستقیم هلته لیږل کیدی شي ، نه توزیع شوي میز ته. یا تاسو د ClickHouse خورا وروستي نسخه کاروئ او تنظیم یې فعال کړی نه کارول شوي شارډونه غوره کړئ. په دې حالت کې، د انتخاب پوښتنې په جریان کې، د کومې برخې بیان به تحلیل شي او دا به محاسبه شي چې د شارډینګ سکیم سره سم کوم شارډونه کارول کیږي. دا په دې شرط کار کوي چې ډاټا په سمه توګه د دې شارډینګ سکیم سره سم ویشل شوي. که تاسو دوی په لاسي ډول تنظیم کړئ، لیکنه ممکن بدلون ومومي.
نو دا د میتود نمبر لومړی دی. او زه ستاسو ځواب ته په تمه یم، ایا دا طریقه مناسبه ده، یا راځئ چې حرکت وکړو.
ولادیمیر کولوبایف، په Avito کې د سیسټم مشر مدیر: الیکسي، هغه طریقه چې تاسو یې یادونه کړې هغه ډیر ښه کار نه کوي کله چې تاسو د لوستلو په شمول د بار خپرولو ته اړتیا لرئ. موږ کولی شو یوه برخه واخلو چې میاشتنۍ وي او تیره میاشت بل نوډ ته واخلو ، مګر کله چې د دې ډیټا لپاره غوښتنه راشي ، موږ به یې یوازې پورته کړو. مګر موږ غواړو ټول کلستر بار کړو، ځکه چې که نه نو، د یو څه وخت لپاره د لوستلو ټول بار به د دوو شارډونو لخوا پروسس شي.
الیکسي میلویدوف: دلته ځواب عجيب دی - هو، دا خراب دی، مګر دا ممکن کار وکړي. زه به دقیقا تشریح کړم چې څنګه. دا د بار سناریو ته د کتلو ارزښت لري چې ستاسو د معلوماتو شاته راځي. که دا د څارنې ډاټا وي، نو موږ تقریبا یقینا ووایو چې ډیری غوښتنې د تازه معلوماتو لپاره دي.
تاسو نوي سرورونه نصب کړل، زاړه برخې یې لیږدولې، مګر دا هم بدل شوي چې تازه معلومات څنګه ثبت کیږي. او تازه معلومات به په ټول کلستر کې خپاره شي. په دې توګه، یوازې پنځه دقیقې وروسته، د تیرو پنځو دقیقو غوښتنې به په مساوي ډول کلستر بار کړي؛ د یوې ورځې وروسته، د XNUMX ساعتونو غوښتنې به په مساوي ډول کلستر بار کړي. او د تیرې میاشتې غوښتنې، له بده مرغه، یوازې د کلستر سرورونو برخې ته ځي.
مګر ډیری وختونه تاسو به په ځانګړي ډول د فبروري 2019 لپاره غوښتنې ونه لرئ. ډیری احتمال، که غوښتنې 2019 ته لاړې شي، نو بیا به دوی د ټول 2019 لپاره وي - د یوې لویې مودې لپاره، او نه د ځینې کوچنۍ لړۍ لپاره. او دا ډول غوښتنې به په مساوي ډول د کلسټر بار کولو وړ وي. مګر په عموم کې، ستاسو تبصره په بشپړه توګه سمه ده چې دا یو اډ هاک حل دی چې ډاټا په بشپړ ډول مساوي نه خپروي.
زه د پوښتنې ځواب لپاره یو څو نور ټکي لرم. یو له دوی څخه د دې په اړه دی چې څنګه په پیل کې د شارډینګ سکیم ډیزاین کړئ ترڅو بیا شارډ کول د لږ درد لامل شي. دا تل ممکنه نه ده.
زه به سمدلاسه ووایم چې دا حل ډیر پیچلی او یو څه لږ ګټور دی. ګټه دا ده چې دا ډاټا په بشپړ ډول د هغه نمونې سره سم چې تاسو یې مشخص کوئ. مګر د افادیت نیمګړتیا دا ده چې دا په هیڅ ډول نه تکراریږي. دا د یو کلستر سکیما څخه بل کلستر سکیما ته ډاټا کاپي کوي.
دا پدې مانا ده چې د دې کار کولو لپاره تاسو باید دوه کلسترونه ولرئ. دوی کولی شي په ورته سرورونو کې موقعیت ولري، مګر، سره له دې، ډاټا به په تدریجي ډول نه لیږدول کیږي، مګر کاپي کیږي.
د مثال په توګه، څلور سرورونه وو، اوس اته دي. تاسو په ټولو سرورونو کې یو نوی توزیع شوی جدول جوړ کړئ، نوي محلي میزونه او د کلک هاؤس کاپير پیل کړئ، په دې کې د کار سکیم په ګوته کوي چې دا باید له هغه ځایه ولوستل شي، د نوي شارډینګ سکیم ومني او هلته ډاټا انتقال کړي. او په زړو سرورونو کې به تاسو د اوس په پرتله یو نیم چنده ډیر ځای ته اړتیا ولرئ ، ځکه چې زاړه ډیټا باید په دوی کې پاتې شي ، او د ورته زاړه ډیټا نیمایي به د دوی په سر کې راشي. که تاسو دمخه فکر کاوه چې ډاټا باید بیاځل شي او ځای شتون ولري، نو دا طریقه مناسبه ده.
د کلک هاؤس کاپیر دننه څنګه کار کوي؟ دا ټول کارونه په یوه شارډ کې د یو میز د یوې برخې پروسس کولو لپاره د دندو په سیټ کې ماتوي. دا ټولې دندې په موازي ډول اجرا کیدی شي ، او د کلیک هاوس کاپير په ډیری مواردو کې په مختلف ماشینونو کې پرمخ وړل کیدی شي ، مګر هغه څه چې دا د یوې برخې لپاره کوي د داخل کولو انتخاب پرته بل څه ندي. ډاټا لوستل کیږي، کمپریشن شوی، بیا ویشل شوی، بیا بیا بیا کمپریس شوی، چیرته لیکل شوی، او بیا ترتیب شوی. دا یوه سخته پریکړه ده.
څه شی کیدی شي؟ دا به ښه وي چې د ClickHouse اسنادو کې یو مثال وړاندې کړئ چې څنګه په خپل کور کې یو کوچنی کلستر ځای په ځای کړئ - په ډاکر کې، په LXC کې، شاید د ځواب وړ لوبې کتاب جوړ کړئ، ځکه چې مختلف خلک مختلف ګمارنې لري. دا به ډیر ساده کړي. کله چې تاسو په پنځو دقیقو کې یو کلستر واخلئ او ځای په ځای کړئ، نو دا خورا اسانه ده چې د یو څه پیژندلو هڅه وکړئ. دا خورا ډیر اسانه دی ، ځکه چې د تولید نسخه ته فشار ورکول چې تاسو یې ندي ازمول شوي د هیڅ ځای لپاره سړک دی. ځینې وختونه دا کار کوي او ځینې وختونه دا نه کوي. او له همدې امله، د بریالیتوب هیله بده ده.
ماکسیم کوتیاکوف، لوړ پوړی انجنیر ایویټو: زه به د لوی شرکتونو لخوا د ستونزو له لړۍ څخه د ازموینې چاپیریال په اړه یو څه اضافه کړم. موږ د کلک هاوس منلو بشپړ کلستر لرو؛ د ډیټا سکیمونو او تنظیماتو شرایطو کې ، دا د هغه څه دقیق کاپي ده چې په تولید کې دي. دا کلستر د لږ تر لږه منابعو سره په کافي اندازه په کانټینرونو کې ځای پر ځای شوی دی. موږ هلته د تولید ډیټا یوه ټاکلې سلنه لیکو ، له نېکه مرغه دا امکان لري چې په کافکا کې جریان تکرار کړئ. دلته هرڅه همغږي شوي او اندازه شوي دي - دواړه د ظرفیت او جریان له مخې ، او په تیوري کې ، نور ټول شیان مساوي دي ، دا باید د میټریکونو له مخې د تولید په څیر چلند وکړي. هرڅه چې احتمالي چاودیدونکي وي لومړی په دې سټینډ کې اچول کیږي او د څو ورځو لپاره چمتو کیږي. مګر په طبیعي توګه، دا حل ګران، ستونزمن او غیر صفر ملاتړ لګښت لري.
الیکسي میلویدوف: زه به تاسو ته ووایم چې د Yandex.Metrica څخه زموږ د ملګرو د ازموینې چاپیریال څه ډول دی. یو کلستر 600-بې ساري سرورونه درلودل، بل یې 360 درلودل، او دریم او څو کلسترونه شتون لري. د دوی د یوې لپاره د ازموینې چاپیریال په ساده ډول دوه شارډونه دي چې په هر یو کې دوه نقلونه لري. ولې دوه ټوټې؟ نو تاسو یوازې نه یاست. او دلته باید نقلونه هم وي. یوازې یو ټاکلی لږترلږه مقدار چې تاسو یې کولی شئ.
دا ازموینې چاپیریال تاسو ته اجازه درکوي چې وګورئ چې ستاسو پوښتنې کار کوي او که کوم لوی مات شوی وي. مګر ډیری وختونه ستونزې د بشپړ مختلف طبیعت څخه رامینځته کیږي ، کله چې هرڅه کار کوي ، مګر په بار کې ځینې کوچني بدلونونه شتون لري.
اجازه راکړئ تاسو ته یو مثال درکړم. موږ پریکړه وکړه چې د ClickHouse نوې نسخه نصب کړو. دا د ازموینې چاپیریال کې ځړول شوی، اتوماتیک ازموینې پخپله په Yandex.Metrica کې بشپړ شوي، کوم چې په زاړه نسخه او نوي نسخه کې ډاټا پرتله کوي، ټول پایپ لاین چلوي. او البته، زموږ د CI شنه ازموینې. که نه نو موږ به حتی دا نسخه وړاندیز نه وای کړې.
هر څه سم دي. موږ تولید ته حرکت پیل کوو. زه یو پیغام ترلاسه کوم چې په ګرافونو کې بار څو ځله ډیر شوی. موږ نسخه بیرته راګرځوو. زه ګراف ته ګورم او ګورم: بار په حقیقت کې د رول آوټ په جریان کې څو ځله ډیر شوی ، او کله چې دوی راوتلی بیرته راټیټ شو. بیا موږ نسخه بیرته راګرځول پیل کړل. او بار په همدې ډول زيات شو او بېرته په هماغه ډول ښکته شو. نو پایله دا ده: بار د ترتیب له امله ډیر شوی، هیڅ حیرانتیا نشته.
بیا دا ستونزمنه وه چې همکاران قانع کړي چې نوې نسخه نصب کړي. زه وايم: "ښه ده، راوګرځئ. خپلې ګوتې تیرې وساتئ، هرڅه به کار وکړي. اوس په ګرافونو کې بار ډیر شوی، مګر هرڅه سم دي. هلته یی ځوړند کړه." په عموم کې، موږ دا وکړل، او دا دی - نسخه د تولید لپاره خپره شوه. مګر نږدې د هر ترتیب سره ورته ستونزې رامینځته کیږي.
د وژنې پوښتنې باید پوښتنې ووژني، مګر داسې نه کیږي. ولې؟
یو کارن، یو ډول شنونکی، ما ته راغی او یوه غوښتنه یې جوړه کړه چې زما د ClickHouse کلستر یې واچوله. ځینې نوډ یا ټول کلستر، پدې پورې اړه لري چې کوم نقل یا شارډ غوښتنه شوې. زه ګورم چې په دې سرور کې د CPU ټولې سرچینې په شیلف کې دي، هرڅه سور دي. په ورته وخت کې، ClickHouse پخپله غوښتنو ته ځواب ورکوي. او زه لیکم: "مهرباني وکړئ ما ته وښایاست، د پروسې لیست، کومې غوښتنې دا جنون رامینځته کړی."
زه دا غوښتنه ومومم او د وژلو لپاره یې لیکم. او زه ګورم چې هیڅ شی نه کیږي. زما سرور په شیلف کې دی، کلیک هاوس بیا ماته ځینې امرونه راکوي، ښیې چې سرور ژوندی دی، او هرڅه عالي دي. مګر زه د کارونکي په ټولو غوښتنو کې تخریب لرم ، تخریب په کلیک هاوس کې د ریکارډونو سره پیل کیږي ، او زما د وژنې پوښتنه کار نه کوي. ولې؟ ما فکر کاوه چې د وژنې پوښتنې باید پوښتنې ووژني، مګر داسې نه کیږي.
اوس به یو عجیب ځواب وي. خبره دا ده چې د وژنې پوښتنې پوښتنې نه وژني.
د وژنې پوښتنې یو کوچنی بکس چیک کوي چې "زه غواړم دا پوښتنه ووژل شي." او غوښتنه پخپله دا بیرغ ګوري کله چې د هر بلاک پروسس کوي. که دا تنظیم شوی وي، غوښتنه کار کوي. دا معلومه شوه چې هیڅوک غوښتنه نه وژني، هغه باید پخپله هرڅه وګوري او ودروي. او دا باید په ټولو قضیو کې کار وکړي چیرې چې غوښتنه د ډیټا بلاکس پروسس کولو حالت کې وي. دا به د معلوماتو راتلونکی بلاک پروسس کړي، بیرغ وګوري، او ودروي.
دا په هغو قضیو کې کار نه کوي چیرې چې غوښتنه په ځینو عملیاتو کې بنده شوې وي. ریښتیا، ډیری احتمال دا ستاسو قضیه نده، ځکه چې ستاسو په وینا، دا د ټن سرور سرچینې کاروي. دا ممکنه ده چې دا د بهرني ترتیب او ځینې نورو توضیحاتو په صورت کې کار نه کوي. مګر په عموم کې دا باید پیښ نشي، دا یوه ستونزه ده. او یوازینی شی چې زه یې وړاندیز کولی شم د ClickHouse تازه کول دي.
د لوستلو بار لاندې د غبرګون وخت څنګه محاسبه کړئ؟
دلته یو میز شتون لري چې د توکو مجموعه ذخیره کوي - مختلف کاونټرونه. د لیکو شمیر نږدې سل ملیون دی. ایا دا ممکنه ده چې د وړاندوینې وړ ځواب وخت حساب کړئ که تاسو د 1K توکو لپاره 1K RPS واچوئ؟
د شرایطو په پام کې نیولو سره، موږ د لوستلو بار په اړه خبرې کوو، ځکه چې د لیکلو سره کومه ستونزه شتون نلري - حتی زر، حتی سل زره، او ځینې وختونه څو ملیون قطارونه داخل کیدی شي.
د لوستلو غوښتنې خورا توپیر لري. په 1 انتخاب کې، ClickHouse کولی شي په هره ثانیه کې لسګونه زره غوښتنې ترسره کړي، نو حتی د یوې کیلي لپاره غوښتنې به دمخه ځینې سرچینو ته اړتیا ولري. او دا ډول ټکي پوښتنې به د ځینې کلیدي ارزښت ډیټابیسونو په پرتله خورا ستونزمن وي ، ځکه چې د هر لوستلو لپاره دا اړینه ده چې د شاخص په واسطه د ډیټا بلاک ولولئ. زموږ شاخص هر ریکارډ نه، بلکې هر سلسله په ګوته کوي. دا دی، تاسو باید ټوله سلسله ولولئ - دا په ډیفالټ 8192 لینونه دي. او تاسو باید د 64 KB څخه تر 1 MB پورې د کمپریس شوي ډیټا بلاک ډیکمپریس کړئ. عموما، دا ډول هدف شوي پوښتنې د بشپړولو لپاره څو ملی ثانیې وخت نیسي. مګر دا ترټولو ساده اختیار دی.
کریل شواکوف: زه به مشوره درکړم که چیرې عادي حسابونه شتون ولري. دا یو مناسب معیاري حالت دی کله چې ClickHouse یو ډول کاونټر ذخیره کوي. زه یو کارن لرم، هغه د داسې یو هیواد څخه دی، او د دریمې برخې څخه دی، او زه اړتیا لرم چې په تدریجي ډول یو څه زیات کړم. MySQL واخلئ، یو ځانګړی کیلي جوړه کړئ - په MySQL کې دا یو نقل کیلي ده، او په PostgreSQL کې دا یو شخړه ده - او د جمع نښه اضافه کړئ. دا به ډیر ښه کار وکړي.
کله چې تاسو ډیر معلومات نلرئ، نو د ClickHouse په کارولو کې ډیر څه شتون نلري. منظم ډیټابیسونه شتون لري او دوی دا ښه کوي.
زه په ClickHouse کې څه شی کولی شم چې نور معلومات په کیچ کې وي؟
په دې حالت کې، تاسو په ClickHouse کې یو شاخص جوړ کړئ، چې لومړی ساحه به یې نیټه او وخت وي. او ترټولو لوی ډیټا کټ آف به د نیټې رینج پراساس وي. د ټاکل شوې نیټې حد کې ، د یوې قاعدې په توګه ، دا دمخه ممکنه ده چې د بشپړ متن لټون ترسره کړئ ، حتی د بریټ ځواک میتود په کارولو سره لکه په کارولو سره. په کلیک هاؤس کې ورته آپریټر ترټولو مؤثره آپریټر دی چې تاسو یې موندلی شئ. که تاسو یو څه ښه ومومئ، ما ته ووایاست.
مګر بیا هم، لکه یو بشپړ سکین دی. او بشپړ سکین نه یوازې په CPU کې ، بلکه په ډیسک کې هم ورو کیدی شي. که ناڅاپه تاسو هره ورځ یو ټیرابایټ ډیټا ولرئ، او تاسو د ورځې په اوږدو کې د یوې کلمې لټون کوئ، نو تاسو باید د ټیرابایټ سکین کړئ. او دا شاید په منظم هارډ ډرایو کې وي ، او په پای کې به دوی په داسې ډول بار شي چې تاسو به د SSH له لارې دې سرور ته لاسرسی ونلرئ.
په دې حالت کې، زه چمتو یم چې یو بل کوچنی چال وړاندې کړم. دا تجربه ده - دا ممکن کار وکړي، دا ممکن نه وي. ClickHouse د ټریګرام بلوم فلټرونو په شکل کې د بشپړ متن شاخصونه لري. په اریناډاټا کې زموږ همکارانو دمخه دا شاخصونه هڅه کړې ، او دوی ډیری وختونه په سمه توګه کار کوي لکه څنګه چې اراده شوي.
د دې په سمه توګه کارولو لپاره، تاسو باید په سمه توګه ښه پوهه ولرئ چې دوی څنګه کار کوي: د ټریګرام بلوم فلټر څه شی دی او څنګه یې اندازه غوره کړئ. زه کولی شم ووایم چې دوی به په ځینو نادرو جملو کې د پوښتنو لپاره مرسته وکړي، فرعي سټینګونه چې په ندرت سره په ډیټا کې موندل کیږي. په دې حالت کې، فرعي رینجونه به د شاخصونو لخوا وټاکل شي او لږ معلومات به لوستل شي.
راځئ چې ووایو زه د قطار حد لرې کړم او بیا پوښتنه پرمخ وړم. بیا به زه لاندې استثنا وګورم - ترتیب فعال شوی د نیټې لخوا د ځواک شاخص. زه نشم کولی دا پوښتنه بشپړه کړم که ما د نیټې حد نه وي مشخص کړی. تاسو اړتیا نلرئ په شنونکو تکیه وکړئ ترڅو دا په لاسي ډول مشخص کړئ. یو عادي قضیه ده کله چې د نیټې حد لیکل کیږي چیرې چې د اونۍ تر مینځ د پیښې نیټه وي. او بیا دوی په ساده ډول په غلط ځای کې بریکٹ مشخص کړ، او پرځای یې دا یا - یا د URL میچ وګرځید. که چیرې هیڅ حد شتون ونلري، نو دا به د URL کالم وګرځوي او یوازې یو ټن سرچینې ضایع کړي.
سربیره پردې، ClickHouse دوه لومړیتوب ترتیبات لري. له بده مرغه، دوی خورا ابتدايي دي. یو په ساده ډول ویل کیږي لومړیتوب. که لومړیتوب ≠ 0، او غوښتنې د یو څه لومړیتوب سره اجرا کیږي، مګر یوه غوښتنه چې د لومړیتوب ارزښت څخه کم وي، چې د لوړ لومړیتوب په معنی وي، اجرا کیږي، نو بیا د لومړیتوب ارزښت سره غوښتنه، چې د ټیټ لومړیتوب معنی لري. ، په ساده ډول تعلیق شوی او پدې وخت کې به کار ونکړي.
دا یو ډیر خام ترتیب دی او د قضیو لپاره مناسب نه دی چیرې چې کلستر دوامداره بار لري. مګر که تاسو لنډې، پټې غوښتنې لرئ چې مهمې دي، او کلستر اکثرا بې کاره وي، دا ترتیب مناسب دی.
راتلونکی لومړیتوب ترتیب بلل کیږي د OS موضوع لومړیتوب. دا په ساده ډول د لینکس مهالویش لپاره د ټولو غوښتنې اجرا کولو تارونو لپاره ښه ارزښت ټاکي. دا داسې کار کوي، مګر دا لاهم کار کوي. که تاسو لږ تر لږه ښه ارزښت وټاکئ - دا په ارزښت کې ترټولو لوی دی، او له همدې امله ټیټ لومړیتوب - او د لوړ لومړیتوبونو غوښتنو لپاره -19 ترتیب کړئ، نو CPU به د ټیټ لومړیتوب غوښتنې د لوړ لومړیتوبونو په پرتله څلور چنده کم مصرف کړي.
تاسو اړتیا لرئ د غوښتنې اعظمي اجرا کولو وخت تنظیم کړئ - ووایه ، پنځه دقیقې. د پوښتنو اجرا کولو لږترلږه سرعت خورا ښه شی دی. دا ترتیب د اوږدې مودې راهیسې شتون لري، او دا اړینه ده چې نه یوازې دا ثابته کړئ چې کلیک هاؤس ورو نه کوي، مګر دا مجبوروي.
تصور وکړئ، تاسو تنظیم کړئ: که ځینې پوښتنې په هره ثانیه کې له یو ملیون قطارونو څخه کم پروسس کوي، تاسو دا نشئ کولی. دا زموږ ښه نوم، زموږ ښه ډیټابیس بدناموي. راځئ چې یوازې دا منع کړو. په حقیقت کې دوه ترتیبات شتون لري. یو ته ویل کیږي دقیق اجرا کولو سرعت - په هره ثانیه کې په لیکو کې، او دویمه د دقیقې اجرا کولو سرعت چک کولو دمخه د وخت پای ته ویل کیږي - په ډیفالټ ډول پنځلس ثانیې. دا دی، پنځلس ثانیې امکان لري، او بیا، که دا ورو وي، نو یوازې یو استثنا وغورځوئ او غوښتنه یې لغوه کړئ.
تاسو هم اړتیا لرئ چې کوټې تنظیم کړئ. ClickHouse د جوړ شوي کوټې ځانګړتیا لري چې د سرچینو مصرف حسابوي. مګر، له بده مرغه، د هارډویر سرچینې نه لکه CPU، ډیسکونه، مګر منطقي - د پروسس شویو غوښتنو شمیر، لاینونه او بایټ لوستل کیږي. او تاسو کولی شئ تنظیم کړئ ، د مثال په توګه ، په پنځه دقیقو کې اعظمي سل غوښتنې او په ساعت کې زر غوښتنې.
ولې دا مهمه ده؟ ځکه چې ځینې تحلیلي پوښتنې به په مستقیم ډول د ClickHouse پیرودونکي څخه په لاسي ډول ترسره شي. او ټول به ښه شي. مګر که تاسو په خپل شرکت کې پرمختللي شنونکي لرئ، دوی به یو سکریپټ ولیکي، او ممکن په سکریپټ کې تېروتنه وي. او دا تېروتنه به د دې لامل شي چې غوښتنه په لامحدود لوپ کې اجرا شي. دا هغه څه دي چې موږ یې باید د ځان ساتنه وکړو.
ایا دا ممکنه ده چې د یوې پوښتنې پایلې لسو پیرودونکو ته ورکړئ؟
ستونزه دا ده چې موږ د منځګړیتوب ډاټا د زیرمې یا زیرمې پایلې نلرو. د عملیاتي سیسټم د پاڼې زیرمه شتون لري، کوم چې به تاسو د ډیسک څخه بیا د ډیټا لوستلو مخه ونیسي، مګر، له بده مرغه، ډاټا به لا هم ډیمپریس، غیر منظم او بیا پروسس شي.
زه غواړم په یو ډول د دې څخه مخنیوی وکړم، یا د منځګړیتوب ډیټا کیچ کولو سره، یا په یو ډول کتار کې د ورته پوښتنو قطار کولو او د پایلو کیچ اضافه کولو سره. موږ دا مهال په پراختیا کې د پلولو غوښتنه لرو چې د غوښتنې کیچ اضافه کوي ، مګر یوازې د دننه او یوځای کیدو برخو کې د فرعي پوښتنو لپاره - دا دی ، حل نیمګړی دی.
په هرصورت، موږ هم د ورته حالت سره مخ یو. په ځانګړې توګه کانونیکي بیلګه د پاڼې پوښل شوي پوښتنې دي. یو راپور شتون لري، دا څو پاڼې لري، او د 10 حد لپاره غوښتنه شتون لري. بیا ورته شی، مګر 10,10 حد. بیا بل بل مخ. او پوښتنه دا ده چې ولې موږ هر وخت دا ټول حساب کوو؟ مګر اوس د حل لاره نشته، او د مخنیوي لپاره هیڅ لاره نشته.
نګینکس په وړیا نسخه کې کیچ هم لري، او دا به هم کار وکړي. نګینکس حتی تنظیمات لري که چیرې غوښتنې په ورته وخت کې راشي ، نو دا به نور ورو کړي تر هغه چې یو بشپړ نشي. مګر دا په کلیک هاوس پراکسي کې دی چې تنظیم خورا ښه ترسره شوی. دا په ځانګړي ډول د ClickHouse لپاره جوړ شوی و، په ځانګړې توګه د دې غوښتنو لپاره، نو دا خورا مناسب دی. ښه، دا نصب کول اسانه دي.
د غیر متناسب عملیاتو او مادي لیدونو په اړه څه؟
یوه ستونزه شتون لري چې د ریپلی انجن سره عملیات غیر متناسب دي - لومړی معلومات لیکل کیږي ، بیا سقوط کوي. که چیرې یو مادي شوی ټابلیټ د ځینې مجموعو سره د نښې لاندې ژوند وکړي ، نو نقلونه به ورته لیکل کیږي. او که چیرې پیچلي منطق شتون ونلري، نو ډاټا به نقل شي. تاسو په دې اړه څه کولی شئ؟
یو څرګند حل شتون لري - د غیر متمرکز سقوط عملیاتو په جریان کې د میټ ویو په یو ځانګړي ټولګي کې محرک پلي کول. ایا د ورته فعالیت پلي کولو لپاره د سپینو زرو ګولۍ یا پالنونه شتون لري؟
دا د پوهیدو وړ ده چې څنګه تخریب کار کوي. هغه څه چې زه به یې اوس تاسو ته ووایم د پوښتنې سره تړاو نلري، مګر یوازې په هغه صورت کې چې دا د یادولو وړ وي.
کله چې نقل شوي میز ته داخل شي، د ټول داخل شوي بلاکونو نقل کول شتون لري. که تاسو په ورته ترتیب کې د ورته قطارونو ورته شمیر لرونکي ورته بلاک بیا ځای په ځای کړئ ، نو بیا ډاټا نقل کیږي. تاسو به د داخلولو په ځواب کې "Ok" ترلاسه کړئ، مګر په حقیقت کې د معلوماتو یوه کڅوړه به لیکل کیږي، او دا به نقل نشي.
دا د ډاډ لپاره اړین دی. که تاسو د ننوتلو پرمهال "Ok" ترلاسه کړئ ، نو ستاسو معلومات داخل شوي. که تاسو د ClickHouse څخه یوه تېروتنه ترلاسه کړئ، دا پدې مانا ده چې دوی نه دي داخل شوي او تاسو اړتیا لرئ چې داخلول تکرار کړئ. مګر که پیوستون د ننوتلو پرمهال مات شوی وي ، نو تاسو نه پوهیږئ چې ډاټا داخل شوې که نه. یوازینی اختیار دا دی چې داخلول بیا تکرار کړئ. که چیرې ډاټا واقعیا دننه شوې وي او تاسو یې بیا ځای په ځای کړئ ، د بلاک تخریب شتون لري. دا اړینه ده چې د نقلونو څخه مخنیوی وشي.
او دا هم مهمه ده چې دا څنګه د مادي لیدونو لپاره کار کوي. که چیرې معلومات په اصلي جدول کې د ننوتلو په وخت کې نقل شوي وي، نو دا به مادي لید ته هم نه ځي.
اوس د پوښتنې په اړه. ستاسو وضعیت ډیر پیچلی دی ځکه چې تاسو د انفرادي لینونو نقلونه ثبت کوئ. دا دی، دا ټوله بسته نه ده چې نقل شوې، مګر ځانګړي کرښې، او دوی په شالید کې سقوط کوي. په حقیقت کې، ډاټا به په اصلي جدول کې سقوط وکړي، مګر ناپاک شوي ډاټا به مادي لید ته ځي، او د یوځای کیدو په وخت کې به د مادي لیدونو سره هیڅ شی نه وي. ځکه چې یو مادي لید د ننوتلو محرک پرته بل څه ندي. د نورو عملیاتو په جریان کې، نور هیڅ شی نه پیښیږي.
او زه نشم کولی تاسو دلته خوشحاله کړم. تاسو یوازې د دې قضیې لپاره د ځانګړي حل په لټه کې یاست. د مثال په توګه، ایا دا ممکنه ده چې دا په مادي لید کې بیا پیل شي، او د نقل کولو طریقه ممکن ورته کار وکړي. مګر له بده مرغه، تل نه. که دا راټول شي، دا به کار ونکړي.
کریل شواکوف: موږ په ورځ کې د کرچ جوړونه هم درلوده. دلته یوه ستونزه وه چې د اعلاناتو تاثیرات شتون لري، او ځینې معلومات شتون لري چې موږ یې په ریښتیني وخت کې ښودلی شو - دا یوازې تاثیرات دي. دوی په ندرت سره نقل شوي ، مګر که دا پیښ شي ، موږ به یې وروسته په هر ډول سقوط کړو. او داسې شیان وو چې نقل نشي کولی - کلیکونه او دا ټوله کیسه. مګر ما هم غوښتل چې دوی سمدلاسه وښیم.
موږ د API له لارې لاړ - دا به په لاسي ډول په ClickHouse کې کار ونکړي. او API داسې ښکاري: کله چې زه په میز کې د وروستي اضافه کولو نیټه لرم، چیرته چې دا تضمین کیږي چې سم معلومات دمخه حساب شوي، او دا یو میز او بل میز ته غوښتنه کوي. له یوه څخه غوښتنه تر ټاکلې اندازې پورې ټاکل کیږي، او له بل څخه دا هغه څه ترلاسه کوي چې تر اوسه نه دي حساب شوي. او دا کار کوي، مګر یوازې د کلک هاؤس له لارې نه.
که تاسو یو ډول API لرئ - د شنونکو لپاره، د کاروونکو لپاره - بیا، په اصولو کې، دا یو اختیار دی. تاسو تل حساب کوئ، تل حساب کوئ. دا په ورځ کې یو ځل یا په بل وخت کې ترسره کیدی شي. تاسو د ځان لپاره داسې سلسله غوره کوئ چې تاسو ورته اړتیا نلرئ او مهم نه وي.
ClickHouse ډیری لاګونه لري. زه څنګه کولی شم هر څه وګورم چې سرور ته پیښیږي په یو نظر کې؟
ولادیمیر کولوبایف: ښه. دلته شیبه داسې ده چې وروسته له دې چې بګ سم شو ، ما د ځان لپاره نوې نسخه ډاونلوډ کړه ، او په بل میز کې یو کوچنی ، چیرې چې ډیری برخې شتون لري ، ما ورته عملیات ترسره کړل. او د ادغام په جریان کې ، شاوخوا 100 GB رام په سرور کې سوځیدلی و. ما 150 نیولي و، 100 یې خوړلي، او د 50 GB کړکۍ پاتې دي، نو زه په OOM کې نه وم.
څه شی اوس مهال ما په OOM کې له راښکته کیدو څخه ساتي که چیرې دا واقعیا 100 GB رام مصرف کړي؟ څه باید وکړو که ناڅاپه په ادغام کې رام پای ته ورسي؟
الیکسي میلویدوف: داسې ستونزه شتون لري چې په ځانګړي ډول د ادغام لپاره د RAM مصرف محدود ندی. او دویمه ستونزه دا ده چې که یو ډول انضمام ټاکل شوی وي نو باید اجرا شي ځکه چې دا د نقل کولو لاګ کې ثبت شوی. د نقل کولو لاګ هغه کړنې دي چې د ریپلیکا په ثابت حالت کې راوستلو لپاره اړین دي. که تاسو لاسي لاسوهنې ونه کړئ چې دا د نقل کولو لاګ بیرته راوباسي، نو ضمیمه به په یو یا بل ډول ترسره شي.
البته، دا به بې ځایه نه وي چې د رام محدودیت ولري چې "یوازې په هغه صورت کې" د OOM په وړاندې ساتنه کوي. دا به د ادغام په بشپړولو کې مرسته ونکړي، دا به بیا پیل شي، یو څه حد ته ورسیږي، یو استثنا وغورځوئ، او بیا به بیا پیل شي - له دې څخه به هیڅ ښه نه وي. مګر په اصولو کې، دا به ګټور وي چې دا محدودیت معرفي کړي.
د ClickHouse لپاره د ګولنګ ډرایور به څنګه رامینځته شي؟
کریل شواکوف: لومړی دا چې څنګه هر څه په بیوروکراټیک ډول تنظیم شوي. دا ټکی بحث نه دی شوی، نو زه د ځواب ورکولو لپاره هیڅ نه لرم.
د مسلې په اړه د پوښتنې ځواب لپاره، موږ د موټر چلوونکي لږ تاریخ ته اړتیا لرو. ما د یوې شرکت لپاره کار کاوه چې ډیر معلومات یې درلودل. دا د اعلاناتو سپنر و چې د لوی شمیر پیښو سره چې چیرې یې زیرمه کولو ته اړتیا درلوده. او په یو وخت کې کلیک هاوس ښکاره شو. موږ دا د معلوماتو سره ډک کړل، او په لومړي سر کې هرڅه سم وو، مګر بیا د کلیک هاوس خراب شو. په دې وخت کې موږ پریکړه وکړه چې موږ ورته اړتیا نلرو.
یو کال وروسته، موږ د ClickHouse کارولو مفکورې ته راستانه شو، او موږ اړتیا درلوده چې هلته یو څه معلومات ولیکو. ابتدايي پیغام دا و: هارډویر خورا کمزوری دی، لږې سرچینې شتون لري. مګر موږ تل په دې ډول کار کړی، او له همدې امله موږ اصلي پروتوکول ته ګورو.
له هغه ځایه چې موږ په Go کې کار کاوه ، دا روښانه وه چې موږ د Go ډرایور ته اړتیا لرو. ما دا تقریبا بشپړ وخت ترسره کړ - دا زما د کار دنده وه. موږ دا یو ټاکلي نقطې ته راوړو، او په اصولو کې هیڅوک فکر نه کوي چې زموږ پرته بل څوک به یې وکاروي. بیا CloudFlare د ورته ستونزې سره راغی، او د یو څه وخت لپاره موږ د دوی سره خورا په اسانۍ سره کار وکړ، ځکه چې دوی ورته دندې درلودې. سربیره پردې ، موږ دا پخپله په کلیک هاوس کې او په ډرایور کې ترسره کړل.
په یو وخت کې، ما په ساده ډول دا کار بند کړ، ځکه چې زما فعالیت د ClickHouse او کار په برخه کې یو څه بدل شو. له همدې امله مسلې نه تړل کیږي. په دوره توګه، هغه خلک چې یو څه ته اړتیا لري پخپله ذخیره ته ژمن دي. بیا زه د پلټ غوښتنې ته ګورم او ځینې وختونه زه حتی پخپله یو څه ترمیم کوم ، مګر دا په ندرت سره پیښیږي.
زه غواړم موټر چلوونکي ته راستون شم. څو کاله دمخه، کله چې دا ټول شیان پیل شول، کلک هاؤس هم مختلف او د مختلف ظرفیتونو سره. اوس موږ پوهیږو چې څنګه ډرایور بیا جوړ کړو ترڅو دا ښه کار وکړي. که دا پیښ شي، نو بیا نسخه 2 به په هر حالت کې د راټول شوي کرچونو له امله نامناسب وي.
زه نه پوهیږم چې دا موضوع څنګه تنظیم کړم. زه پخپله ډیر وخت نه لرم. که ځینې خلک موټر چلوونکي پای ته ورسوي، زه کولی شم د دوی سره مرسته وکړم او دوی ته ووایم چې څه وکړي. مګر د پروژې په پراختیا کې د Yandex فعال ګډون تر اوسه پورې بحث نه دی شوی.
الیکسي میلویدوف: په حقیقت کې، تر اوسه د دغو چلوونکو په اړه کومه بیروکراسي شتون نلري. یوازینی شی دا دی چې دوی رسمي سازمان ته سپارل شوي، دا دی، دا ډرایور د Go لپاره د رسمي ډیفالټ حل په توګه پیژندل شوی. ځینې نور چلوونکي شتون لري، مګر دوی په جلا توګه راځي.
موږ د دې چلوونکو لپاره هیڅ داخلي پرمختګ نه لرو. پوښتنه دا ده چې ایا موږ کولی شو یو انفرادي کس وګمارو، نه د دې ځانګړي موټر چلوونکي لپاره، مګر د ټولنې د ټولو چلوونکو د پرمختګ لپاره، یا موږ کولی شو له بهر څخه یو څوک پیدا کړو.
بهرنۍ قاموس د lazy_load ترتیب فعالولو سره د ریبوټ وروسته نه پورته کیږي. چې څه کول پکار دي؟
موږ د lazy_load ترتیب فعال کړی دی، او د سرور له ریبوټ کیدو وروسته، قاموس پخپله نه پورته کیږي. دا یوازې وروسته له هغه پورته کیږي کله چې کارونکي دې قاموس ته لاسرسی ومومي. او لومړی ځل چې زه دې ته لاسرسی وموم، دا یوه تېروتنه ورکوي. ایا دا امکان لري چې په یو ډول په اتوماتيک ډول د ClickHouse په کارولو سره قاموسونه پورته کړئ ، یا تاسو اړتیا لرئ تل د دوی چمتووالی پخپله کنټرول کړئ ترڅو کارونکي غلطۍ ترلاسه نکړي؟
شاید موږ د ClickHouse پخوانۍ نسخه لرو، نو قاموس په اوتومات ډول نه پورته کیږي. کیدای شي دا قضیه وي؟
لومړی، لغتونه د یوې پوښتنې په کارولو سره جبري بار وړل کیدی شي د سیسټم بیا پورته کولو لغتونه. دوهم، د خطا په اړه - که قاموس لا دمخه بار شوی وي، نو بیا پوښتنې به د هغه معلوماتو پراساس کار وکړي چې بار شوي. که لغت لا تر اوسه نه وي پورته شوی، دا به د غوښتنې په جریان کې مستقیم پورته شي.
دا د درنو لغتونو لپاره خورا اسانه ندي. د مثال په توګه، تاسو اړتیا لرئ چې د MySQL څخه یو ملیون قطارونه راوباسئ. یو څوک یو ساده انتخاب کوي، مګر دا انتخاب به ورته ملیون قطارونو ته انتظار وکړي. دلته دوه حلونه شتون لري. لومړی د سست_لوډ بندول دي. دوهم، کله چې سرور پورته شي، مخکې له دې چې بار واچوي، ترسره کړئ د سیسټم بیا پورته کولو لغت یا یوازې یوه پوښتنه وکړئ چې لغت کاروي. بیا به قاموس پورته شي. تاسو اړتیا لرئ د lazy_load ترتیب فعالولو سره د لغتونو شتون کنټرول کړئ ، ځکه چې ClickHouse دوی په اوتومات ډول نه پورته کوي.
د وروستۍ پوښتنې ځواب دا دی چې یا نسخه زوړ ده یا دا اړتیا لري چې ډیبګ شي.
د دې حقیقت سره څه باید وکړو چې د سیسټم ریلوډ قاموس د ډیری لغتونو څخه هیڅ نه پورته کوي که لږترلږه یو یې د غلطۍ سره ټکر شي؟
د سیسټم بیالوډ لغتونو په اړه بله پوښتنه شتون لري. موږ دوه لغتونه لرو - یو نه ډک شوی، دوهم بار شوی. پدې حالت کې ، د سیسټم ریلوډ قاموس هیڅ قاموس نه پورته کوي ، او تاسو باید د سیسټم ریلوډ قاموس په کارولو سره د دې نوم لخوا یو مشخص ټکي په ګوته کړئ. ایا دا د ClickHouse نسخه سره هم تړاو لري؟
زه غواړم تاسو خوشحاله کړم. دا چلند بدل شو. دا پدې مانا ده چې که تاسو ClickHouse تازه کړئ، دا به هم بدلون ومومي. که تاسو د خپل اوسني چلند څخه خوښ نه یاست د سیسټم بیا پورته کولو لغتونه، تازه کړئ، او راځئ هیله مند یو چې دا د ښه لپاره بدل شي.
ایا د ClickHouse ترتیب کې د توضیحاتو تنظیم کولو لپاره کومه لاره شتون لري ، مګر د غلطیو په صورت کې یې نه ښیې؟
بله پوښتنه د لغت اړوند غلطیو په اړه ده، یعنې توضیحات. موږ د لغت لپاره د ClickHouse ترتیب کې د پیوستون توضیحات مشخص کړي، او که کومه تېروتنه وي، موږ دا توضیحات او پاسورډ په ځواب کې ترلاسه کوو.
موږ دا تېروتنه د ODBC ډرایور ترتیب کې د توضیحاتو په اضافه کولو سره حل کړه. ایا د ClickHouse ترتیب کې د توضیحاتو تنظیم کولو کومه لاره شتون لري ، مګر د غلطیو په صورت کې دا توضیحات نه ښیې؟
دلته اصلي حل دا دی چې دا اسناد په odbc.ini کې مشخص کړئ، او په ClickHouse کې یوازې د ODBC ډیټا سرچینې نوم مشخص کړئ. دا به د نورو لغت سرچینو لپاره نه وي - نه د MySQL سره قاموس لپاره، او نه د نورو لپاره، تاسو باید پټنوم ونه ګورئ کله چې تاسو د خطا پیغام ترلاسه کوئ. د ODBC لپاره، زه به هم وګورم - که دا شتون ولري، تاسو اړتیا لرئ چې دا لرې کړئ.