{"id":80775,"date":"2020-05-08T13:42:47","date_gmt":"2020-05-08T11:42:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah"},"modified":"2020-05-08T13:42:47","modified_gmt":"2020-05-08T11:42:47","slug":"clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah","title":{"rendered":"ClickHouse f\u00f6r avancerade anv\u00e4ndare i fr\u00e5gor och svar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I april samlades ingenj\u00f6rer fr\u00e5n Avito f\u00f6r online-m\u00f6ten med huvudutvecklaren av ClickHouse, Alexey Milovidov, och Kirill Shvakov, Golang-utvecklare fr\u00e5n f\u00f6retaget Integros. De diskuterade hur vi anv\u00e4nder databashanteringssystemet och vilka sv\u00e5righeter vi m\u00f6ter. <\/p>\n<p><\/p>\n<p>Utifr\u00e5n m\u00f6tet har vi samlat en artikel med experternas svar p\u00e5 v\u00e5ra och tittarnas fr\u00e5gor om backups, resharding av data, externa ordb\u00f6cker, Golang-drivrutinen och versionuppdateringar av ClickHouse. Den kan vara till nytta f\u00f6r utvecklare som redan aktivt arbetar med Yandex databashanteringssystem och \u00e4r intresserade av dess nutid och framtid. Som standard \u00e4r svaren fr\u00e5n Alexey Milovidov, om inget annat anges. <\/p>\n<p><\/p>\n<p>Var f\u00f6rsiktig, under klippet finns mycket text. Vi hoppas att inneh\u00e5llet med fr\u00e5gorna hj\u00e4lper dig att orientera dig.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"ClickHouse f\u00f6r avancerade anv\u00e4ndare i fr\u00e5gor och svar\" src=\"\/wp-content\/uploads\/2020\/05\/242b1d8d002fe115614435c242297fd2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">Inneh\u00e5ll<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#old-data\">ClickHouse uppdateras st\u00e4ndigt, medan v\u00e5ra data inte g\u00f6r det. Vad ska vi g\u00f6ra \u00e5t detta?<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#backup-best-practicies\">Vilka \u00e4r de b\u00e4sta metoderna f\u00f6r backup av data fr\u00e5n ClickHouse just nu?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#replication\">Kan vi organisera en kontrollerad eftersl\u00e4pning av repliker i valarna?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#soooo-changeable\">Vad ska man g\u00f6ra om tabellens struktur har \u00e4ndrats?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#resharding-best-practices\">Vilka \u00e4r de b\u00e4sta metoderna f\u00f6r reshaping av data just nu?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#clickhouse-copier\">Det finns ett verktyg i ClickHouse som heter clickhouse-copier. Kan du ber\u00e4tta mer om det?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#resharding-tool\">Ni hade en pilotgrej som kallades reshading. Vad h\u00e4nde med den?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#move-to-slow-disk\">Kan vi sl\u00e5 ihop alla delar av data innan vi flyttar dem till l\u00e5ngsamma diskar?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#up-to-date\">Hur migra till nya versioner av ClickHouse om vi inte kan kontrollera kompatibiliteten i f\u00f6rv\u00e4g?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#kill-query\">Kill query ska stoppa fr\u00e5gorna, men det fungerar inte. Varf\u00f6r?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#reading-time\">Hur ber\u00e4knar man svarstiden med belastning p\u00e5 l\u00e4sning?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#pimp-my-clickhouse\">Vad ska justeras i ClickHouse f\u00f6r att f\u00e5 mer data i cache?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#storage-configuration\">Hur kan man konfigurera storage_configuration f\u00f6r att lagra i RAM?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#low-cardinality\">Till hur m\u00e5nga unika v\u00e4rden \u00e4r Low Cardinality effektiv?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#fulltext-search\">Vilka \u00e4r de b\u00e4sta metoderna f\u00f6r fulltexts\u00f6kning p\u00e5 en tabell med fem miljarder rader?<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#hello-and-welcome\">Hur organiserar man \u00e5tkomsten till ClickHouse f\u00f6r ett stort antal anv\u00e4ndare?<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#smorgasbord\">Kan man ge resultaten av en fr\u00e5ga till tio kunder?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#asynchronous\">Vad g\u00f6r vi med asynkrona operationer och materialiserade vyer?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#dashboard\">Det finns m\u00e5nga loggar i ClickHouse. Hur kan jag se allt som h\u00e4nder med servern i realtid?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#zen\">Hur p\u00e5verkar man merget s\u00e5 att servern inte kraschar p\u00e5 grund av OOM?<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#go\">Hur kommer utvecklingen av Golang-drivrutinen f\u00f6r ClickHouse att g\u00e5 till?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#lazy-load\">Den externa ordboken laddas inte efter omstart med den aktiverade inst\u00e4llningen lazy_load. Vad ska vi g\u00f6ra?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#reload-dictionaries\">Hur hanterar vi att system reload dictionaries inte laddar n\u00e5gon av de m\u00e5nga ordb\u00f6ckerna om minst en av dem misslyckas med ett fel?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#connection\">Finns det ett s\u00e4tt att konfigurera referenser i ClickHouse-konfigurationsfilen utan att avsl\u00f6ja dem vid fel?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#zoom-backgrounds\">Bonus: bakgrunder f\u00f6r Zoom fr\u00e5n v\u00e5ra tr\u00e4ffar<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p>Om du inte vill l\u00e4sa texten kan du titta p\u00e5 inspelningen av m\u00f6tena <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=n1tm4j4W8ZQ&amp;t=8147s\">p\u00e5 v\u00e5r YouTube-kanal<\/a><\/noindex>. Tidskoder finns i den f\u00f6rsta kommentaren under videon.<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"anchorold-dataanchorclickhouse-postoyanno-obnovlyaetsya-a-nashi-dannyenbsp-net-chto-snbspetim-delat\"><noindex><a rel=\"nofollow\" name=\"old-data\"><\/a><\/noindex>ClickHouse uppdateras kontinuerligt, men v\u00e5ra data g\u00f6r det inte. Vad ska vi g\u00f6ra \u00e5t detta?<\/h2>\n<p><\/p>\n<blockquote><p>ClickHouse uppdateras kontinuerligt, men v\u00e5ra data som har bearbetats med optimize final uppdateras inte och ligger i backup. <\/p>\n<p>Anta att vi f\u00e5r ett problem och data g\u00e5r f\u00f6rlorade. Vi best\u00e4mmer oss f\u00f6r att \u00e5terst\u00e4lla, och det visar sig att gamla partitioner som ligger i s\u00e4kerhetskopiering p\u00e5 backupservrarna skiljer sig betydligt fr\u00e5n den aktuella versionen av ClickHouse. Vad g\u00f6r vi i en s\u00e5dan situation, och \u00e4r det m\u00f6jligt?<\/p><\/blockquote>\n<p>Situationen d\u00e4r du \u00e5terst\u00e4llt data fr\u00e5n backup i gammalt format och de inte kopplas till den nya versionen \u00e4r om\u00f6jlig. Vi ser till att dataformatet i ClickHouse alltid \u00e4r bak\u00e5tkompatibelt. Detta \u00e4r mycket viktigare \u00e4n bak\u00e5tkompatibilitet n\u00e4r det g\u00e4ller funktionalitet, om beteendet hos en s\u00e4llan anv\u00e4nd funktion har \u00e4ndrats. Data som lagras p\u00e5 disken m\u00e5ste den nya versionen av ClickHouse alltid kunna l\u00e4sa. Det \u00e4r en regel. <\/p>\n<p><\/p>\n<h2 id=\"anchorbackup-best-practiciesanchorkakie-luchshie-praktiki-est-nanbspdannyy-moment-ponbsprezervnomu-kopirovaniyu-dannyh-iznbspclickhouse\"><noindex><a rel=\"nofollow\" name=\"backup-best-practicies\"><\/a><\/noindex>Vilka \u00e4r de b\u00e4sta metoderna f\u00f6r backup av data fr\u00e5n ClickHouse just nu?<\/h2>\n<p><\/p>\n<blockquote><p>Hur g\u00f6r vi s\u00e4kerhetskopior med tanke p\u00e5 att vi har optimize final operationer, en enorm databas p\u00e5 terabyte, och data som uppdateras, l\u00e5t oss s\u00e4ga, de senaste tre dagarna, utan n\u00e5gra procedurer som utf\u00f6rs efter det? <\/p>\n<p>Vi kan skapa v\u00e5r egen l\u00f6sning och skriva ett skript som samlar s\u00e4kerhetskopior p\u00e5 det h\u00e4r s\u00e4ttet. Kanske beh\u00f6ver vi inte kr\u00e5ngla, och cykeln har redan uppfunnits? <\/p><\/blockquote>\n<p>F\u00f6rst ang\u00e5ende b\u00e4sta praxis. Mina kollegor rekommenderar alltid att n\u00e4mna tj\u00e4nsten \"Yandex.Cloud\" som redan har l\u00f6st den h\u00e4r uppgiften n\u00e4r det handlar om s\u00e4kerhetskopior. S\u00e5 anv\u00e4nd den om det \u00e4r m\u00f6jligt. <\/p>\n<p><\/p>\n<p>Det finns ingen komplett l\u00f6sning, hundra procent inbyggd i ClickHouse, f\u00f6r s\u00e4kerhetskopior. Det finns n\u00e5gra mallar som kan anv\u00e4ndas. F\u00f6r att f\u00e5 en komplett l\u00f6sning m\u00e5ste man antingen arbeta lite manuellt eller g\u00f6ra omslag i form av skript.<\/p>\n<p><\/p>\n<p>Jag b\u00f6rjar med de enklaste l\u00f6sningarna och avslutar med de mest avancerade beroende p\u00e5 datam\u00e4ngd och klusterstorlek. Ju st\u00f6rre klustret \u00e4r, desto mer komplext blir l\u00f6sningen.<\/p>\n<p><\/p>\n<p>Om datatabellen endast \u00e4r n\u00e5gra gigabyte kan backupen g\u00f6ras s\u00e5 h\u00e4r: <\/p>\n<p><\/p>\n<ol>\n<li>Spara tabellens definitioner, det vill s\u00e4ga metadata \u2014 <strong>show create table<\/strong>.<\/li>\n<li>G\u00f6r en dump med hj\u00e4lp av ClickHouse-klienten \u2014 <strong>select<\/strong> * <strong>from table<\/strong> till en fil. Som standard f\u00e5r du en fil i TabSeparated-format. Om du vill ha det mer effektivt kan du anv\u00e4nda Native-format. <\/li>\n<\/ol>\n<p><\/p>\n<p>Om datam\u00e4ngden \u00e4r st\u00f6rre tar backupen l\u00e4ngre tid och kr\u00e4ver mycket mer utrymme. Detta kallas en logisk backup och \u00e4r inte kopplad till ClickHouse-dat format. Om det finns, kan du i v\u00e4rsta fall ta backupen och ladda upp den i MySQL f\u00f6r \u00e5terst\u00e4llning. <\/p>\n<p><\/p>\n<p>F\u00f6r mer avancerade fall har ClickHouse inbyggd m\u00f6jlighet att skapa snapshot av partitioner i det lokala filsystemet. Denna funktion \u00e4r tillg\u00e4nglig som en f\u00f6rfr\u00e5gan <strong>alter table freeze partition<\/strong>. Eller helt enkelt <strong>alter table freeze<\/strong> \u2014 detta skapar en \u00f6gonblicksbild av hela tabellen. <\/p>\n<p><\/p>\n<p>Snapshot kommer att skapas konsekvent f\u00f6r en tabell p\u00e5 en shard, det vill s\u00e4ga att det \u00e4r om\u00f6jligt att skapa en konsekvent snapshot f\u00f6r hela klustret p\u00e5 detta s\u00e4tt. Men f\u00f6r de flesta uppgifter finns det inget s\u00e5dant behov, och det r\u00e4cker med att utf\u00f6ra f\u00f6rfr\u00e5gan p\u00e5 varje shard f\u00f6r att f\u00e5 en konsekvent snapshot. Den skapas som h\u00e5rdverkl\u00e4nkar och tar d\u00e4rf\u00f6r inte extra utrymme. Efter detta kopierar du denna snapshot till backupservern eller till lagringen som du anv\u00e4nder f\u00f6r backups.<\/p>\n<p><\/p>\n<p>Att \u00e5terst\u00e4lla en s\u00e5dan backup \u00e4r relativt enkelt. F\u00f6rst \u2014 skapa tabeller enligt de befintliga tabelldefinitionerna. D\u00e4refter kopierar du de sparade snapshots av partitioner till Directory-Detached f\u00f6r de aktuella tabellerna och utf\u00f6r f\u00f6rfr\u00e5gan <strong>attach partition<\/strong>. Denna l\u00f6sning \u00e4r helt l\u00e4mplig f\u00f6r de mest seri\u00f6sa datam\u00e4ngderna. <\/p>\n<p><\/p>\n<p>Ibland kr\u00e4vs n\u00e5got \u00e4nnu mer avancerat \u2014 i de fall d\u00e4r du har tiotals eller till och med hundratals terabyte p\u00e5 varje server och hundratals servrar. H\u00e4r finns en l\u00f6sning som jag snappat upp fr\u00e5n mina kollegor p\u00e5 \"Yandex.Metrica\". Jag skulle inte rekommendera det till alla \u2014 l\u00e4s sj\u00e4lv och avg\u00f6r om det passar. <\/p>\n<p><\/p>\n<p>F\u00f6rst m\u00e5ste du skapa flera servrar med stora diskarrayer. Sedan p\u00e5 dessa servrar lyfta flera ClickHouse-servrar och konfigurera dem s\u00e5 att de fungerar som en annan replik f\u00f6r samma shardar. Och forts\u00e4tt g\u00e4rna anv\u00e4nda antingen ett filsystem eller n\u00e5got verktyg som m\u00f6jligg\u00f6r skapande av snapshots. H\u00e4r finns tv\u00e5 alternativ. F\u00f6rsta alternativet \u00e4r LVM-snapshots, det andra alternativet \u00e4r ZFS p\u00e5 Linux. <\/p>\n<p><\/p>\n<p>Efter detta m\u00e5ste du varje dag skapa en snapshot, den kommer att lagras och ta upp utrymme. Om data \u00e4ndras s\u00e5 kommer m\u00e4ngden utrymme med tiden att \u00f6ka. Den h\u00e4r snapshoten kan h\u00e4mtas vid vilket tillf\u00e4lle som helst och datan kan \u00e5terst\u00e4llas, ett s\u00e5dant udda beslut. Dessutom m\u00e5ste dessa replikor begr\u00e4nsas i konfigurationen s\u00e5 att de inte f\u00f6rs\u00f6ker bli ledare.<\/p>\n<p><\/p>\n<h2 id=\"anchorreplicationanchormozhno-li-budet-organizovat-kontroliruemoe-otstavanie-replik-vnbspvalah\"><noindex><a rel=\"nofollow\" name=\"replication\"><\/a><\/noindex>Kan vi organisera en kontrollerad eftersl\u00e4pning av repliker i valarna?<\/h2>\n<p><\/p>\n<blockquote><p>I \u00e5r planerar ni att skapa v\u00e5gor i ClickHouse. Kommer det vara m\u00f6jligt att organisera kontrollerad eftersl\u00e4pning av replikor inom dem? Vi skulle vilja anv\u00e4nda detta f\u00f6r att skydda oss fr\u00e5n negativa scenarier med altern och andra \u00e4ndringar. <\/p>\n<p>\u00c4r det m\u00f6jligt att g\u00f6ra n\u00e5gra rollbacks f\u00f6r altern? Till exempel, i en befintlig v\u00e5g kan vi s\u00e4ga att fram till denna punkt ska vi till\u00e4mpa \u00e4ndringarna, och fr\u00e5n detta \u00f6gonblick ska vi sluta till\u00e4mpa \u00e4ndringarna?<\/p>\n<p>Om en grupp kommer till v\u00e5r kluster och f\u00f6rst\u00f6r det, s\u00e5 har vi en konditionell replik med en timmes eftersl\u00e4pning, d\u00e4r vi kan s\u00e4ga, l\u00e5t oss anv\u00e4nda just den f\u00f6r tillf\u00e4llet, men vi ska inte till\u00e4mpa de senaste tio minuters \u00e4ndringarna? <\/p><\/blockquote>\n<p>F\u00f6r att b\u00f6rja med kontrollerad eftersl\u00e4pning av replikor. En s\u00e5dan f\u00f6rfr\u00e5gan kom fr\u00e5n anv\u00e4ndarna, och vi skapade en issue p\u00e5 GitHub med f\u00f6rfr\u00e5gan: \"Om n\u00e5gon beh\u00f6ver detta, gilla det, ge en hj\u00e4rta.\" Ingen gillade det, och issue st\u00e4ngdes. \u00c4nd\u00e5 kan den m\u00f6jligheten nu erh\u00e5llas genom att konfigurera ClickHouse. Faktiskt, bara fr\u00e5n version 20.3.<\/p>\n<p><\/p>\n<p>ClickHouse sammanfogar st\u00e4ndigt data i bakgrunden \u2014 merge. N\u00e4r merge \u00e4r utf\u00f6rd, s\u00e5 ers\u00e4tts en viss upps\u00e4ttning databit med en st\u00f6rre bit. Under tiden forts\u00e4tter de tidigare databit att finnas kvar p\u00e5 disken under en viss tid.<\/p>\n<p><\/p>\n<p>F\u00f6rst och fr\u00e4mst forts\u00e4tter de att lagras s\u00e5 l\u00e4nge det finns select-fr\u00e5gor som anv\u00e4nder dem, f\u00f6r att s\u00e4kerst\u00e4lla en icke-blockerande drift. Select-fr\u00e5gorna kan enkelt l\u00e4sa fr\u00e5n de gamla bitarna.<\/p>\n<p><\/p>\n<p>F\u00f6r det andra finns det en tidsgr\u00e4ns \u2014 gamla databitars ligger p\u00e5 disken i \u00e5tta minuter. Denna \u00e5tta minuter kan justeras och till och med f\u00f6rvandlas till en dag. Det kommer att kosta utrymme p\u00e5 disken: beroende p\u00e5 datavolymen kan det visa sig att data under den senaste dagen inte bara dubbleras utan kan bli fem g\u00e5nger mer. Men du kan vid ett allvarligt problem stoppa ClickHouse-servern och reda ut allt.<\/p>\n<p><\/p>\n<p>Nu uppst\u00e5r fr\u00e5gan hur detta skyddar mot alter. H\u00e4r b\u00f6r man titta djupare, f\u00f6r i \u00e4ldre versioner av ClickHouse fungerade alter s\u00e5 att det helt enkelt bytte ut bitarna direkt. Det finns en databit med vissa filer, och vi g\u00f6r till exempel <strong>ALTER DROP COLUMN<\/strong>. D\u00e5 tas denna kolumn fysiskt bort fr\u00e5n alla bitar.<\/p>\n<p><\/p>\n<p>Men fr\u00e5n version 20.3 har mekanismen f\u00f6r alter \u00e4ndrats helt, och nu \u00e4r databitars alltid immutabla. De \u00e4ndras inte alls \u2014 alter fungerar nu ungef\u00e4r som merges. Ist\u00e4llet f\u00f6r att byta ut en bit p\u00e5 plats skapar vi en ny. I den nya biten blir filer som inte \u00e4ndrats h\u00e5rda l\u00e4nkar, och om vi har tagit bort en kolumn kommer den helt enkelt att saknas i den nya biten. Den gamla biten tas bort som standard efter \u00e5tta minuter, och h\u00e4r kan man justera inst\u00e4llningarna som n\u00e4mnts ovan. <\/p>\n<p><\/p>\n<p>Detsamma g\u00e4ller f\u00f6r ALTERs av typen mutationer. N\u00e4r du g\u00f6r <strong>ALTER DELETE<\/strong> eller <strong>ALTER UPDATE<\/strong>, s\u00e5 \u00e4ndrar det inte klustret utan skapar ett nytt. Och sedan tas det gamla bort.<\/p>\n<p><\/p>\n<h2 id=\"anchorsoooo-changeableanchorkak-byt-esli-struktura-tablicy-pomenyalas\"><noindex><a rel=\"nofollow\" name=\"soooo-changeable\"><\/a><\/noindex>Vad ska man g\u00f6ra om tabellens struktur har \u00e4ndrats?<\/h2>\n<p><\/p>\n<blockquote><p>Hur \u00e5terh\u00e4mtar man en backup som gjordes med den gamla schemat? Och en andra fr\u00e5ga om fallet med snapshots och filsystem. G\u00e5r Btrfs att anv\u00e4nda ist\u00e4llet f\u00f6r ZFS p\u00e5 Linux LVM h\u00e4r?<\/p><\/blockquote>\n<p>Om du g\u00f6r <strong>attach partition<\/strong> partitioner med en annan struktur, s\u00e5 kommer ClickHouse att s\u00e4ga att det inte \u00e4r till\u00e5tet. L\u00f6sningen \u00e4r f\u00f6ljande. F\u00f6rst \u2014 skapa en tempor\u00e4r tabell av typen MergeTree med den gamla strukturen, koppla in data via attach, g\u00f6r en alter-fr\u00e5ga. Sedan kan man antingen kopiera eller flytta dessa data och g\u00f6ra attach igen, eller anv\u00e4nda en fr\u00e5ga <strong>alter table move partition<\/strong>.<\/p>\n<p><\/p>\n<p>S\u00e5, den andra fr\u00e5gan&nbsp;\u2014 kan man anv\u00e4nda Btrfs? F\u00f6rst och fr\u00e4mst, om du har LVM, r\u00e4cker det med LVM-snapshots, och filsystemet kan vara ext4, det spelar ingen roll. Med Btrfs beror allt p\u00e5 din erfarenhet av att anv\u00e4nda det. Det \u00e4r ett moget filsystem, men det finns fortfarande vissa farh\u00e5gor om hur det fungerar i praktiken i ett specifikt scenario. Jag skulle inte rekommendera att anv\u00e4nda det om du inte har Btrfs i produktion.<\/p>\n<p><\/p>\n<h2 id=\"anchorresharding-best-practicesanchorkakie-seychas-luchshie-praktiki-vnbspreshardinge-dannyh\"><noindex><a rel=\"nofollow\" name=\"resharding-best-practices\"><\/a><\/noindex>Vilka \u00e4r de b\u00e4sta metoderna f\u00f6r reshaping av data just nu?<\/h2>\n<p><\/p>\n<p>Fr\u00e5gan om omf\u00f6rdelning \u00e4r komplicerad och m\u00e5ngfacetterad. H\u00e4r kan man svara p\u00e5 flera s\u00e4tt. Man kan angripa fr\u00e5gan fr\u00e5n en sida och s\u00e4ga att ClickHouse inte har inbyggd funktionalitet f\u00f6r omf\u00f6rdelning. Men jag \u00e4r r\u00e4dd att detta svar inte kommer att tillfredsst\u00e4lla n\u00e5gon. S\u00e5, man kan angripa fr\u00e5gan fr\u00e5n en annan sida och s\u00e4ga att det finns m\u00e5nga s\u00e4tt att omf\u00f6rdela data i ClickHouse. <\/p>\n<p><\/p>\n<p>Om utrymmet i klustret tar slut eller det inte klarar belastningen, l\u00e4gger du till nya servrar. Men dessa servrar \u00e4r tomma som standard, det finns inga data p\u00e5 dem och ingen belastning. Du m\u00e5ste f\u00f6rdela om data s\u00e5 att de blir j\u00e4mnt spridda \u00f6ver det nya, st\u00f6rre klustret.<\/p>\n<p><\/p>\n<p>Det f\u00f6rsta s\u00e4ttet att g\u00f6ra detta&nbsp;\u2014 \u00e4r att kopiera vissa partitioner till de nya servrarna med hj\u00e4lp av en fr\u00e5ga. <strong>alter table fetch partition<\/strong>. Till exempel, hade du partitioner per m\u00e5nad, och du tar den f\u00f6rsta m\u00e5naden 2017&nbsp;och kopierar den till den nya servern, sedan kopierar du den tredje m\u00e5naden till en annan ny server. Och s\u00e5 forts\u00e4tter du tills det blir mer eller mindre j\u00e4mnt.<\/p>\n<p><\/p>\n<p>Flyttning kan endast g\u00f6ras f\u00f6r de partitioner som inte \u00e4ndras vid skrivning. F\u00f6r nya partitioner m\u00e5ste skrivning st\u00e4ngas av, eftersom deras flyttning inte \u00e4r atom\u00e4r. Annars f\u00e5r du dubbletter eller luckor i datan. Trots detta \u00e4r detta tillv\u00e4gag\u00e5ngss\u00e4tt praktiskt och fungerar tillr\u00e4ckligt effektivt. F\u00e4rdiga komprimerade partitioner \u00f6verf\u00f6rs \u00f6ver n\u00e4tverket, vilket inneb\u00e4r att data inte komprimeras eller omkodas.<\/p>\n<p><\/p>\n<p>Denna metod har en nackdel, och den beror p\u00e5 sharding-schemat; om du tog h\u00e4nsyn till detta schema, vilket shardningsnyckel du hade. I ditt exempel, f\u00f6r fallet med metrik, \u00e4r shardningsnyckeln en hash av v\u00e4gen. N\u00e4r du g\u00f6r en select i en distribuerad tabell g\u00e5r den direkt till alla shards i klustret och h\u00e4mtar data d\u00e4rifr\u00e5n. <\/p>\n<p><\/p>\n<p>Det betyder att det i princip inte spelar n\u00e5gon roll f\u00f6r dig vilka data som hamnat p\u00e5 vilket shard. Det viktigaste \u00e4r att data f\u00f6r en och samma v\u00e4g hamnar p\u00e5 samma shard, och vilket shard det \u00e4r spelar ingen avg\u00f6rande roll. I det h\u00e4r fallet passar \u00f6verf\u00f6ringen av f\u00e4rdiga partitioner perfekt, eftersom du vid select-f\u00f6rfr\u00e5gningar, oavsett om det \u00e4r f\u00f6re eller efter omshardning, kommer att f\u00e5 fullst\u00e4ndig data.<\/p>\n<p><\/p>\n<p>Men det finns mer komplexa fall. Om du p\u00e5 applikationslogikniv\u00e5 bygger p\u00e5 ett speciellt shardningsschema, d\u00e4r denna kund ligger p\u00e5 ett specifikt shard, kan du skicka f\u00f6rfr\u00e5gan direkt dit ist\u00e4llet f\u00f6r till den distribuerade tabellen. Eller s\u00e5 anv\u00e4nder du en relativt ny version av ClickHouse och har aktiverat inst\u00e4llningen <strong>optimize skip unused shards<\/strong>. I det h\u00e4r fallet kommer uttrycket i where-sektionen att analyseras under select-f\u00f6rfr\u00e5gan, och det kommer att ber\u00e4knas vilka shards som m\u00e5ste bes\u00f6kas enligt shardningsschemat. Detta fungerar f\u00f6rutsatt att data \u00e4r distribuerade enligt detta shardningsschema. Om du har flyttat dem manuellt kan \u00f6verensst\u00e4mmelsen f\u00f6r\u00e4ndras.<\/p>\n<p><\/p>\n<p>S\u00e5, detta \u00e4r metod nummer ett. Jag v\u00e4ntar p\u00e5 ert svar, om metoden passar eller om vi g\u00e5r vidare.<\/p>\n<p><\/p>\n<p><strong>Vladimir Kolobaev, lead system administrator p\u00e5 Avito<\/strong>: Alexei, den metod som du n\u00e4mnde passar inte s\u00e5 bra n\u00e4r det g\u00e4ller att sprida belastningen \u00e4ven p\u00e5 l\u00e4sning. Vi kan ta en partition som \u00e4r m\u00e5nadsbaserad och flytta f\u00f6reg\u00e5ende m\u00e5nad till en annan nod, men n\u00e4r en f\u00f6rfr\u00e5gan kommer in f\u00f6r dessa data kommer vi endast att belasta den noden. Det skulle vara \u00f6nskv\u00e4rt att belasta hela klustret, eftersom annars kommer all l\u00e4sbelastning under en tid att hanteras av tv\u00e5 shards.<\/p>\n<p><\/p>\n<p><strong>Alexey Milovidov:<\/strong> Svaret h\u00e4r \u00e4r konstigt \u2014 ja, det \u00e4r d\u00e5ligt, men det kan fungera. Jag ska f\u00f6rklara hur. Det \u00e4r v\u00e4rt att titta p\u00e5 belastningsscenariot som kommer f\u00f6r dina data. Om det \u00e4r \u00f6vervakningsdata kan man n\u00e4stan med s\u00e4kerhet s\u00e4ga att \u00f6verv\u00e4ldigande majoriteten av f\u00f6rfr\u00e5gningarna handlar om f\u00e4rska data. <\/p>\n<p><\/p>\n<p>Du har installerat nya servrar, flyttat gamla partitioner, men ocks\u00e5 \u00e4ndrat hur nya data skrivs. Och den nya datan kommer att spridas \u00f6ver hela klustret. S\u00e5 redan efter fem minuter kommer fr\u00e5gorna f\u00f6r de senaste fem minuterna att belasta klustret j\u00e4mnt, efter en dag kommer fr\u00e5gorna f\u00f6r det senaste dygnet att belasta klustret j\u00e4mnt. Tyv\u00e4rr kommer fr\u00e5gor f\u00f6r den f\u00f6reg\u00e5ende m\u00e5naden endast att g\u00e5 till en del av klustrets servrar.<\/p>\n<p><\/p>\n<p>Men ofta kommer du inte att ha fr\u00e5gor specifikt f\u00f6r februari 2019. Troligtvis, om fr\u00e5gorna str\u00e4cker sig in i 2019, kommer de att g\u00e4lla hela 2019 \u2014 \u00f6ver ett stort tidsintervall, snarare \u00e4n en liten del. Och s\u00e5dana fr\u00e5gor kan ocks\u00e5 belasta klustret j\u00e4mnt. Men i allm\u00e4nhet \u00e4r din observation helt korrekt, att det \u00e4r en ad hoc-l\u00f6sning som inte sprider ut datan helt j\u00e4mnt.<\/p>\n<p><\/p>\n<p>Jag har n\u00e5gra fler punkter att svara p\u00e5 fr\u00e5gan. En av dem handlar om hur man fr\u00e5n b\u00f6rjan g\u00f6r sharding-schemat s\u00e5 att det blir mindre sm\u00e4rtsamt vid om-sharding. Det \u00e4r inte alltid m\u00f6jligt.<\/p>\n<p><\/p>\n<p>Till exempel har du \u00f6vervakningsdata. \u00d6vervakningsdata v\u00e4xer av tre anledningar. F\u00f6rsta \u2014 ansamling av historiska data. Andra \u2014 trafik\u00f6kning. Och tredje \u2014 \u00f6kning av antalet saker som omfattas av \u00f6vervakning. Nya mikrotj\u00e4nster och metrik m\u00e5ste sparas. <\/p>\n<p><\/p>\n<p>Det kan h\u00e4nda att den st\u00f6rsta \u00f6kningen \u00e4r kopplad till den tredje orsaken \u2014 det \u00f6kade anv\u00e4ndandet av \u00f6vervakning. I det h\u00e4r fallet b\u00f6r man titta p\u00e5 belastningens karakt\u00e4r, vad de huvudsakliga fr\u00e5gorna p\u00e5 select \u00e4r. Huvudfr\u00e5gorna p\u00e5 select kommer troligen att g\u00e5 genom en delm\u00e4ngd av metriker.<\/p>\n<p><\/p>\n<p>Till exempel anv\u00e4ndningen av CPU p\u00e5 vissa servrar av en viss tj\u00e4nst. Det visar sig att det finns en delm\u00e4ngd av nycklar som du h\u00e4mtar dessa data fr\u00e5n. Och sj\u00e4lva fr\u00e5gan om dessa data \u00e4r troligen ganska enkel och utf\u00f6rs p\u00e5 n\u00e5gra tiotal millisekunder. Anv\u00e4nds f\u00f6r \u00f6vervakningstj\u00e4nster, f\u00f6r dashboards. Jag hoppas att jag f\u00f6rst\u00e5r det r\u00e4tt.<\/p>\n<p><\/p>\n<p><strong>Vladimir Kolobajev:<\/strong> Det handlar om att vi mycket ofta h\u00e4nvisar till historiska data, eftersom vi i realtid j\u00e4mf\u00f6r den nuvarande situationen med historiska data. Det \u00e4r viktigt f\u00f6r oss att ha snabb \u00e5tkomst till en stor m\u00e4ngd data, och ClickHouse klarar det utm\u00e4rkt.<\/p>\n<p><\/p>\n<p>Du har helt r\u00e4tt; de flesta l\u00e4sfr\u00e5gor upplever vi under den senaste dagen, precis som alla \u00f6vervakningssystem. Men belastningen p\u00e5 de historiska data \u00e4r ocks\u00e5 ganska stor. Den kommer mestadels fr\u00e5n alertsystemet, som varje trettionde sekund skickar en f\u00f6rfr\u00e5gan till ClickHouse: \"Ge mig data f\u00f6r de senaste sex veckorna. Och nu, bygg en glidande medelv\u00e4rde och j\u00e4mf\u00f6r det nuvarande v\u00e4rdet med det historiska.\" <\/p>\n<p><\/p>\n<p>Jag skulle vilja s\u00e4ga att vi f\u00f6r s\u00e5dana mycket f\u00e4rska f\u00f6rfr\u00e5gningar har en liten tabell d\u00e4r vi lagrar bara tv\u00e5 dagars data, och de huvudsakliga fr\u00e5gorna g\u00e5r till den. Till den stora shardade tabellen skickar vi endast stora historiska f\u00f6rfr\u00e5gningar.<\/p>\n<p><\/p>\n<p><strong>Alexey Milovidov:<\/strong> Tyv\u00e4rr \u00e4r det h\u00e4r inte s\u00e5 till\u00e4mpligt f\u00f6r ditt scenario, men jag kommer att beskriva tv\u00e5 d\u00e5liga och komplicerade sharding-scheman som inte b\u00f6r anv\u00e4ndas, men som mina v\u00e4nners tj\u00e4nst anv\u00e4nder. <\/p>\n<p><\/p>\n<p>Det finns en huvudkluster med h\u00e4ndelser fr\u00e5n \"Yandex.Metrica\". H\u00e4ndelserna \u00e4r sidvisningar, klick och navigeringar. De flesta f\u00f6rfr\u00e5gningar g\u00e5r till en specifik webbplats. Du \u00f6ppnar \"Yandex.Metrica\"-tj\u00e4nsten, du har en webbplats \u2013 avito.ru, g\u00e5r till rapporten, och en f\u00f6rfr\u00e5gan g\u00f6rs f\u00f6r din webbplats.<\/p>\n<p><\/p>\n<p>Men det finns \u00e4ven andra f\u00f6rfr\u00e5gningar \u2013 analytiska och globala, som g\u00f6rs av interna analytiker. Jag vill bara p\u00e5peka att interna analytiker g\u00f6r f\u00f6rfr\u00e5gningar endast om \"Yandex\"-tj\u00e4nster. Men \u00e4nd\u00e5 tar till och med \"Yandex\"-tj\u00e4nster en betydande del av all data. Det handlar om f\u00f6rfr\u00e5gningar som inte g\u00e4ller specifika m\u00e4tare, utan om bredare filtrering.<\/p>\n<p><\/p>\n<p>Hur kan vi organisera data p\u00e5 ett s\u00e5dant s\u00e4tt att b\u00e5de specifika m\u00e4tare fungerar effektivt och globala f\u00f6rfr\u00e5gningar ocks\u00e5? Sv\u00e5righeten \u00e4r ocks\u00e5 att antalet f\u00f6rfr\u00e5gningar i ClickHouse p\u00e5 \"Metrics\"-klustret \u00e4r flera tusen i sekunden. Samtidigt orkar inte en enskild ClickHouse-server med icke-triviala f\u00f6rfr\u00e5gningar, exempelvis flera tusen i sekunden.<\/p>\n<p><\/p>\n<p>Klustrets storlek \u00e4r \u00f6ver sexhundra servrar. Om man bara l\u00e4gger en distribuerad tabell \u00f6ver detta kluster och skickar flera tusen f\u00f6rfr\u00e5gningar dit, kommer det bli \u00e4nnu v\u00e4rre \u00e4n att skicka dem till en enda server. \u00c5 andra sidan, om vi har data j\u00e4mnt f\u00f6rdelad, och vi g\u00e5r dit och fr\u00e5gar alla servrar, kan vi direkt avf\u00e4rda den id\u00e9n.<\/p>\n<p><\/p>\n<p>Det finns ett diametralt motsatt alternativ. T\u00e4nk dig att vi shardar data baserat p\u00e5 webbplatser, s\u00e5 att f\u00f6rfr\u00e5gningar f\u00f6r en specifik webbplats g\u00e5r till en enda shard. Nu kan klustret klara av tiotusen f\u00f6rfr\u00e5gningar per sekund, men p\u00e5 en shard kommer en viss f\u00f6rfr\u00e5gning att g\u00e5 f\u00f6r l\u00e5ngsamt. Den kommer inte att kunna skalas upp n\u00e4r det g\u00e4ller kapacitet. Speciellt om det handlar om webbplatsen avito.ru. Jag avsl\u00f6jar ingen hemlighet om jag s\u00e4ger att Avito \u00e4r en av de mest bes\u00f6kta webbplatserna i Ryssland. Att bearbeta det p\u00e5 en enda shard skulle vara galenskap.<\/p>\n<p><\/p>\n<p>D\u00e4rf\u00f6r \u00e4r shardningsschemat utformat p\u00e5 ett mer subtilt s\u00e4tt. Hela klustret \u00e4r uppdelat i ett visst antal kluster som vi kallar lager. Inom varje kluster finns det mellan ett dussin till flera dussin shards. Och totalt finns det trettionio s\u00e5dana kluster. <\/p>\n<p><\/p>\n<p>Hur skalas allt detta? Antalet kluster f\u00f6r\u00e4ndras inte \u2014 som det var f\u00f6r flera \u00e5r sedan med trettionio, s\u00e5 \u00e4r det fortfarande. Men inom varje av dem \u00f6kar vi gradvis antalet shards allt eftersom data samlas. Och shardningsschemat i sin helhet \u00e4r s\u00e5 h\u00e4r \u2014 uppdelningen i dessa kluster sker baserat p\u00e5 webbplatser, och f\u00f6r att f\u00f6rst\u00e5 vilken webbplats som h\u00f6r till vilket kluster anv\u00e4nds en separat metabank i MySQL. En webbplats \u2014 p\u00e5 ett kluster. Och inom den sker shardningen baserat p\u00e5 anv\u00e4ndaridentifierare.<\/p>\n<p><\/p>\n<p>Vid registrering delar vi upp dem efter resten av divisionen av bes\u00f6karens identifierare. Men n\u00e4r en ny shard l\u00e4ggs till \u00e4ndras shardningsschemat, vi forts\u00e4tter att dela upp, men baserat p\u00e5 resten av divisionen med ett annat tal. Det betyder att en bes\u00f6kare faktiskt kan vara placerad p\u00e5 flera servrar, och det kan vi inte lita p\u00e5. Detta \u00e4r gjort uteslutande f\u00f6r att data ska komprimeras b\u00e4ttre. Vid f\u00f6rfr\u00e5gningar g\u00e5r vi till den distribuerade tabellen, som tittar p\u00e5 klustret och kontaktar dussintals servrar. S\u00e5 fungerar det konstiga schemat.<\/p>\n<p><\/p>\n<p>Men min ber\u00e4ttelse skulle vara ofullst\u00e4ndig om jag inte n\u00e4mner att vi \u00f6vergav detta schema. I det nya schemat \u00e4ndrade vi allt och kopierade all data med hj\u00e4lp av clickhouse-copier.<\/p>\n<p><\/p>\n<p>I det nya schemat delas alla webbplatser in i tv\u00e5 kategorier \u2013 stora och sm\u00e5. Jag vet inte hur tr\u00f6skeln valdes, men resultatet blev att stora webbplatser skrivs till ett kluster med 120 shards, d\u00e4r varje shard har tre repliker \u2013 det vill s\u00e4ga 360 servrar. Och shardningsschemat \u00e4r s\u00e5dant att varje f\u00f6rfr\u00e5gan g\u00e5r direkt till alla shards. Om du nu \u00f6ppnar vilken som helst rapportsida f\u00f6r avito.ru i \"Yandex.Metrica\", kommer f\u00f6rfr\u00e5gan att g\u00e5 till 120 servrar. Det finns f\u00e5 stora webbplatser i ryska n\u00e4tet. Och det blir inte tusen f\u00f6rfr\u00e5gningar per sekund, utan till och med mindre \u00e4n hundra. Allt detta hanteras lugnt av den distribuerade tabellen, som bearbetas av 120 servrar.<\/p>\n<p><\/p>\n<p>Det andra klustret \u00e4r f\u00f6r sm\u00e5 webbplatser. H\u00e4r \u00e4r shardningsschemat baserat p\u00e5 webbplatsens identifikator, och varje f\u00f6rfr\u00e5gan g\u00e5r precis till en shard.<\/p>\n<p><\/p>\n<h2 id=\"anchorclickhouse-copieranchorv-clickhouse-est-utilita-clickhouse-copier-mozhete-pronbspneyo-rasskazat\"><noindex><a rel=\"nofollow\" name=\"clickhouse-copier\"><\/a><\/noindex>Det finns ett verktyg i ClickHouse som heter clickhouse-copier. Kan du ber\u00e4tta mer om det?<\/h2>\n<p><\/p>\n<p>Jag s\u00e4ger direkt att denna l\u00f6sning \u00e4r mer klumpig och n\u00e5got mindre effektiv. F\u00f6rdelen \u00e4r att den sprider datan helt i enlighet med det schema du anger. Men nackdelen med verktyget \u00e4r att det inte utf\u00f6r resurshandling. Den kopierar data fr\u00e5n en klusterschema till en annan klusterschema.<\/p>\n<p><\/p>\n<p>Detta betyder att f\u00f6r dess funktion m\u00e5ste du ha tv\u00e5 kluster. De kan ligga p\u00e5 samma servrar, men \u00e4nd\u00e5 kommer data inte att flyttas inkrementellt utan kommer att kopieras. <\/p>\n<p><\/p>\n<p>Till exempel, det fanns fyra servrar, nu finns det \u00e5tta. Du skapar en ny Distributed-tabell p\u00e5&nbsp;alla servrar, nya lokala tabeller och startar clickhouse-copier, d\u00e4r du anger arbetsmetoden, att den ska l\u00e4sa d\u00e4rifr\u00e5n, ta emot det nya shardingschemat och f\u00f6rdela data dit. Och du kommer att beh\u00f6va 1,5 g\u00e5nger mer utrymme p\u00e5&nbsp;de gamla servrarna \u00e4n vad som finns nu, eftersom de gamla data m\u00e5ste f\u00f6rbli kvar d\u00e4r, och dessutom kommer h\u00e4lften av dessa gamla data att ankomma. Om du har t\u00e4nkt p\u00e5 att data beh\u00f6ver omf\u00f6rdelas och det finns utrymme, d\u00e5 passar denna metod.<\/p>\n<p><\/p>\n<p>Hur fungerar clickhouse-copier internt? Den delar upp hela arbetet i en upps\u00e4ttning uppgifter f\u00f6r att behandla en partition av en tabell p\u00e5&nbsp;ett shard. Alla dessa uppgifter kan utf\u00f6ras parallellt, och clickhouse-copier kan k\u00f6ras p\u00e5&nbsp;olika maskiner i&nbsp;flera instanser, men vad den g\u00f6r f\u00f6r en partition&nbsp;\u2014 \u00e4r inget annat \u00e4n insert select. Data l\u00e4ses, dekomprimeras, omf\u00f6rdelas, komprimeras igen, skrivs n\u00e5gonstans, sorteras om. Det \u00e4r en tyngre l\u00f6sning.<\/p>\n<p><\/p>\n<h2 id=\"anchorresharding-toolanchoru-vas-byla-pilotnaya-shtuka-kotoraya-nazyvalas-resharding-chto-snbspney\"><noindex><a rel=\"nofollow\" name=\"resharding-tool\"><\/a><\/noindex>Ni hade en pilotgrej som kallades reshading. Vad h\u00e4nde med den?<\/h2>\n<p><\/p>\n<blockquote><p>Du hade en pilotgrej redan 2017 som kallades resharding. Det finns till och med en funktion i&nbsp;ClickHouse. Jag f\u00f6rst\u00e5r att det inte lyfte. Kan du ber\u00e4tta varf\u00f6r det blev s\u00e5? Det verkar ju ganska aktuellt.<\/p><\/blockquote>\n<p>Problemet \u00e4r att n\u00e4r det beh\u00f6vs att omf\u00f6rdela data p\u00e5&nbsp;plats kr\u00e4vs en ganska komplex synkronisering f\u00f6r att g\u00f6ra det atom\u00e4rt. N\u00e4r vi b\u00f6rjade titta p\u00e5 hur denna synkronisering \u00e4r uppbyggd, blev det tydligt att det finns fundamentala problem. Och dessa fundamentala problem \u00e4r inte bara teoretiska, utan de b\u00f6rjade omedelbart visa sig i&nbsp;praktiken i&nbsp;form av n\u00e5got som enkelt kan f\u00f6rklaras \u2014 ingenting fungerar.<\/p>\n<p><\/p>\n<h2 id=\"anchormove-to-slow-diskanchormozhno-li-slivat-vse-chasti-dannyh-voedino-perednbspperemescheniem-nanbspmedlennye-diski\"><noindex><a rel=\"nofollow\" name=\"move-to-slow-disk\"><\/a><\/noindex>Kan vi sl\u00e5 ihop alla delar av data innan vi flyttar dem till l\u00e5ngsamma diskar?<\/h2>\n<p><\/p>\n<blockquote><p>Fr\u00e5ga om TTL med alternativet flytta till l\u00e5ngsam disk i&nbsp;kontexten av sammanslagningar. Finns det n\u00e5got s\u00e4tt, f\u00f6rutom cron, att sl\u00e5 samman alla delar till en innan de flyttas till&nbsp;l\u00e5ngsamma diskar?<\/p><\/blockquote>\n<p>Svaret p\u00e5&nbsp;fr\u00e5gan om det g\u00e5r att automatiskt sl\u00e5 samman alla bitar till en innan de flyttas&nbsp;\u2014 nej. Jag tror inte att det \u00e4r n\u00f6dv\u00e4ndigt. Man kan ocks\u00e5 l\u00e5ta dem flyttas till&nbsp;l\u00e5ngsamma diskar automatiskt utan att sl\u00e5 samman alla delar till en. <\/p>\n<p><\/p>\n<p>Vi har tv\u00e5 kriterier f\u00f6r flyttregler. Det f\u00f6rsta \u2014 baserat p\u00e5 fillniv\u00e5. Om det nuvarande lagret har mindre \u00e4n en viss procent ledigt utrymme, v\u00e4ljer vi en del och flyttar den till ett l\u00e5ngsammare lagringsmedel. Snarare inte mer l\u00e5ngsamt, utan n\u00e4sta \u2014 som du st\u00e4ller in.<\/p>\n<p><\/p>\n<p>Det andra kriteriet \u2014 baserat p\u00e5 storlek. Det handlar om att flytta stora bitar. Du kan justera tr\u00f6skeln f\u00f6r ledigt utrymme p\u00e5 den snabba disken, s\u00e5 kommer data att flyttas automatiskt.<\/p>\n<p><\/p>\n<h2 id=\"anchorup-to-dateanchorkak-pereezzhat-nanbspnovye-versii-clickhouse-esli-net-vozmozhnosti-zaranee-proverit-sovmestimost\"><noindex><a rel=\"nofollow\" name=\"up-to-date\"><\/a><\/noindex>Hur migra till nya versioner av ClickHouse om vi inte kan kontrollera kompatibiliteten i f\u00f6rv\u00e4g?<\/h2>\n<p><\/p>\n<blockquote><p>Detta \u00e4mne diskuteras regelbundet <noindex><a rel=\"nofollow\" href=\"https:\/\/teleg.run\/clickhouse_ru\">i Telegram-chatten ClickHouse<\/a><\/noindex> med h\u00e4nsyn till olika versioner, och \u00e4nd\u00e5. Hur s\u00e4kert \u00e4r det att uppgradera fr\u00e5n version 19.11 till 19.16 och till exempel fr\u00e5n 19.16 till 20.3? Hur \u00e4r det b\u00e4st att migrera till nya versioner utan att p\u00e5 f\u00f6rhand kunna kontrollera kompatibilitet i en sandl\u00e5da?<\/p><\/blockquote>\n<p>H\u00e4r \u00e4r n\u00e5gra \"gyllene\" regler. Den f\u00f6rsta \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\/blob\/master\/CHANGELOG.md\">att l\u00e4sa changelog<\/a><\/noindex>. Den \u00e4r stor, men det finns specifika punkter om bak\u00e5tkompatibilitets\u00e4ndringar. Man b\u00f6r inte se dessa punkter som en r\u00f6d flagga. Vanligtvis handlar det om sm\u00e5 inkompatibiliteter som \u00e4r kopplade till viss kantfunktionalitet som du troligtvis inte anv\u00e4nder.<\/p>\n<p><\/p>\n<p>Det andra \u2014 om det inte finns m\u00f6jlighet att kontrollera kompatibilitet i en sandl\u00e5da, och du vill uppgradera direkt i produktion, s\u00e5 \u00e4r rekommendationen att inte g\u00f6ra det. Skapa f\u00f6rst en sandl\u00e5da och testa. Om du inte har en testmilj\u00f6, s\u00e5 har du antagligen inte ett s\u00e4rskilt stort f\u00f6retag, vilket betyder att du kan kopiera en del av data till din b\u00e4rbara dator och verifiera att allt fungerar korrekt. Du kan till och med k\u00f6ra flera repliker lokalt p\u00e5 din egen maskin. Eller s\u00e5 kan du st\u00e4lla upp en ny version n\u00e5gonstans n\u00e4ra och l\u00e4gga in en del av data \u2014 det vill s\u00e4ga skapa en improviserad testmilj\u00f6. <\/p>\n<p><\/p>\n<p>En annan regel \u2014 v\u00e4nta med att uppgradera i en vecka efter att en version har sl\u00e4ppts f\u00f6r att kunna f\u00e5nga eventuella buggar i produktionen och de efterf\u00f6ljande snabba fixarna. L\u00e5t oss reda ut versionsnumreringen f\u00f6r ClickHouse s\u00e5 att vi inte blir f\u00f6rvirrade. <\/p>\n<p><\/p>\n<p>Det finns version 20.3.4. Numret 20&nbsp;indikerar \u00e5ret den sl\u00e4pptes&nbsp;\u2014 2020. Fr\u00e5n ett tekniskt perspektiv spelar det ingen roll, s\u00e5 vi kommer inte att fokusera p\u00e5 det. N\u00e4sta del&nbsp;\u2014 20.3. Den andra siffran&nbsp;\u2014 i detta fall 3 \u2014 \u00f6kar vi varje g\u00e5ng vi sl\u00e4pper en version med n\u00e5gon ny funktionalitet. Om vi vill l\u00e4gga till n\u00e5gon funktion i&nbsp;ClickHouse m\u00e5ste vi \u00f6ka det h\u00e4r numret. S\u00e5 i version 20.4 kommer ClickHouse att fungera \u00e4nnu b\u00e4ttre. Tredje siffran&nbsp;\u2014 20.3.4. H\u00e4r \u00e4r 4 antalet patch-versioner d\u00e4r vi inte har lagt till n\u00e5gra nya funktioner, men har \u00e5tg\u00e4rdat vissa buggar. Och 4&nbsp;betyder att vi har gjort detta fyra g\u00e5nger.<\/p>\n<p><\/p>\n<p>T\u00e4nk inte att detta \u00e4r n\u00e5got skr\u00e4mmande. Vanligtvis kan anv\u00e4ndaren installera den senaste versionen, och den kommer att fungera utan&nbsp;problem under ett \u00e5r. Men t\u00e4nk dig att en funktion f\u00f6r att hantera bitmappar, som lades till av v\u00e5ra kinesiska kollegor, g\u00f6r att servern kraschar n\u00e4r felaktiga argument skickas. Vi \u00e4r skyldiga att \u00e5tg\u00e4rda detta. Vi kommer att sl\u00e4ppa en ny patch-version, och ClickHouse kommer att bli stabilare.<\/p>\n<p><\/p>\n<p>Om du har ClickHouse i&nbsp;produktion och en ny version av ClickHouse med ytterligare funktioner sl\u00e4pps \u2014 som till exempel&nbsp;20.4.1 \u2014 var inte snabb med att installera den i&nbsp;produktionsmilj\u00f6n direkt. Vad beh\u00f6ver du den f\u00f6r? Om du inte redan anv\u00e4nder ClickHouse kan du installera den och troligtvis kommer allt att g\u00e5 bra. Men om ClickHouse redan fungerar stabilt, h\u00e5ll utkik efter&nbsp;patchar och uppdateringar&nbsp;\u2014 vilka problem vi \u00e5tg\u00e4rdar.<\/p>\n<p><\/p>\n<p><strong>Kirill Shvakov:<\/strong> Jag vill bara till\u00e4gga lite om testmilj\u00f6er. M\u00e5nga \u00e4r v\u00e4ldigt r\u00e4dda f\u00f6r testmilj\u00f6er och tycker att om du har ett mycket stort ClickHouse-kluster, s\u00e5 b\u00f6r \u00e4ven testmilj\u00f6n vara lika stor eller \u00e5tminstone tio g\u00e5nger mindre. S\u00e5 \u00e4r det inte alls.<\/p>\n<p><\/p>\n<p>Jag kan prata utifr\u00e5n min egen erfarenhet. Jag har ett projekt, och d\u00e4r finns ClickHouse. V\u00e5r testmilj\u00f6 f\u00f6r detta&nbsp;\u2014 \u00e4r en liten virtuell maskin i&nbsp;Hetzner f\u00f6r&nbsp;tjugo euro, d\u00e4r allt \u00e4r fullt utrustat. F\u00f6r att kunna g\u00f6ra detta har vi fullst\u00e4ndig automation med Ansible, s\u00e5 det \u00e4r i princip ingen skillnad om vi k\u00f6r det p\u00e5 fysiska servrar eller helt enkelt s\u00e4tter upp det i&nbsp;virtuella milj\u00f6er.<\/p>\n<p><\/p>\n<p>Vad kan man g\u00f6ra? Det skulle vara bra att inkludera ett exempel i ClickHouse-dokumentationen om hur man s\u00e4tter upp en liten klusterlokalt \u2013 i Docker, i LXC, kanske skapa ett Ansible-playbook, eftersom olika m\u00e4nniskor har olika distributioner. Detta skulle f\u00f6renkla mycket. N\u00e4r du kan s\u00e4tta upp en kluster p\u00e5 fem minuter \u00e4r det mycket enklare att f\u00f6rs\u00f6ka f\u00f6rst\u00e5 n\u00e5got. Det \u00e4r mycket mer bekv\u00e4mt eftersom att rulla ut en produktionsversion som du inte har testat \u2013 det \u00e4r en v\u00e4g mot ingenting. Ibland fungerar det, och ibland g\u00f6r det inte. D\u00e4rf\u00f6r \u00e4r det d\u00e5ligt att hoppas p\u00e5 succ\u00e9.<\/p>\n<p><\/p>\n<p><strong>Maxim Kotyakov, senior backend engineer p\u00e5 Avito:<\/strong> Jag l\u00e4gger till lite om testmilj\u00f6er i serien av problem stora f\u00f6retag st\u00e5r inf\u00f6r. Vi har en fullst\u00e4ndig acceptanskonstruktion av ClickHouse som \u00e4r en exakt kopia av vad som finns i produktion n\u00e4r det g\u00e4ller datamodeller och inst\u00e4llningar. Denna kluster \u00e4r distribuerad i ganska uttr\u00e5kade containrar med miniminresurser. Vi skickar en viss procent av produktionsdata dit, eftersom vi har m\u00f6jlighet att replikera str\u00f6mmen i Kafka. Allt d\u00e4r \u00e4r synkroniserat och skalat \u2013 b\u00e5de vad g\u00e4ller kapacitet och fl\u00f6de, och i teorin, under andra lika villkor, b\u00f6r det fungera som produktionen. Allt som potentiellt \u00e4r explosivt rullas ut till denna milj\u00f6 f\u00f6rst och f\u00e5r st\u00e5 d\u00e4r i flera dagar tills det \u00e4r klart. Men naturligtvis \u00e4r detta en dyr, tung l\u00f6sning med icke-noll kostnader f\u00f6r underh\u00e5ll. <\/p>\n<p><\/p>\n<p><strong>Alexey Milovidov:<\/strong> Jag kommer att ber\u00e4tta vad testmilj\u00f6n f\u00f6r v\u00e5ra v\u00e4nner fr\u00e5n \"Yandex.Metrik\" best\u00e5r av. En kluster hade \u00f6ver 600 servrar, en annan hade 360, och det finns \u00e4ven en tredje och flera kluster. Testmilj\u00f6n f\u00f6r en av dem best\u00e5r helt enkelt av tv\u00e5 shardar med tv\u00e5 repliker i varje. Varf\u00f6r tv\u00e5 shardar? S\u00e5 att det inte bara finns en. Och repliker s\u00e5 att det ocks\u00e5 finns. Bara ett minimum antal som man kan till\u00e5ta sig.<\/p>\n<p><\/p>\n<p>Denna testmilj\u00f6 g\u00f6r det m\u00f6jligt att kontrollera om f\u00f6rfr\u00e5gningarna fungerar och om n\u00e5got st\u00f6rre har g\u00e5tt s\u00f6nder. Men problem uppst\u00e5r ofta av helt annat slag, n\u00e4r allt fungerar men det finns vissa sm\u00e5 f\u00f6r\u00e4ndringar i belastningen.<\/p>\n<p><\/p>\n<p>L\u00e5t mig ge ett exempel. Vi besl\u00f6t att installera den nya versionen av ClickHouse. Den har lagts ut p\u00e5 testmilj\u00f6n, automatiska tester har genomf\u00f6rts i \"Yandex.Metrika\", som j\u00e4mf\u00f6r data mellan den gamla och den nya versionen, medan hela kedjan k\u00f6rdes. Och sj\u00e4lvklart, gr\u00f6na tester fr\u00e5n v\u00e5rt CI. Annars skulle vi inte ens ha f\u00f6reslagit denna version.<\/p>\n<p><\/p>\n<p>Allt \u00e4r perfekt. Vi b\u00f6rjar rulla ut till produktion. Jag f\u00e5r ett meddelande om att lasten har \u00f6kat flera g\u00e5nger p\u00e5 graferna. Vi rullar tillbaka versionen. Jag tittar p\u00e5 grafen och ser: lasten har verkligen \u00f6kat flera g\u00e5nger under distributionen, och minskade igen n\u00e4r vi rullade tillbaka. Sedan b\u00f6rjade vi rulla tillbaka versionen. Och lasten \u00f6kade p\u00e5 samma s\u00e4tt och minskade p\u00e5 samma s\u00e4tt. S\u00e5 slutsatsen \u00e4r att lasten \u00f6kade i samband med distributionen, inget f\u00f6rv\u00e5nande.<\/p>\n<p><\/p>\n<p>Det blev sv\u00e5rt att \u00f6vertyga kollegorna att faktiskt installera den nya versionen. Jag s\u00e4ger: \"Allt \u00e4r okej, rulla ut den. H\u00e5ll tummarna, allt kommer att fungera. Just nu har lasten \u00f6kat p\u00e5 graferna, men allt \u00e4r okej. H\u00e5ll ut\". S\u00e5 vi gjorde det, och allt \u2014 versionen \u00e4r utlagd till produktion. Men n\u00e4stan varje distribution medf\u00f6r liknande problem.<\/p>\n<p><\/p>\n<h2 id=\"anchorkill-queryanchorkill-query-dolzhen-ubivat-zaprosy-no-on-etogo-ne-delaet-pochemu\"><noindex><a rel=\"nofollow\" name=\"kill-query\"><\/a><\/noindex>Kill query ska stoppa fr\u00e5gorna, men det fungerar inte. Varf\u00f6r?<\/h2>\n<p><\/p>\n<blockquote><p>En anv\u00e4ndare kom till mig, en analytiker, och skapade en f\u00f6rfr\u00e5gan som la min ClickHouse-kluster. Antingen en nod eller hela klustret \u2014 beroende p\u00e5 vilken replik eller shard f\u00f6rfr\u00e5gan hamnade i. Jag ser att alla resurser p\u00e5 CPU p\u00e5 denna server \u00e4r i kn\u00e4t, allt \u00e4r r\u00f6tt. Samtidigt svarar ClickHouse p\u00e5 f\u00f6rfr\u00e5gningar. Och jag skriver: \"Visa mig, sn\u00e4lla, processlistan, vilken f\u00f6rfr\u00e5gan som orsakade detta vansinne\".<\/p>\n<p>Jag hittar denna f\u00f6rfr\u00e5gan och skriver kill. Och jag ser att inget h\u00e4nder. Min server \u00e4r i kn\u00e4t, ClickHouse forts\u00e4tter att ge mig n\u00e5gra kommandon, visar att servern \u00e4r levande, och allt \u00e4r bra. Men jag f\u00e5r degradering i alla anv\u00e4ndarf\u00f6rfr\u00e5gningar, degradering i skrivningen till ClickHouse b\u00f6rjar, och min kill query fungerar inte. Varf\u00f6r? Jag trodde att kill query skulle d\u00f6da f\u00f6rfr\u00e5gningarna, men s\u00e5 sker det inte.<\/p><\/blockquote>\n<p>Nu kommer ett ganska konstigt svar. Det handlar om att kill query inte d\u00f6dar f\u00f6rfr\u00e5gningar. <\/p>\n<p><\/p>\n<p>Kill-query s\u00e4tter en liten flagga under namnet \"jag vill att den h\u00e4r fr\u00e5gan ska d\u00f6das\". Sj\u00e4lva fr\u00e5gan kontrollerar denna flagga under behandlingen av varje datablokk. Om den \u00e4r satt, slutar fr\u00e5gan att fungera. Det visar sig att ingen d\u00f6dar fr\u00e5gan, den m\u00e5ste sj\u00e4lv kolla och stoppa sig. Detta ska fungera i alla fall d\u00e4r fr\u00e5gan \u00e4r i behandling av datablokkar. Den kommer att bearbeta n\u00e4sta datablokk, kontrollera flaggan och stoppa.<\/p>\n<p><\/p>\n<p>Det fungerar inte i fall d\u00e4r fr\u00e5gan \u00e4r blockerad p\u00e5 n\u00e5gon operation. Men det \u00e4r f\u00f6rmodligen inte ditt fall, eftersom enligt dina ord anv\u00e4nder den massor av serverresurser. Det kan h\u00e4nda att det inte fungerar vid extern sortering och i n\u00e5gra andra detaljer. Men \u00f6verlag borde det inte vara s\u00e5 h\u00e4r, det \u00e4r en bugg. Och det enda jag kan r\u00e5da \u00e4r att uppdatera ClickHouse.<\/p>\n<p><\/p>\n<h2 id=\"anchorreading-timeanchorkak-rasschitat-vremya-otveta-pri-chitayuschey-nagruzke\"><noindex><a rel=\"nofollow\" name=\"reading-time\"><\/a><\/noindex>Hur ber\u00e4knar man svarstiden vid l\u00e4sbelastning?<\/h2>\n<p><\/p>\n<blockquote><p>Det finns en tabell som lagrar aggregat per item \u2013 olika r\u00e4knare. Antalet rader \u00e4r ungef\u00e4r hundra miljoner. Kan man f\u00f6rv\u00e4nta sig en f\u00f6ruts\u00e4gbar responstid om man ger 1K RPS p\u00e5 1K items? <\/p><\/blockquote>\n<p>Baserat p\u00e5 sammanhanget handlar det om l\u00e4sbelastning, eftersom det inte finns n\u00e5gra problem med skrivning \u2013 man kan s\u00e4tta in tusen, hundratusen eller ibland flera miljoner rader. <\/p>\n<p><\/p>\n<p>L\u00e4sfr\u00e5gor kan vara av m\u00e5nga olika slag. I select 1 kan ClickHouse utf\u00f6ra tiotusentals fr\u00e5gor per sekund, s\u00e5 \u00e4ven fr\u00e5gor med en nyckel kr\u00e4ver redan vissa resurser. Och s\u00e5dana punktfr\u00e5gor kommer att vara mer komplicerade \u00e4n i vissa key-value-databaser, eftersom varje l\u00e4sning kr\u00e4ver att ett datablokk l\u00e4ses enligt indexet. Indexet adresserar inte varje post, utan varje intervall. Det inneb\u00e4r att hela intervallet m\u00e5ste l\u00e4sas \u2013 det \u00e4r 8192 rader som standard. Och det m\u00e5ste packas upp fr\u00e5n en komprimerad datablokk p\u00e5 64 Kb till 1 Mb. Vanligtvis tar s\u00e5dana punktfr\u00e5gor n\u00e5gra millisekunder. Men det h\u00e4r \u00e4r det enklaste alternativet.<\/p>\n<p><\/p>\n<p>L\u00e5t oss prova att g\u00f6ra enkel aritmetik. Om man multiplicerar n\u00e5gra millisekunder med tusen f\u00e5r man n\u00e5gra sekunder. Det k\u00e4nns som om man inte kan hantera tusen f\u00f6rfr\u00e5gningar per sekund, men i sj\u00e4lva verket kan man det, eftersom vi har flera processortr\u00e5dar. S\u00e5 i princip kan ClickHouse ibland klara av 1000 RPS, men med korta f\u00f6rfr\u00e5gningar, just punkt-f\u00f6r-punkt.<\/p>\n<p><\/p>\n<p>Om du beh\u00f6ver skala ClickHouse-klustret efter antalet enkla f\u00f6rfr\u00e5gningar, rekommenderar jag det enklaste \u2013 att \u00f6ka antalet repliker och skicka f\u00f6rfr\u00e5gningar till en slumpm\u00e4ssig replik. Om en replik klarar femhundra f\u00f6rfr\u00e5gningar per sekund, vilket \u00e4r helt realistiskt, s\u00e5 klarar tre repliker tusenfemhundra.<\/p>\n<p><\/p>\n<p>Ibland kan man dock ocks\u00e5 konfigurera ClickHouse f\u00f6r att maximera antalet punktl\u00e4sningar. Vad beh\u00f6vs f\u00f6r detta? F\u00f6rst och fr\u00e4mst \u2013 minska indexets granularitet. Detta b\u00f6r dock inte minskas till en, utan med tanke p\u00e5 att antalet poster i indexet kommer att vara flera miljoner eller tiotals miljoner per server. Om tabellen har hundra miljoner rader kan granulariteten s\u00e4ttas till 64.<\/p>\n<p><\/p>\n<p>Man kan minska storleken p\u00e5 den komprimerade blocket. F\u00f6r detta finns inst\u00e4llningar. <strong>min compress block size<\/strong>, <strong>max compress block size<\/strong>. Dessa kan minskas, data kan omjusteras, och d\u00e5 blir punktf\u00f6rfr\u00e5gningarna snabbare. Men ClickHouse \u00e4r fortfarande inte en key-value databas. Ett stort antal sm\u00e5 f\u00f6rfr\u00e5gningar \u00e4r ett antipattern f\u00f6r belastningen.<\/p>\n<p><\/p>\n<p><strong>Kirill Shvakov:<\/strong> Jag ger ett r\u00e5d f\u00f6r fall om det \u00e4r vanliga r\u00e4knare. Detta \u00e4r en ganska standard situation n\u00e4r ClickHouse lagrar en viss r\u00e4knare. Jag har en anv\u00e4ndare, han \u00e4r fr\u00e5n ett visst land, och n\u00e5got tredje f\u00e4lt, och man beh\u00f6ver inkrementera n\u00e5got. Ta MySQL, g\u00f6r en unik nyckel \u2013 i MySQL \u00e4r den en duplicerad nyckel, och i PostgreSQL \u00e4r den en konflikt \u2013 och l\u00e4gg till med ett plustecken. Detta kommer att fungera mycket b\u00e4ttre. <\/p>\n<p><\/p>\n<p>N\u00e4r du har lite data finns det egentligen ingen mening med att anv\u00e4nda ClickHouse. Det finns vanliga databaser, och de klarar det bra. <\/p>\n<p><\/p>\n<h2 id=\"anchorpimp-my-clickhouseanchorchto-podtyunit-v-clickhouse-chtoby-bolshe-dannyh-bylo-vnbspkeshe\"><noindex><a rel=\"nofollow\" name=\"pimp-my-clickhouse\"><\/a><\/noindex>Vad kan man justera i ClickHouse f\u00f6r att ha mer data i cachen?<\/h2>\n<p><\/p>\n<blockquote><p>L\u00e5t oss f\u00f6rest\u00e4lla oss en situation \u2013 p\u00e5 servrarna finns 256 GB RAM, i det dagliga arbetet tar ClickHouse ungef\u00e4r 60\u201380 GB, i toppar upp till 130. Vad kan man aktivera och justera f\u00f6r att ha mer data i cachen och d\u00e4rmed f\u00e4rre disk\u00e5tg\u00e5ngar?<\/p><\/blockquote>\n<p>Som regel klarer operativsystemets side-cache denne oppgaven godt. Hvis du bare \u00e5pner toppen, ser etter cached eller free \u2014 der st\u00e5r det ogs\u00e5 hvor mye som er cachet \u2014 og du kan merke at all ledig minne brukes til cache. Og disse dataene vil bli lest fra RAM-en i stedet for fra disken. Jeg kan si at cachen brukes effektivt, fordi det nettopp er komprimerte data som caches.<\/p>\n<p><\/p>\n<p>Likevel, hvis du \u00f8nsker \u00e5 fremskynde noen enkle foresp\u00f8rseler ytterligere, er det mulig \u00e5 aktivere en cache for de dekomprimerte dataene inne i ClickHouse. Dette kalles <strong>uncompressed cache<\/strong>. I konfigurasjonsfilen config.xml setter du uncompressed cache size til \u00f8nsket verdi \u2014 jeg anbefaler ikke mer enn halvparten av tilgjengelig RAM, for resten vil g\u00e5 til sidens cache. <\/p>\n<p><\/p>\n<p>Dessutom finns det tv\u00e5 inst\u00e4llningar p\u00e5 f\u00f6rfr\u00e5gningsniv\u00e5. Den f\u00f6rsta inst\u00e4llningen \u2013 <strong>use uncompressed cache<\/strong> \u2014 aktiverer bruken av det. Det anbefales \u00e5 aktivere for alle foresp\u00f8rseler, unntatt tunge som kan lese all data og t\u00f8mme denne cachen. Og den andre innstillingen er noe lignende maks antall rader for bruk av cachen. Den begrenser automatisk store foresp\u00f8rseler for \u00e5 holde dem utenfor cachen.<\/p>\n<p><\/p>\n<h2 id=\"anchorstorage-configurationanchorkak-mozhno-nastroit-storage_configuration-dlya-hraneniya-v-operativke\"><noindex><a rel=\"nofollow\" name=\"storage-configuration\"><\/a><\/noindex>Hur kan man konfigurera storage_configuration f\u00f6r att lagra i RAM?<\/h2>\n<p><\/p>\n<blockquote><p>I den nya dokumentationen f\u00f6r ClickHouse l\u00e4ste jag en sektion relaterad <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.tech\/docs\/en\/single\/#table_engine-mergetree-multiple-volumes\">med data lagring<\/a><\/noindex>. I beskrivelsen er det et eksempel med rask SSD. <\/p>\n<p>Det er interessant hvordan man kan konfigurere det samme med volum varme minne. Og et annet sp\u00f8rsm\u00e5l. Hvordan fungerer select med en slik dataorganisering, vil den lese hele settet eller bare det som ligger p\u00e5 disken, og komprimeres disse dataene i minnet? Og hvordan fungerer prewhere-seksjonen med en slik dataorganisering?<\/p><\/blockquote>\n<p>Denne innstillingen p\u00e5virker lagringen av datablokker, og formatet deres endres ikke.<br \/>\nL\u00e5t oss titta p\u00e5 det i detalj. <\/p>\n<p><\/p>\n<p>Det er mulig \u00e5 konfigurere lagringen av data i RAM. Alt som konfigureres for disken \u2014 er dens bane. Du oppretter en tmpfs-partisjon, som er montert p\u00e5 en eller annen bane i filsystemet. Du angir denne banen som lagringsbane for den mest varme delen, hvor datablokker begynner \u00e5 komme inn og skrives, alt fungerer bra. <\/p>\n<p><\/p>\n<p>Men jag rekommenderar inte att g\u00f6ra det p\u00e5 grund av l\u00e5g tillf\u00f6rlitlighet, \u00e4ven om det g\u00e5r om du har minst tre repliker i olika datacenter. Om n\u00e5got h\u00e4nder kommer datan att \u00e5terst\u00e4llas. L\u00e5t oss s\u00e4ga att servern pl\u00f6tsligt st\u00e4ngdes av och sedan slogs p\u00e5 igen. Monteringen aktiverades igen, men det \u00e4r tomt. ClickHouse-servern ser vid start att dessa delar saknas, \u00e4ven om de enligt metadata i ZooKeeper borde finnas. Den kontrollerar var dessa repliker finns, beg\u00e4r dem och laddar ner dem. P\u00e5 s\u00e5 s\u00e4tt kommer datan att \u00e5terst\u00e4llas. <\/p>\n<p><\/p>\n<p>I detta avseende skiljer sig lagring av data i RAM inte principiellt fr\u00e5n lagring p\u00e5 disk, eftersom data vid skrivning till disk ocks\u00e5 f\u00f6rst hamnar i page cache och fysiskt skrivs ut i efterhand. Detta beror p\u00e5 hur filsystemet \u00e4r monterat. Men f\u00f6r s\u00e4kerhets skull vill jag s\u00e4ga att ClickHouse inte g\u00f6r fsync vid insert.<\/p>\n<p><\/p>\n<p>Datan i RAM lagras p\u00e5 exakt samma s\u00e4tt som p\u00e5 disk. En select-fr\u00e5ga v\u00e4ljer p\u00e5 samma s\u00e4tt de bitar som ska l\u00e4sas, v\u00e4ljer n\u00f6dv\u00e4ndiga dataintervall i bitarna och l\u00e4ser dem. Och prewhere fungerar precis likadant, oavsett om datan var i RAM eller p\u00e5 disk.<\/p>\n<p><\/p>\n<h2 id=\"anchorlow-cardinalityanchordo-kakogo-kolichestva-unikalnyh-znacheniy-effektiven-low-cardinality\"><noindex><a rel=\"nofollow\" name=\"low-cardinality\"><\/a><\/noindex>Till hur m\u00e5nga unika v\u00e4rden \u00e4r Low Cardinality effektiv?<\/h2>\n<p><\/p>\n<p>Low Cardinality \u00e4r smart utformat. Den skapar datordb\u00f6cker, men de \u00e4r lokala. F\u00f6r det f\u00f6rsta finns det egna ordb\u00f6cker f\u00f6r varje bit, och f\u00f6r det andra kan de till och med skilja sig \u00e5t inom samma bit f\u00f6r varje intervall. N\u00e4r antalet unika v\u00e4rden n\u00e5r en tr\u00f6skel, om jag minns r\u00e4tt, en miljon, s\u00e5 skjuts ordboken upp och en ny skapas.<\/p>\n<p><\/p>\n<p>Svaret i stort: f\u00f6r varje lokalt intervall \u2014 l\u00e5t s\u00e4ga, f\u00f6r varje dag \u2014 d\u00e4r det finns upp till en miljon unika v\u00e4rden \u00e4r Low Cardinality effektiv. D\u00e4refter kommer det bara att finnas ett fallback-alternativ d\u00e4r m\u00e5nga olika ordb\u00f6cker anv\u00e4nds ist\u00e4llet f\u00f6r en. Det kommer att fungera ungef\u00e4r som en vanlig kolumn av typen string, kanske n\u00e5got mindre effektivt, men det kommer inte att bli n\u00e5gon allvarlig nedg\u00e5ng i prestanda. <\/p>\n<p><\/p>\n<h2 id=\"anchorfulltext-searchanchorkakie-luchshie-praktiki-ponbsppolnotekstovomu-poisku-ponbsptablice-snbsppyatyu-milliardami-strok\"><noindex><a rel=\"nofollow\" name=\"fulltext-search\"><\/a><\/noindex>Vilka \u00e4r de b\u00e4sta metoderna f\u00f6r fulltexts\u00f6kning p\u00e5 en tabell med fem miljarder rader?<\/h2>\n<p><\/p>\n<p>Det finns olika svarsalternativ. Det f\u00f6rsta \u00e4r att s\u00e4ga att ClickHouse inte \u00e4r ett system f\u00f6r fulltexts\u00f6kning. F\u00f6r detta finns det speciella system, till exempel, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/enterprise-search\">Elasticsearch<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"http:\/\/sphinxsearch.com\/\">Sphinx<\/a><\/noindex>. \u00c4nd\u00e5 st\u00f6ter jag allt oftare p\u00e5 m\u00e4nniskor som s\u00e4ger att de \u00f6verg\u00e5r fr\u00e5n Elasticsearch till ClickHouse.<\/p>\n<p><\/p>\n<p>Varf\u00f6r h\u00e4nder detta? De f\u00f6rklarar att Elasticsearch slutar hantera belastningen p\u00e5 vissa volymer, med b\u00f6rjan fr\u00e5n det som r\u00f6r indexbyggande. Indices blir f\u00f6r otympliga, och om du bara \u00f6verf\u00f6r data till ClickHouse, visade det sig att de lagras flera g\u00e5nger mer effektivt i volym. S\u00f6kfr\u00e5gor handlar ofta inte om att hitta en fras i hela datavolymen med h\u00e4nsyn till morfologi, utan om helt andra saker. Till exempel, att hitta i loggarna f\u00f6r de senaste timmarna efter n\u00e5gon byte-sekvens.<\/p>\n<p><\/p>\n<p>I det h\u00e4r fallet skapar du ett index i ClickHouse, d\u00e4r det f\u00f6rsta f\u00e4ltet kommer att vara datum och tid. Det st\u00f6rsta avsk\u00e4ret av data kommer att vara just efter datumbasomr\u00e5det. Inom det valda datumbasomr\u00e5det kan man oftast g\u00f6ra fulltexts\u00f6kningar \u00e4ven med bruteforce-metoden med hj\u00e4lp av like. Like-operatorn i ClickHouse \u00e4r den mest effektiva like-operatorn du kan hitta. Om du hittar en b\u00e4ttre, s\u00e4g det till mig. <\/p>\n<p><\/p>\n<p>Men \u00e4ven like \u00e4r en fullst\u00e4ndig scanning. Och en fullst\u00e4ndig scanning kan vara l\u00e5ngsam inte bara f\u00f6r CPU, utan ocks\u00e5 f\u00f6r disken. Om du pl\u00f6tsligt har en terabyte data per dag, och du s\u00f6ker ett ord under en dag, m\u00e5ste du skanna en terabyte. Och den ligger garanterat p\u00e5 vanliga h\u00e5rddiskar, och till slut blir de s\u00e5 belastade att du inte kommer in p\u00e5 den h\u00e4r servern via SSH.<\/p>\n<p><\/p>\n<p>I det h\u00e4r fallet \u00e4r jag redo att f\u00f6resl\u00e5 ett litet trick till. Det \u00e4r av experimentell art \u2013 det kanske fungerar, och kanske inte. I ClickHouse finns fulltextsindices i form av trigram Bloom-filter. V\u00e5ra kollegor fr\u00e5n Arenadata har redan testat dessa index, och ofta fungerar de precis som avsett.<\/p>\n<p><\/p>\n<p>F\u00f6r att anv\u00e4nda dem korrekt \u00e4r det viktigt att f\u00f6rst\u00e5 hur de fungerar: vad trigram Bloom-filtret representerar och hur man v\u00e4ljer dess storlek. Jag kan s\u00e4ga att de kommer att hj\u00e4lpa f\u00f6r fr\u00e5gor om s\u00e4llsynta fraser, substr\u00e4ngar som s\u00e4llan f\u00f6rekommer i data. I det h\u00e4r fallet kommer indexen att v\u00e4lja underomr\u00e5den, och mindre data kommer att l\u00e4sas.<\/p>\n<p><\/p>\n<p>Nyligen har ClickHouse f\u00e5tt \u00e4nnu fler avancerade funktioner f\u00f6r fulltexts\u00f6kning. Detta inkluderar, f\u00f6r det f\u00f6rsta, att s\u00f6ka efter flera understr\u00e4ngar i ett enda genomg\u00e5ng, inklusive alternativ med och utan h\u00e4nsyn till versaler, med st\u00f6d f\u00f6r UTF-8 eller endast f\u00f6r ASCII. V\u00e4lj den mest effektiva metoden som passar dina behov. <\/p>\n<p><\/p>\n<p>Det har ocks\u00e5 introducerats st\u00f6d f\u00f6r att s\u00f6ka efter flera regulj\u00e4ra uttryck i ett enda genomg\u00e5ng. Du beh\u00f6ver inte skriva X like en understr\u00e4ng eller X like en annan understr\u00e4ng. Skriv allt p\u00e5 en g\u00e5ng, s\u00e5 utf\u00f6rs det maximalt effektivt.<\/p>\n<p><\/p>\n<p>F\u00f6r det tredje finns det nu ungef\u00e4rlig s\u00f6kning av regulj\u00e4ra uttryck och ungef\u00e4rlig s\u00f6kning av understr\u00e4ngar. Om n\u00e5gon har skrivit ett ord med stavfel, kommer det att s\u00f6kas efter det b\u00e4sta matchningen.<\/p>\n<p><\/p>\n<h2 id=\"anchorhello-and-welcomeanchorkak-luchshe-organizovat-dostup-vnbspclickhouse-dlyanbspbolshogo-kolichestva-polzovateley\"><noindex><a rel=\"nofollow\" name=\"hello-and-welcome\"><\/a><\/noindex>Hur organiserar man \u00e5tkomsten till ClickHouse f\u00f6r ett stort antal anv\u00e4ndare?<\/h2>\n<p><\/p>\n<blockquote><p>Ber\u00e4tta hur man b\u00e4st organiserar \u00e5tkomsten f\u00f6r ett stort antal anv\u00e4ndare och analytiker. Hur man formar en k\u00f6, prioriterar f\u00f6rfr\u00e5gningar max concurrent queries, och vilka verktyg som anv\u00e4nds?<\/p><\/blockquote>\n<p>Om klustret \u00e4r tillr\u00e4ckligt stort, kan en bra l\u00f6sning vara att s\u00e4tta upp ytterligare tv\u00e5 servrar som blir ing\u00e5ngspunkt f\u00f6r analytiker. Det vill s\u00e4ga, att inte ge analytiker \u00e5tkomst till specifika shardar i klustret, utan att helt enkelt skapa tv\u00e5 tomma servrar utan data, och konfigurera \u00e5tkomstbeh\u00f6righeter d\u00e4r. Inst\u00e4llningar f\u00f6r anv\u00e4ndare vid distribuerade f\u00f6rfr\u00e5gningar \u00f6verf\u00f6rs till externa servrar. Det inneb\u00e4r att du konfigurerar allt p\u00e5 dessa tv\u00e5 servrar, och inst\u00e4llningarna p\u00e5verkar hela klustret.<\/p>\n<p><\/p>\n<p>Dessa servrar har i princip ingen data, men m\u00e4ngden RAM-minne p\u00e5 dem \u00e4r mycket viktig f\u00f6r att utf\u00f6ra f\u00f6rfr\u00e5gningar. Disken kan ocks\u00e5 anv\u00e4ndas f\u00f6r tempor\u00e4ra data, om extern aggregering eller extern sortering \u00e4r aktiverad.<\/p>\n<p><\/p>\n<p>Det \u00e4r viktigt att titta p\u00e5 inst\u00e4llningar som \u00e4r relaterade till alla m\u00f6jliga begr\u00e4nsningar. Om jag nu g\u00e5r in p\u00e5 klustret \"Yandex.Metrica\" som analytiker och st\u00e4ller en f\u00f6rfr\u00e5gan <strong>select count from hits<\/strong>, kommer jag omedelbart att f\u00e5 ett undantag som s\u00e4ger att jag inte kan utf\u00f6ra beg\u00e4ran. Det maximala antalet rader som jag f\u00e5r skanna \u00e4r hundra miljarder, medan klustret totalt har femtio biljoner i en tabell. Detta \u00e4r den f\u00f6rsta begr\u00e4nsningen. <\/p>\n<p><\/p>\n<p>Anta att jag tar bort begr\u00e4nsningen p\u00e5 antalet rader och k\u00f6r f\u00f6rfr\u00e5gan igen. D\u00e5 kommer jag att se f\u00f6ljande undantag\u2014inst\u00e4llningen \u00e4r aktiverad. <strong>force index by date<\/strong>. Jag kan inte utf\u00f6ra beg\u00e4ran om jag inte har angett ett datumintervall. Det g\u00e5r inte att r\u00e4kna med att analytikerna skulle ange det manuellt. Ett typiskt fall \u00e4r skrivet datumintervall d\u00e4r eventdatum ligger inom en vecka. Och s\u00e5 anger de bara inte den korrekta parentesen, vilket g\u00f6r att 'and' blir 'or' \u2014 or URL match. Om det inte finns n\u00e5gra begr\u00e4nsningar kommer det att skanna URL-kolumnen och sl\u00f6sa massor av resurser.<\/p>\n<p><\/p>\n<p>Dessutom finns det tv\u00e5 prioriteringsinst\u00e4llningar i ClickHouse. Tyv\u00e4rr \u00e4r de v\u00e4ldigt primitiva. Den ena kallas helt enkelt <strong>priority<\/strong>. Om priority \u2260 0, och det utf\u00f6rs f\u00f6rfr\u00e5gningar med n\u00e5gon prioritet, men det utf\u00f6rs ocks\u00e5 en f\u00f6rfr\u00e5gan med en prioritet som har ett v\u00e4rde som \u00e4r l\u00e4gre, vilket betyder h\u00f6gre prioritet, s\u00e5 kommer en f\u00f6rfr\u00e5gan med h\u00f6gre prioritet att pausas och \u00f6verhuvudtaget inte fungera under den tiden.<\/p>\n<p><\/p>\n<p>Detta \u00e4r en mycket grov inst\u00e4llning, och den passar inte f\u00f6r de fall d\u00e5 klustret har en konstant belastning. Men om du har korta, impulsm\u00e4ssiga viktiga f\u00f6rfr\u00e5gningar och klustret mestadels st\u00e5r stilla, s\u00e5 passar en s\u00e5dan inst\u00e4llning.<\/p>\n<p><\/p>\n<p>Den n\u00e4sta prioritetsinst\u00e4llningen kallas <strong>OS tr\u00e5dprioritet<\/strong>. Den st\u00e4ller helt enkelt in nice-v\u00e4rdet f\u00f6r alla fr\u00e5getr\u00e5dar f\u00f6r Linux-schemal\u00e4ggaren. Den fungerar s\u00e5d\u00e4r, men den fungerar \u00e4nd\u00e5. Om det l\u00e4gsta v\u00e4rdet p\u00e5 nice st\u00e4lls in \u2014 det st\u00f6rsta v\u00e4rdet, vilket betyder l\u00e4gsta prioritet \u2014 och f\u00f6r f\u00f6rfr\u00e5gningar med h\u00f6g prioritet st\u00e4lls in till -19, kommer CPU:n att konsumera l\u00e5gprioriterade f\u00f6rfr\u00e5gningar ungef\u00e4r fyra g\u00e5nger mindre \u00e4n h\u00f6gprioriterade. <\/p>\n<p><\/p>\n<p>Du m\u00e5ste ocks\u00e5 st\u00e4lla in den maximala k\u00f6rningstiden f\u00f6r en f\u00f6rfr\u00e5gan \u2014 s\u00e4g fem minuter. Den minimi k\u00f6rhastigheten f\u00f6r en f\u00f6rfr\u00e5gan \u2014 det \u00e4r det mest fantastiska. Den h\u00e4r inst\u00e4llningen har funnits l\u00e4nge, och den beh\u00f6vs f\u00f6r att inte bara h\u00e4vda att ClickHouse inte saktar ner, utan f\u00f6r att tvinga fram det.<\/p>\n<p><\/p>\n<p>T\u00e4nk dig att du st\u00e4ller in: om en viss f\u00f6rfr\u00e5gan behandlar mindre \u00e4n en miljon rader per sekund \u2014 s\u00e5 kan det inte g\u00f6ras. Det sk\u00e4mmer ut v\u00e5rt goda namn, v\u00e5r goda databas. L\u00e5t oss helt enkelt f\u00f6rbjuda detta. Det finns faktiskt tv\u00e5 inst\u00e4llningar. Den ena kallas <strong>min utf\u00f6randehastighet<\/strong> \u2014 i&nbsp;sekunder, och den andra kallas timeout innan kontroll av min utf\u00f6rningshastighet&nbsp;\u2014 som standard \u00e4r femton sekunder. Det betyder att femton sekunder \u00e4r okej, men om det g\u00e5r l\u00e5ngsamt s\u00e5 kastar man helt enkelt ett undantag \u2014 avbryter f\u00f6rfr\u00e5gan.<\/p>\n<p><\/p>\n<p>Dessutom m\u00e5ste man st\u00e4lla in kvoter. I&nbsp;ClickHouse finns det en inbyggd kvotfunktion som m\u00e4ter resursf\u00f6rbrukning. Men tyv\u00e4rr g\u00e4ller det inte h\u00e5rdvaruresurser som CPU, diskar, utan logiska&nbsp;\u2014 antalet bearbetade f\u00f6rfr\u00e5gningar, rader och l\u00e4sta byte. Man kan till exempel st\u00e4lla in max hundra f\u00f6rfr\u00e5gningar under fem minuter och tusen f\u00f6rfr\u00e5gningar per timme.<\/p>\n<p><\/p>\n<p>Varf\u00f6r \u00e4r detta viktigt? F\u00f6r att vissa analytiska f\u00f6rfr\u00e5gningar kommer att utf\u00f6ras manuellt direkt fr\u00e5n&nbsp;ClickHouse-klienten. Och allt kommer att fungera bra. Men om&nbsp;ni har avancerade analytiker i&nbsp;ert f\u00f6retag, kommer de att skriva ett skript, och i&nbsp;skriptet kan det finnas ett fel. Och detta fel kommer att leda till att f\u00f6rfr\u00e5gan k\u00f6rs i&nbsp;ett o\u00e4ndligt loop. Det \u00e4r detta som beh\u00f6ver skyddas emot.<\/p>\n<p><\/p>\n<h2 id=\"anchorsmorgasbordanchormozhno-li-otdat-rezultaty-odnogo-zaprosa-desyati-klientam\"><noindex><a rel=\"nofollow\" name=\"smorgasbord\"><\/a><\/noindex>Kan man ge resultaten av en fr\u00e5ga till tio kunder?<\/h2>\n<p><\/p>\n<blockquote><p>Vi har n\u00e5gra anv\u00e4ndare som g\u00e4rna kommer med&nbsp;v\u00e4ldigt stora f\u00f6rfr\u00e5gningar vid samma tidpunkt. F\u00f6rfr\u00e5gan \u00e4r stor, den k\u00f6rs i&nbsp;principen snabbt, men p\u00e5 grund av att det \u00e4r m\u00e5nga s\u00e5dana f\u00f6rfr\u00e5gningar samtidigt, blir det v\u00e4ldigt sm\u00e4rtsamt. Kan man utf\u00f6ra samma f\u00f6rfr\u00e5gan, som kom in tio g\u00e5nger p\u00e5 rad, bara en g\u00e5ng och ge resultatet till tio kunder?<\/p><\/blockquote>\n<p>Problemet \u00e4r att vi inte har n\u00e5got resultat av cache eller cache av intermedi\u00e4ra data. Det finns en page cache fr\u00e5n operativsystemet som g\u00f6r att vi inte beh\u00f6ver l\u00e4sa data fr\u00e5n disken igen, men tyv\u00e4rr m\u00e5ste data \u00e4nd\u00e5 dekomprimeras, deserialiseras och bearbetas p\u00e5 nytt. <\/p>\n<p><\/p>\n<p>Vi skulle vilja hitta n\u00e5got s\u00e4tt att undvika detta, antingen genom att cacha intermedi\u00e4ra data eller genom att organisera liknande f\u00f6rfr\u00e5gningar i&nbsp;en k\u00f6 och l\u00e4gga till resultatcache. Just nu har vi en pull request under utveckling som l\u00e4gger till cache f\u00f6r f\u00f6rfr\u00e5gningar, men endast f\u00f6r delf\u00f6rfr\u00e5gningar i in- och join-sektionen \u2014 allts\u00e5 \u00e4r l\u00f6sningen ofullst\u00e4ndig.<\/p>\n<p><\/p>\n<p>\u00c4nd\u00e5 har vi ocks\u00e5 ibland en s\u00e5dan situation. S\u00e4rskilt det kanoniska exemplet \u00e4r f\u00f6rfr\u00e5gningar med paginering. Det finns en rapport, den har flera sidor, och en beg\u00e4ran g\u00e5r in med limit 10. Sedan samma sak igen, men limit 10,10. D\u00e4refter kommer n\u00e4sta sida. Och fr\u00e5gan \u00e4r, varf\u00f6r ber\u00e4knar vi detta varje g\u00e5ng? Men f\u00f6r tillf\u00e4llet finns det ingen l\u00f6sning, och det g\u00e5r inte att undvika detta.<\/p>\n<p><\/p>\n<p>Det finns en alternativ l\u00f6sning som placeras som en sidok\u00e4rring bredvid ClickHouse \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Vertamedia\/chproxy\">ClickHouse Proxy<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Kirill Shvakov:<\/strong> I ClickHouse Proxy finns en inbyggd hastighetsbegr\u00e4nsare och en inbyggd cache f\u00f6r resultat. Det har gjorts m\u00e5nga inst\u00e4llningar, eftersom en liknande uppgift l\u00f6stes. Proxy g\u00f6r det m\u00f6jligt att begr\u00e4nsa beg\u00e4rningar genom att st\u00e4lla dem i k\u00f6, och st\u00e4lla in hur l\u00e4nge cachade beg\u00e4rningar lever. Om beg\u00e4rningarna verkligen var identiska kommer Proxy att leverera dem flera g\u00e5nger, men g\u00e5 till ClickHouse bara en g\u00e5ng.<\/p>\n<p><\/p>\n<p>Nginx har ocks\u00e5 cache i den gratis versionen, och det fungerar ocks\u00e5. Nginx har till och med inst\u00e4llningar d\u00e4r, om beg\u00e4rningar kommer in samtidigt, kommer den att bromsa andra tills en \u00e4r slutf\u00f6rd. Men just i ClickHouse Proxy \u00e4r inst\u00e4llningen mycket b\u00e4ttre. Den \u00e4r s\u00e4rskilt skapad f\u00f6r ClickHouse, precis f\u00f6r dessa f\u00f6rfr\u00e5gningar, s\u00e5 den passar b\u00e4ttre. Och dessutom \u00e4r installationen enkel. <\/p>\n<p><\/p>\n<h2 id=\"anchorasynchronousanchorkak-byt-snbspasinhronnymi-operaciyami-i-materializovannymi-predstavleniyami\"><noindex><a rel=\"nofollow\" name=\"asynchronous\"><\/a><\/noindex>Vad g\u00f6r vi med asynkrona operationer och materialiserade vyer?<\/h2>\n<p><\/p>\n<blockquote><p>Det finns ett problem att operationerna med replacement-motorn \u00e4r asynkrona \u2014 f\u00f6rst skrivs data, sedan sker deras nedbrytning. Om det under tabellen finns en materialiserad tabell med n\u00e5gra aggregat, kommer dubbletter att skrivas d\u00e4r. Och om det inte finns n\u00e5gon komplicerad logik, kommer data att dupliceras. Vad kan man g\u00f6ra \u00e5t detta?<\/p>\n<p>Det finns en uppenbar l\u00f6sning \u2014 att implementera en trigger f\u00f6r en viss typ av materialiserade vyer vid asynkrona sammanfogningsoperationer. Finns det n\u00e5gra 'silverkuler', planer f\u00f6r att implementera s\u00e5dana funktionaliteter?<\/p><\/blockquote>\n<p>Det \u00e4r v\u00e4rt att reda ut hur deduplicering fungerar. Det jag nu ska ber\u00e4tta handlar inte om fr\u00e5gan, men det \u00e4r v\u00e4rt att komma ih\u00e5g i alla fall.<\/p>\n<p><\/p>\n<p>Vid ins\u00e4ttning i en replikeringstabell sker deduplicering av helt insatta block. Om du s\u00e4tter in samma block med samma antal rader i samma ordning igen, kommer data att dedupliceras. Du f\u00e5r \"Ok\" som svar p\u00e5 ins\u00e4ttningen, men faktiskt kommer endast en upps\u00e4ttning data att skrivas och den kommer inte att dupliceras.<\/p>\n<p><\/p>\n<p>Detta beh\u00f6vs f\u00f6r tydlighet. Om du under ins\u00e4ttningen f\u00e5r \"Ok\", betyder det att dina data har satts in. Om du f\u00e5r ett felmeddelande fr\u00e5n ClickHouse, betyder det att de inte har satts in och ins\u00e4ttningen m\u00e5ste upprepas. Men om anslutningen br\u00f6ts under ins\u00e4ttningen, vet du inte om data har satts in eller inte. Det enda alternativet \u00e4r att upprepa ins\u00e4ttningen igen. Om data verkligen har satts in och du s\u00e4tter in dem igen, sker det deduplicering av blocken. Detta beh\u00f6vs f\u00f6r att undvika dubbletter. <\/p>\n<p><\/p>\n<p>Och det \u00e4r ocks\u00e5 viktigt hur det fungerar f\u00f6r materialiserade vyer. Om data har deduplicerats vid ins\u00e4ttning i huvudtabellen, kommer det inte att g\u00e5 till den materialiserade vyn.<\/p>\n<p><\/p>\n<p>Nu ang\u00e5ende fr\u00e5gan. Du har en mer komplex situation eftersom du skriver dubbletter av enskilda rader. Det vill s\u00e4ga, inte hela blocket \u00e4r dubblerat, utan specifika rader, och de trycks ihop i bakgrunden. Faktiskt kommer data att tryckas ihop i huvudtabellen, medan de icke-ihopf\u00e4llda kommer att g\u00e5 till den materialiserade vyn, och vid sammanslagningar kommer ingenting att h\u00e4nda med de materialiserade vyerna. Eftersom en materialiserad vy \u00e4r ingenting annat \u00e4n en trigger f\u00f6r ins\u00e4ttning. Inga ytterligare operationer h\u00e4nder med den.<\/p>\n<p><\/p>\n<p>Och jag kan dessv\u00e4rre inte ge dig n\u00e5got glatt besked h\u00e4r. Man m\u00e5ste bara s\u00f6ka efter en specifik l\u00f6sning f\u00f6r detta fall. Till exempel, kan man i den materialiserade vyn ocks\u00e5 g\u00f6ra en ers\u00e4ttning, och metoden f\u00f6r deduplicering kanske fungerar p\u00e5 samma s\u00e4tt. Men tyv\u00e4rr \u00e4r det inte alltid fallet. Om den \u00e4r aggregerande, s\u00e5 kommer det inte att fungera. <\/p>\n<p><\/p>\n<p><strong>Kirill Shvakov:<\/strong> Vi hade ocks\u00e5 tempor\u00e4ra l\u00f6sningar p\u00e5 v\u00e5r tid. Det fanns en problematik med att visa annonser och vissa data som vi kunde visa i realtid - det var helt enkelt visningar. De dupliceras s\u00e4llan, men om det h\u00e4nder, s\u00e5 sl\u00e5r vi dem \u00e4nd\u00e5 samman senare. Det fanns saker som inte fick dupliceras - klick och hela den historien. Men vi ville ocks\u00e5 visa dem n\u00e4stan direkt.<\/p>\n<p><\/p>\n<p>Hur skapades de materialiserade vyerna? Det fanns vyer dit det skrivs direkt - en inspelning g\u00e5r till r\u00e5data och skrivs i vyerna. Vid n\u00e5got tillf\u00e4lle \u00e4r datan inte s\u00e4rskilt korrekt, den dupliceras och s\u00e5 vidare. Det finns en andra del av tabellen d\u00e4r de ser precis likadana ut som de materialiserade vyerna, det vill s\u00e4ga de har samma struktur. Ibland r\u00e4knar vi om datan, ber\u00e4knar datan utan dubbletter och skriver den i de tabellerna. <\/p>\n<p><\/p>\n<p>Vi gick genom API - det kommer inte att fungera manuellt med ClickHouse. API:t tittar: n\u00e4r jag har datum f\u00f6r senaste till\u00e4gget i tabellen, d\u00e4r det garanterat finns korrekta data, och han g\u00f6r en f\u00f6rfr\u00e5gan till en tabell och till en annan tabell. Fr\u00e5n en tabell v\u00e4ljer han tills en viss tidpunkt, och fr\u00e5n den andra h\u00e4mtar han det som \u00e4nnu inte har ber\u00e4knats. Och det fungerar, men inte med hj\u00e4lp av bara ClickHouse.<\/p>\n<p><\/p>\n<p>Om du har n\u00e5got API - f\u00f6r analytiker, f\u00f6r anv\u00e4ndare - s\u00e5 \u00e4r det i princip ett alternativ. Du r\u00e4knar alltid till, du r\u00e4knar alltid om. Det kan g\u00f6ras en g\u00e5ng om dagen eller vid n\u00e5gon annan tidpunkt. Du v\u00e4ljer sj\u00e4lv den tidsram som inte \u00e4r n\u00f6dv\u00e4ndig och inte kritisk f\u00f6r dig.<\/p>\n<p><\/p>\n<h2 id=\"anchordashboardanchorv-clickhouse-mnogo-logov-kak-ya-mogu-videt-vsyo-chto-proishodit-s-serverom-vnbspmomente\"><noindex><a rel=\"nofollow\" name=\"dashboard\"><\/a><\/noindex>Det finns m\u00e5nga loggar i ClickHouse. Hur kan jag se allt som h\u00e4nder med servern i realtid?<\/h2>\n<p><\/p>\n<blockquote><p>Det finns en mycket stor m\u00e4ngd olika loggar i ClickHouse, och denna m\u00e4ngd \u00f6kar. I nya versioner \u00e4r vissa av dem till och med aktiverade som standard, medan i gamla versioner m\u00e5ste de aktiveras vid uppdatering. Trots det \u00f6kar de hela tiden. Jag skulle vilja se vad som h\u00e4nder med min server just nu, kanske p\u00e5 en slags sammanst\u00e4llningspanel. <\/p>\n<p>Finns det ingen i ert team ClickHouse, eller i v\u00e4nnernas team, som st\u00f6der n\u00e5gon funktion f\u00f6r f\u00e4rdiga dashboards som visar dessa loggar som en f\u00e4rdig produkt? I slut\u00e4ndan \u00e4r det fantastiskt att bara titta p\u00e5 loggar i ClickHouse. Men det skulle vara riktigt bra om det redan var f\u00f6rberett som en dashboard. Jag skulle verkligen uppskatta det. <\/p><\/blockquote>\n<p>Det finns dashboards, men de \u00e4r inte standardiserade. I v\u00e5rt f\u00f6retag anv\u00e4nder ungef\u00e4r 60 team ClickHouse, och det konstigaste \u00e4r att m\u00e5nga av dem har dashboards som de sj\u00e4lva har gjort, som \u00e4r n\u00e5got olika. Vissa team anv\u00e4nder en intern installation av 'Yandex.Cloud'. D\u00e4r finns det vissa f\u00e4rdiga rapporter, \u00e4ven om inte alla n\u00f6dv\u00e4ndiga. Andra har sina egna. <\/p>\n<p><\/p>\n<p>Mina kollegor fr\u00e5n 'Metrik' har sin egen dashboard i Grafana, och jag har min baserad p\u00e5 deras kluster. D\u00e4r ser jag saker som cache hit f\u00f6r cache av tr\u00e4ffar. Det \u00e4r \u00e4nnu mer komplicerat eftersom vi anv\u00e4nder olika verktyg. Min dashboard skapade jag med ett v\u00e4ldigt gammalt verktyg som heter Graphite-web. Det \u00e4r helt fysiskt. Och jag anv\u00e4nder det fortfarande, \u00e4ven om Grafana troligen skulle vara mer anv\u00e4ndarv\u00e4nlig och vackrare. <\/p>\n<p><\/p>\n<p>Den grundl\u00e4ggande saken i dashboards \u00e4r densamma. Det \u00e4r systemmetrik f\u00f6r klustret: CPU, minne, disk, n\u00e4tverk. Andra \u00e4r antalet samtidiga f\u00f6rfr\u00e5gningar, antalet samtidiga sammanslagningar, antalet f\u00f6rfr\u00e5gningar per sekund, maximalt antal delar f\u00f6r partitionstabelle MergeTree, replikationsf\u00f6rdr\u00f6jning, storlek p\u00e5 replikationsk\u00f6n, antal insatta rader per sekund, antal insatta block per sekund. Detta \u00e4r allt som kommer fr\u00e5n metrik, inte fr\u00e5n loggar.<\/p>\n<p><\/p>\n<p><strong>Vladimir Kolobajev:<\/strong> Alexey, jag skulle vilja justera lite. Det finns Grafana. Grafana har en datak\u00e4lla som \u00e4r ClickHouse. S\u00e5 jag kan g\u00f6ra f\u00f6rfr\u00e5gningar direkt i ClickHouse fr\u00e5n Grafana. I ClickHouse finns det en tabell med loggar som \u00e4r densamma f\u00f6r alla. Jag vill i Grafana referera till denna loggtabell och se de f\u00f6rfr\u00e5gningar som min server g\u00f6r. Det skulle vara fantastiskt att ha en s\u00e5dan dashboard.<\/p>\n<p><\/p>\n<p>Jag har snickrat ihop den sj\u00e4lv. Men jag f\u00e5r en fr\u00e5ga \u2013 om allt \u00e4r standardiserat, och Grafana anv\u00e4nds av alla, varf\u00f6r finns det ingen officiell dashboard i 'Yandex'?<\/p>\n<p><\/p>\n<p><strong>Kirill Shvakov:<\/strong> Egentligen \u00e4r datasource som \u00e4r kopplad till ClickHouse nu underst\u00f6dd av Altinity. Jag vill bara ge en riktning f\u00f6r vad man kan unders\u00f6ka och vem man kan trycka p\u00e5. Man kan fr\u00e5ga dem, eftersom \"Yandex\" faktiskt g\u00f6r ClickHouse, och inte historien kring det. Altinity \u00e4r huvudf\u00f6retaget som just nu fr\u00e4mjar ClickHouse. De kommer inte att \u00f6verge det, utan forts\u00e4tta att st\u00f6dja det. F\u00f6r att ladda upp en dashboard p\u00e5 Grafana-webbplatsen beh\u00f6ver man bara registrera sig och ladda upp den \u2013 det \u00e4r inga st\u00f6rre problem. <\/p>\n<p><\/p>\n<p><strong>Alexey Milovidov:<\/strong> Under det senaste \u00e5ret har m\u00e5nga funktioner f\u00f6r profilering av fr\u00e5gor lagts till i ClickHouse. Det finns metrik f\u00f6r varje fr\u00e5ga g\u00e4llande resursanv\u00e4ndning. Nyligen lades dessutom en mer l\u00e5g niv\u00e5 profilerare f\u00f6r fr\u00e5gor till f\u00f6r att se var varje millisekund spenderas. Men f\u00f6r att utnyttja denna funktionalitet m\u00e5ste jag \u00f6ppna konsolklienten och skriva in en fr\u00e5ga som jag hela tiden gl\u00f6mmer. Jag har sparat den n\u00e5gonstans men gl\u00f6mmer st\u00e4ndigt var. <\/p>\n<p><\/p>\n<p>Jag skulle vilja ha ett verktyg d\u00e4r det bara st\u00e5r \u2013 h\u00e4r \u00e4r dina tunga fr\u00e5gor, grupperade efter fr\u00e5getyper. Man klickar p\u00e5 n\u00e5gon och f\u00e5r veta att den \u00e4r tung av den anledningen. F\u00f6r n\u00e4rvarande finns det inget s\u00e5dant l\u00f6sning. Och det \u00e4r faktiskt ganska konstigt, f\u00f6r n\u00e4r folk fr\u00e5gar mig: \"S\u00e4g, finns det n\u00e5gra f\u00e4rdiga dashboards f\u00f6r Grafana?\", s\u00e4ger jag: \"G\u00e5 till Grafanas webbplats, d\u00e4r finns communityn 'Dashboards', och d\u00e4r finns en dashboard fr\u00e5n Dima, och en fr\u00e5n Kostya. Vad det \u00e4r vet jag inte, jag har sj\u00e4lv inte anv\u00e4nt det.\"<\/p>\n<p><\/p>\n<h2 id=\"anchorzenanchorkak-vozdeystvovat-na-merdzhi-chtoby-server-ne-padal-vnbspoom\"><noindex><a rel=\"nofollow\" name=\"zen\"><\/a><\/noindex>Hur kan man p\u00e5verka sammanslagningar s\u00e5 att servern inte g\u00e5r ner i OOM?<\/h2>\n<p><\/p>\n<blockquote><p>Jag har en tabell med endast en partition, den \u00e4r ReplacingMergeTree. Jag har skrivit data i den under fyra \u00e5r. Jag beh\u00f6vde g\u00f6ra en alter och ta bort vissa data.<\/p>\n<p>Jag gjorde det, och under bearbetningen av denna f\u00f6rfr\u00e5gan anv\u00e4ndes allt minne p\u00e5 alla kluster-servrar, och alla servrar i klustret gick gemensamt i OOM. Sedan startade de om tillsammans, b\u00f6rjade utf\u00f6ra en sammanslagning av just den operationen, den databloken, och f\u00f6ll \u00e5terigen i OOM. Sedan startade de om igen och f\u00f6ll tillbaka. Detta slutade aldrig.<\/p>\n<p>Det visade sig senare att detta egentligen var en bugg som killarna har fixat. Det \u00e4r verkligen bra, stort tack. Men jag har \u00e4nd\u00e5 en k\u00e4nsla kvar. Och nu, n\u00e4r jag t\u00e4nker p\u00e5 att jag beh\u00f6ver g\u00f6ra en sammanslagning i tabellen, s\u00e5 f\u00e5r jag fr\u00e5gan \u2013 varf\u00f6r kan jag inte p\u00e5 n\u00e5got s\u00e4tt p\u00e5verka dessa sammanslagningar? Till exempel, begr\u00e4nsa dem utifr\u00e5n m\u00e4ngden krav p\u00e5 arbetsminne, eller i princip antalet som ska bearbeta just denna tabell.<\/p>\n<p>Jag har en tabell som heter \"Metrik\", bearbeta g\u00e4rna den \u00e5t mig i tv\u00e5 tr\u00e5dar. Det \u00e4r on\u00f6digt att producera tio eller fem sammanslagningar parallellt, g\u00f6r det i tv\u00e5. Jag tror att tv\u00e5 borde r\u00e4cka f\u00f6r mitt minne, men att bearbeta tio kanske blir f\u00f6r mycket. Varf\u00f6r kvarst\u00e5r r\u00e4dslan? Eftersom tabellen v\u00e4xer, och en dag kommer jag att befinna mig i en situation d\u00e4r det inte bara \u00e4r p\u00e5 grund av en bugg, utan p\u00e5 grund av att datan kommer att \u00e4ndras i s\u00e5 stor m\u00e4ngd att jag helt enkelt inte kommer att ha tillr\u00e4ckligt med minne p\u00e5 servern. Och d\u00e5 kommer servern att krascha p\u00e5 grund av OOM vid sammanslagningen. F\u00f6r\u00e4ndringar kan jag avbryta, men inte sammanslagningarna.<\/p><\/blockquote>\n<p>Du vet, vid sammanslagningar kommer servern inte att krascha p\u00e5 grund av OOM, eftersom det under sammanslagningen anv\u00e4nds minne endast f\u00f6r ett litet dataintervall. S\u00e5 allt kommer att g\u00e5 bra oavsett datam\u00e4ngd.<\/p>\n<p><\/p>\n<p><strong>Vladimir Kolobajev:<\/strong> Bra. H\u00e4r \u00e4r det s\u00e5 att efter att jag har fixat buggen laddade jag ner en ny version, och p\u00e5 en annan tabell, som \u00e4r mindre och har m\u00e5nga partitioner, gjorde jag en liknande operation. Under sammanslagningen f\u00f6rbrukades cirka 100 GB arbetsminne p\u00e5 servern. Jag hade 150 GB upptaget, slukade 100 GB, och det finns 50 GB kvar, s\u00e5 jag f\u00f6ll inte i OOM.<\/p>\n<p><\/p>\n<p>Vad skyddar mig just nu fr\u00e5n att falla i OOM, om det verkligen kr\u00e4ver 100 GB arbetsminne? Hur ska jag klara mig om arbetsminnet pl\u00f6tsligt tar slut under sammanslagningarna?<\/p>\n<p><\/p>\n<p><strong>Alexey Milovidov:<\/strong> Det finns ett problem att minnesanv\u00e4ndningen p\u00e5 merge inte begr\u00e4nsas. Det andra problemet \u00e4r att om en merge har schemalagts m\u00e5ste den utf\u00f6ras eftersom den \u00e4r registrerad i replikationsloggen. Replikationsloggen \u00e4r de \u00e5tg\u00e4rder som kr\u00e4vs f\u00f6r att f\u00e5 replikatet i ett konsekvent tillst\u00e5nd. Om man inte g\u00f6r manuella \u00e5tg\u00e4rder f\u00f6r att \u00e5ngra det som replikationsloggen s\u00e4ger, m\u00e5ste man p\u00e5 ett eller annat s\u00e4tt utf\u00f6ra merget.<\/p>\n<p><\/p>\n<p>Sj\u00e4lvklart skulle det vara bra att ha en begr\u00e4nsning f\u00f6r minnet som \"i runda sv\u00e4ngar\" skyddar mot OOM. Det hj\u00e4lper inte merge att genomf\u00f6ras, den kommer att starta om, n\u00e5 en viss gr\u00e4ns, kasta ett undantag och sedan starta om igen \u2014 inget bra kommer att komma ur detta. Men i princip skulle det vara nyttigt att inf\u00f6ra en s\u00e5dan begr\u00e4nsning.<\/p>\n<p><\/p>\n<h2 id=\"anchorgoanchorkak-budet-proishodit-razrabotka-golang-drayvera-dlya-clickhouse\"><noindex><a rel=\"nofollow\" name=\"go\"><\/a><\/noindex>Hur kommer utvecklingen av Golang-drivrutinen f\u00f6r ClickHouse att g\u00e5 till?<\/h2>\n<p><\/p>\n<blockquote><p>Golang-drivrutinen som Kirill Shvakov har skrivit st\u00f6ds nu officiellt av ClickHouse-teamet. Den <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse\/clickhouse-go\">finns i ClickHouse-repositoriet<\/a><\/noindex>, den \u00e4r nu stor och verklig.<\/p>\n<p>En liten anm\u00e4rkning. Det finns en fantastisk och omtyckt databas f\u00f6r o\u00e4ndlig ordning \u2014 Vertica. De har ocks\u00e5 sin officiella Python-drivrutin som st\u00f6ds av Vertica-utvecklarna. Flera g\u00e5nger har det h\u00e4nt att versionerna av databasen och drivrutinen har skiljt sig \u00e5t ganska mycket, vilket har gjort att drivrutinen slutade fungera vid vissa tillf\u00e4llen. En annan sak \u00e4r att st\u00f6det f\u00f6r denna officiella drivrutin, verkar det som, bedrivs genom systemet \"nipplar\" \u2014 du skriver till dem om problem, och det h\u00e4nger kvar i evigheter.<\/p>\n<p>Jag har tv\u00e5 fr\u00e5gor. Just nu \u00e4r Kirills Golang-drivrutin n\u00e4stan standardmetoden f\u00f6r att kommunicera fr\u00e5n Golang med ClickHouse. Endast de som fortfarande kommunicerar via http-gr\u00e4nssnittet g\u00f6r det f\u00f6r att de f\u00f6redrar det. Hur kommer utvecklingen av denna drivrutin att g\u00e5 till? Kommer den att synkroniseras med n\u00e5gra brytande f\u00f6r\u00e4ndringar i sj\u00e4lva databasen? Och hur g\u00e5r \u00e4rendehanteringen till? <\/p><\/blockquote>\n<p><strong>Kirill Shvakov:<\/strong> F\u00f6r det f\u00f6rsta \u2014 hur allt \u00e4r organiserat byr\u00e5kratiskt. Den punkten diskuterades inte, s\u00e5 jag har inget svar.<\/p>\n<p><\/p>\n<p>F\u00f6r att svara p\u00e5 fr\u00e5gan om \u00e4rendet, beh\u00f6vs lite historia om drivrutinen. Jag arbetade p\u00e5 ett f\u00f6retag d\u00e4r det fanns mycket data. Det var en reklamrotation med en enorm m\u00e4ngd h\u00e4ndelser som beh\u00f6vde lagras n\u00e5gonstans. Och vid en viss tidpunkt d\u00f6k ClickHouse upp. Vi h\u00e4llde data dit, och de f\u00f6rsta dagarna gick allt bra, men sedan kraschade ClickHouse. Vid den tidpunkten best\u00e4mde vi oss f\u00f6r att vi inte beh\u00f6vde det. <\/p>\n<p><\/p>\n<p>Ett \u00e5r senare \u00e5terv\u00e4nde vi till tanken att anv\u00e4nda ClickHouse, och vi beh\u00f6vde p\u00e5 n\u00e5got s\u00e4tt skriva data dit. F\u00f6ruts\u00e4ttningarna var s\u00e5dana \u2014 h\u00e5rdvaran var mycket svag, resurserna f\u00e5. Men vi hade alltid arbetat s\u00e5, och d\u00e4rf\u00f6r tittade vi p\u00e5 den inbyggda protokoll.<\/p>\n<p><\/p>\n<p>Eftersom vi arbetade p\u00e5 Go var det sj\u00e4lvklart att vi beh\u00f6vde en drivrutin p\u00e5 Go. Jag gjorde det n\u00e4stan p\u00e5 heltid \u2014 det var min arbetsuppgift. Tills en viss punkt lyckades vi f\u00e5 den f\u00e4rdig, och i princip trodde ingen att n\u00e5gon annan \u00e4n vi skulle anv\u00e4nda den. Sedan kom CloudFlare med exakt samma problem, och under en tid arbetade vi mycket n\u00e4ra dem eftersom de hade samma uppgifter. Vi gjorde detta b\u00e5de i ClickHouse sj\u00e4lv och i drivrutinen. <\/p>\n<p><\/p>\n<p>Vid n\u00e5got tillf\u00e4lle slutade jag bara att arbeta med dem eftersom min aktivitet n\u00e4r det g\u00e4ller ClickHouse och mitt arbete f\u00f6r\u00e4ndrades lite. D\u00e4rf\u00f6r st\u00e4ngs inte \u00e4rendena. Ibland \u00e4r det m\u00e4nniskor som kommit i repot som beh\u00f6ver n\u00e5got sj\u00e4lva. D\u00e5 kollar jag pull request och ibland r\u00e4ttar jag till n\u00e5got sj\u00e4lv, men det h\u00e4nder s\u00e4llan.<\/p>\n<p><\/p>\n<p>Jag vill \u00e5terv\u00e4nda till drivrutinen. F\u00f6r flera \u00e5r sedan, n\u00e4r allt detta b\u00f6rjade, var ClickHouse ocks\u00e5 annorlunda och hade andra m\u00f6jligheter. Nu har vi en f\u00f6rst\u00e5else f\u00f6r hur drivrutinen kan omarbetas s\u00e5 att det blir bra. Om det sker kommer version 2 definitivt att vara inkompatibel p\u00e5 grund av ackumulerade l\u00f6sningar. <\/p>\n<p><\/p>\n<p>Hur vi ska organisera detta vet jag inte. Jag har inte f\u00f6r mycket tid sj\u00e4lv. Om n\u00e5gra m\u00e4nniskor vill utveckla drivrutinen kan jag hj\u00e4lpa dem och f\u00f6rklara vad de ska g\u00f6ra. Men sj\u00e4lva Yandex aktiva deltagande i utvecklingen av projektet har \u00e4nnu inte diskuterats. <\/p>\n<p><\/p>\n<p><strong>Alexey Milovidov:<\/strong> F\u00f6r tillf\u00e4llet finns det ingen byr\u00e5krati ang\u00e5ende dessa drivrutiner. Det enda \u00e4r att de har \u00f6verf\u00f6rts till en officiell organisation, s\u00e5 den h\u00e4r drivrutinen erk\u00e4nns som den officiella standardl\u00f6sningen f\u00f6r Go. Det finns andra drivrutiner, men de kommer separat. <\/p>\n<p><\/p>\n<p>Vi har ingen utveckling f\u00f6r dessa drivrutiner internt. Fr\u00e5gan \u00e4r om vi kan anst\u00e4lla en separat person, inte specifikt f\u00f6r denna drivrutin, utan f\u00f6r utvecklingen av alla community-drivrutiner, eller om vi kan hitta n\u00e5gon utanf\u00f6r. <\/p>\n<p><\/p>\n<h2 id=\"anchorlazy-loadanchorvneshniy-slovar-ne-podnimaetsya-posle-perezagruzki-snbspvklyuchennoy-nastroykoy-lazy_load-chto-delat\"><noindex><a rel=\"nofollow\" name=\"lazy-load\"><\/a><\/noindex>Det externa ordboken laddas inte efter omstart med inst\u00e4llningen lazy_load aktiverad. Vad ska man g\u00f6ra?<\/h2>\n<p><\/p>\n<blockquote><p>Vi har inst\u00e4llningen lazy_load aktiverad, och efter serverns omstart laddas ordboken inte automatiskt. Den laddas bara n\u00e4r en anv\u00e4ndare g\u00f6r ett anrop till den ordboken. Och vid det f\u00f6rsta anropet uppst\u00e5r ett fel. Kan man p\u00e5 n\u00e5got s\u00e4tt automatiskt ladda ordb\u00f6cker med hj\u00e4lp av ClickHouse, eller beh\u00f6ver vi alltid sj\u00e4lva kontrollera deras beredskap s\u00e5 att anv\u00e4ndarna inte f\u00e5r fel?<\/p>\n<p>M\u00f6jligtvis har vi en gammal version av ClickHouse, s\u00e5 ordboken laddades inte automatiskt. Kan det vara s\u00e5?<\/p><\/blockquote>\n<p>F\u00f6rst och fr\u00e4mst kan ordb\u00f6cker tvingas ladda med hj\u00e4lp av en f\u00f6rfr\u00e5gan. <strong>system reload dictionaries<\/strong>. F\u00f6r det andra, ang\u00e5ende felet \u2014 om ordboken redan har laddats, kommer f\u00f6rfr\u00e5gningar att fungera med de data som har laddats. Om ordboken inte har laddats, kommer den att laddas precis under f\u00f6rfr\u00e5gan.<\/p>\n<p><\/p>\n<p>F\u00f6r tunga ordb\u00f6cker \u00e4r detta inte s\u00e4rskilt l\u00e4mpligt. Till exempel, att h\u00e4mta en miljon rader fr\u00e5n MySQL. N\u00e5gon g\u00f6r en enkel select, men den selecten kommer att v\u00e4nta p\u00e5 de d\u00e4r en miljonen rader. H\u00e4r finns det tv\u00e5 l\u00f6sningar. Den f\u00f6rsta \u2014 st\u00e4nga av lazy_load. Den andra \u2014 n\u00e4r servern startas, innan den belastas, g\u00f6ra <strong>system reload dictionary<\/strong> eller helt enkelt utf\u00f6ra en f\u00f6rfr\u00e5gan som anv\u00e4nder ordboken. D\u00e5 kommer ordboken att laddas. Man m\u00e5ste sj\u00e4lva \u00f6vervaka tillg\u00e4ngligheten av ordb\u00f6cker med inst\u00e4llningen lazy_load aktiverad, eftersom ClickHouse automatiskt inte h\u00e4mtar dem.<\/p>\n<p><\/p>\n<p>F\u00f6r den sista fr\u00e5gan \u00e4r svaret \u2014 antingen \u00e4r versionen gammal, eller s\u00e5 beh\u00f6ver man fels\u00f6ka. <\/p>\n<p><\/p>\n<h2 id=\"anchorreload-dictionariesanchorkak-byt-snbsptem-chto-system-reload-dictionaries-ne-podgruzhaet-ni-odin-iznbspmnozhestva-slovarey-esli-hotya-by-odin-iznbspnih-padaet-snbsposhibkoy\"><noindex><a rel=\"nofollow\" name=\"reload-dictionaries\"><\/a><\/noindex>Hur hanterar vi att system reload dictionaries inte laddar n\u00e5gon av de m\u00e5nga ordb\u00f6ckerna om minst en av dem misslyckas med ett fel?<\/h2>\n<p><\/p>\n<blockquote><p>Det finns ocks\u00e5 en fr\u00e5ga ang\u00e5ende systemladdning av ordb\u00f6cker. Vi har tv\u00e5 ordb\u00f6cker \u2014 den ena laddas inte, den andra laddas. Systemladdning av ordb\u00f6cker laddar i det h\u00e4r fallet inte n\u00e5gon ordbok, och man tvingas specifikt ladda den enskilda ordboken efter dess namn med hj\u00e4lp av systemladdning av ordbok. \u00c4r detta ocks\u00e5 relaterat till versionen av ClickHouse?<\/p><\/blockquote>\n<p>Jag vill gladeligen informera er. Detta beteende har \u00e4ndrats. S\u00e5, om ni uppdaterar ClickHouse, kommer det ocks\u00e5 att f\u00f6r\u00e4ndras. Om ni inte \u00e4r n\u00f6jda med det nuvarande beteendet <strong>system reload dictionaries<\/strong>, uppdatera och vi hoppas att det kommer att f\u00f6r\u00e4ndras till det b\u00e4ttre.<\/p>\n<p><\/p>\n<h2 id=\"anchorconnectionanchorest-li-sposob-konfigurirovat-rekvizity-vnbspkonfige-clickhouse-no-ne-svetit-ih-prinbsposhibkah\"><noindex><a rel=\"nofollow\" name=\"connection\"><\/a><\/noindex>Finns det ett s\u00e4tt att konfigurera referenser i ClickHouse-konfigurationsfilen utan att avsl\u00f6ja dem vid fel?<\/h2>\n<p><\/p>\n<blockquote><p>N\u00e4sta fr\u00e5ga handlar om fel kopplade till ordboken, n\u00e4mligen referenserna. Vi har angett referenser f\u00f6r anslutning i ClickHouse-konfigurationen till ordboken, och vid ett fel f\u00e5r vi dessa referenser och l\u00f6senord som svar. <\/p>\n<p>Vi l\u00f6ste detta fel genom att f\u00f6ra ut referenserna i ODBC-drivrutinskonfigurationen. Finns det n\u00e5got s\u00e4tt att konfigurera referenserna i ClickHouse-konfigurationen utan att avsl\u00f6ja dessa referenser vid fel?<\/p><\/blockquote>\n<p>H\u00e4r \u00e4r l\u00f6sningen verkligen \u2014 ange dessa credentials i odbc.ini, och i sj\u00e4lva ClickHouse ange endast ODBC Data Source Name. F\u00f6r \u00f6vriga k\u00e4llor till ordb\u00f6cker kommer det inte att vara s\u00e5 \u2014 varken f\u00f6r ordboken med MySQL eller f\u00f6r \u00f6vriga skall du se l\u00f6senordet vid felmeddelanden. Jag ska ocks\u00e5 kolla f\u00f6r ODBC \u2014 om s\u00e5dant finns, m\u00e5ste det bara tas bort.<\/p>\n<p><\/p>\n<h2 id=\"anchorzoom-backgroundsanchorbonus-fony-dlya-zuma-snbspposidelok\"><noindex><a rel=\"nofollow\" name=\"zoom-backgrounds\"><\/a><\/noindex>Bonus: bakgrunder f\u00f6r Zoom fr\u00e5n v\u00e5ra tr\u00e4ffar<\/h2>\n<p><\/p>\n<p>N\u00e4r du klickar p\u00e5&nbsp;bilden f\u00e5r de mest h\u00e4ngivna l\u00e4sarna bonusbakgrunder fr\u00e5n v\u00e5ra tr\u00e4ffar. Vi sl\u00e4cker br\u00e4nder tillsammans med&nbsp;teknologierna Avitos maskotar, h\u00e5ller m\u00f6ten med&nbsp;kollegor fr\u00e5n serverrum eller den gamla datorf\u00f6reningen och genomf\u00f6r daily under&nbsp;bron mot en grafitti-bakgrund.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/amp.gs\/KvUr\"><img decoding=\"async\" alt=\"ClickHouse f\u00f6r avancerade anv\u00e4ndare i fr\u00e5gor och svar\" src=\"\/wp-content\/uploads\/2020\/05\/38b2ea076283285d934913c395863eb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/500678\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0430\u043f\u0440\u0435\u043b\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0410\u0432\u0438\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043d\u0430&nbsp;\u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u043e\u0441\u0438\u0434\u0435\u043b\u043a\u0438 \u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c ClickHouse \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u041c\u0438\u043b\u043e\u0432\u0438\u0434\u043e\u0432\u044b\u043c \u0438 \u041a\u0438\u0440\u0438\u043b\u043b\u043e\u043c \u0428\u0432\u0430\u043a\u043e\u0432\u044b\u043c, Golang-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0438\u0437&nbsp;\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Integros. \u041e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443&nbsp;\u043d\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442. \u041f\u043e&nbsp;\u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0441&nbsp;\u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432 \u043d\u0430&nbsp;\u043d\u0430\u0448\u0438 \u0438 \u0437\u0440\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u043e&nbsp;\u0431\u044d\u043a\u0430\u043f\u044b, \u0440\u0435\u0448\u0430\u0440\u0434\u0438\u043d\u0433 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u0438, Golang-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0439 ClickHouse. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80776,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80775","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0430\u043f\u0440\u0435\u043b\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0410\u0432\u0438\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u043e\u0441\u0438\u0434\u0435\u043b\u043a\u0438 \u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c ClickHouse \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u041c\u0438\u043b\u043e\u0432\u0438\u0434\u043e\u0432\u044b\u043c \u0438 \u041a\u0438\u0440\u0438\u043b\u043b\u043e\u043c \u0428\u0432\u0430\u043a\u043e\u0432\u044b\u043c, Golang-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Integros.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47ClickHouse \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0430\u043f\u0440\u0435\u043b\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0410\u0432\u0438\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u043e\u0441\u0438\u0434\u0435\u043b\u043a\u0438 \u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c ClickHouse \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u041c\u0438\u043b\u043e\u0432\u0438\u0434\u043e\u0432\u044b\u043c \u0438 \u041a\u0438\u0440\u0438\u043b\u043b\u043e\u043c \u0428\u0432\u0430\u043a\u043e\u0432\u044b\u043c, Golang-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Integros.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-08T11:42:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-08T11:42:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47ClickHouse f\u00f6r avancerade anv\u00e4ndare i fr\u00e5gor och svar | ProHoster","description":"I april var ingenj\u00f6rerna p\u00e5 Avito inbjudna till online-m\u00f6ten med huvudutvecklaren f\u00f6r ClickHouse, Alexey Milovidov, och Kirill Shvakov, Golang-utvecklare fr\u00e5n f\u00f6retaget Integros.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47ClickHouse \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 | ProHoster","og:description":"\u0412 \u0430\u043f\u0440\u0435\u043b\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0410\u0432\u0438\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u043e\u0441\u0438\u0434\u0435\u043b\u043a\u0438 \u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c ClickHouse \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u043c \u041c\u0438\u043b\u043e\u0432\u0438\u0434\u043e\u0432\u044b\u043c \u0438 \u041a\u0438\u0440\u0438\u043b\u043b\u043e\u043c \u0428\u0432\u0430\u043a\u043e\u0432\u044b\u043c, Golang-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Integros.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/clickhouse-dlya-prodvinutyh-polzovatelej-v-voprosah-i-otvetah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-08T11:42:47+00:00","article:modified_time":"2020-05-08T11:42:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80775","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:11:22","updated":"2022-09-28 05:48:13","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/80775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=80775"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/80775\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/80776"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=80775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=80775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=80775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}