{"id":55027,"date":"2020-01-10T00:00:00","date_gmt":"2020-01-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu"},"modified":"2020-02-18T14:03:06","modified_gmt":"2020-02-18T11:03:06","slug":"bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","title":{"rendered":"Messenger-Datenbank (Teil 2): Abschnitt \u201elive\u201c","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Wir haben die Struktur unserer PostgreSQL-Datenbank f\u00fcr die Speicherung von Korrespondenz erfolgreich entworfen. Ein Jahr ist vergangen, und die Benutzer f\u00fcgen aktiv Inhalte hinzu; mittlerweile sind bereits <b>Millionen von Eintr\u00e4gen<\/b>, und\u2026 es beginnt alles, ein wenig langsam zu werden.<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483176\/\">Teil 1: das Ger\u00fcst der Datenbank entwerfen<\/a><\/noindex><\/li>\n<li>Teil 2: \u201elive\u201c partitionieren<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Messenger-Datenbank (Teil 2): Abschnitt \u201elive\u201c\" src=\"\/wp-content\/uploads\/2020\/01\/7830da046d9c472af15330e42cbb05e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDas Problem ist, dass <b>Mit der Zunahme der Tabellenmenge steigt auch die \u201eTiefe\u201c der Indizes<\/b> \u2013 wenn auch logarithmisch. Doch im Laufe der Zeit f\u00fchrt dies dazu, dass der Server f\u00fcr denselben Lese-\/Schreibvorgang <i>weit mehr Daten-Seiten verarbeiten muss<\/i>, als zu Beginn.<\/p>\n<p>Hier kommt <b>das Partitionieren<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nins Spiel. Ich m\u00f6chte erw\u00e4hnen, dass es nicht um Sharding geht, also um die Verteilung von Daten auf verschiedene Datenbanken oder Server. Denn selbst wenn Sie die Daten auf <b>mehrere<\/b> Server aufteilen, werden Sie das Problem der \u201eaufgebl\u00e4hten\u201c Indizes im Laufe der Zeit nicht los. Es ist klar, dass, wenn Sie es sich leisten k\u00f6nnen, jeden Tag einen neuen Server in Betrieb zu nehmen, Ihre Probleme nicht mehr nur im Bereich einer bestimmten Datenbank liegen werden.<\/p>\n<p>Wir werden keine speziellen Skripte f\u00fcr die Implementierung des Partitionierens \u201ein der Hardware\u201c betrachten, sondern vielmehr den Ansatz \u2013 was und wie man in \u201eSt\u00fccke\u201c schneiden sollte und welche Folgen dieser Wunsch haben kann.<\/p>\n<h2>Konzept<\/h2>\n<p>\nLassen Sie uns unser Ziel noch einmal festlegen: Wir m\u00f6chten sicherstellen, dass die Anzahl der lesbaren PostgreSQL-Daten bei jeder Lese-\/Schreiboperation sowohl heute als auch morgen und in einem Jahr ungef\u00e4hr gleich bleibt.<\/p>\n<p>F\u00fcr alle <b>chronologisch angesammelten Daten<\/b> (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u043b\u043e\u0433\u0438, \u0430\u0440\u0445\u0438\u0432\u044b, &#8230;) \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <b>das Datum\/Uhrzeit des Ereignisses<\/b>. In unserem Fall ist ein solches Ereignis <u>der Zeitpunkt des Versendens der Nachricht<\/u>.<\/p>\n<p>Es ist anzumerken, dass Benutzer nahezu immer <b>nur mit den \u201eletzten\u201c<\/b> solchen Daten arbeiten \u2014 sie lesen die neuesten Nachrichten, analysieren die letzten Protokolle,\u2026 Nein, nat\u00fcrlich k\u00f6nnen sie auch weiter zur\u00fcckscrollen, aber das tun sie sehr selten.<\/p>\n<p>Aus diesen Einschr\u00e4nkungen wird deutlich, dass die optimale L\u00f6sung f\u00fcr Nachrichten <b>\u201et\u00e4gliche\u201c Partitionen<\/b> sind \u2014 denn fast immer wird unser Benutzer die Daten lesen, die ihm \u201eheute\u201c oder \u201egestern\u201c zugekommen sind.<\/p>\n<p>Wenn wir den Tag \u00fcber fast nur in eine Partition schreiben und lesen, erm\u00f6glicht uns das au\u00dferdem <b>eine effizientere Nutzung von Speicher und Festplatte.<\/b> \u2014 da alle Indizes des Abschnitts problemlos in den Arbeitsspeicher passen, im Gegensatz zu den \"gro\u00dfen und dicken\" in der gesamten Tabelle.<\/p>\n<h2>Schritt f\u00fcr Schritt<\/h2>\n<p>\nInsgesamt klingt alles, was bisher gesagt wurde, wie ein durchgehender Gewinn. Und er ist erreichbar, aber daf\u00fcr m\u00fcssen wir uns anstrengen \u2014 denn <u>die Entscheidung, eine der Entit\u00e4ten zu sektionieren, f\u00fchrt zur Notwendigkeit, auch die damit verbundenen<\/u>.<\/p>\n<h4>Nachricht, ihre Eigenschaften und Projektionen<\/h4>\n<p>\nDa wir beschlossen haben, die Nachrichten nach Daten zu schneiden, macht es auch Sinn, die abh\u00e4ngigen Entit\u00e4ten-Eigenschaften (Anh\u00e4nge, Empf\u00e4ngerliste) ebenfalls zu teilen, und <b>auch nach dem Datum der Nachricht<\/b>.<\/p>\n<p>Da eine unserer typischen Aufgaben darin besteht, die Register der Nachrichten zu durchsuchen (ungelesen, eingehend, alle), ist es auch logisch, sie in die Sektionierung nach den Nachrichten zu involvieren.<\/p>\n<p><img decoding=\"async\" alt=\"Messenger-Datenbank (Teil 2): Abschnitt \u201elive\u201c\" src=\"\/wp-content\/uploads\/2020\/01\/5ea615ca97a2b865de537777c401038c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Wir f\u00fcgen den Sektionierungsschl\u00fcssel (das Datum der Nachricht) in alle Tabellen ein: Empf\u00e4nger, Datei, Register. In die Nachricht selbst kann man ihn nicht hinzuf\u00fcgen, sondern das bestehende Datum nutzen.<\/p><\/blockquote>\n<p><\/p>\n<h4>Themen<\/h4>\n<p>\nDa das Thema mehrere Nachrichten betrifft, kann es in demselben Modell nicht \u201egeteilt\u201c werden; wir m\u00fcssen uns auf etwas anderes st\u00fctzen. In unserem Fall eignet sich perfekt <b>Datum der ersten Nachricht im Chatverlauf<\/b> \u2014 also der Zeitpunkt der Erstellung des Themas.<\/p>\n<p><img decoding=\"async\" alt=\"Messenger-Datenbank (Teil 2): Abschnitt \u201elive\u201c\" src=\"\/wp-content\/uploads\/2020\/01\/4f1336a9e229221f1e25ee8d3c08fb5e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>F\u00fcgen wir den Sektionierungskey (Datum des Themas) in alle Tabellen ein: Thema, Teilnehmer.<\/p><\/blockquote>\n<p>\nNun haben wir jedoch gleich zwei Probleme:<\/p>\n<ul>\n<li>In welcher Sektion sollen wir nach Nachrichten zum Thema suchen?<\/li>\n<li>In welcher Sektion suchen wir das Thema aus der Nachricht?<\/li>\n<\/ul>\n<p>\nNat\u00fcrlich k\u00f6nnten wir weiterhin in allen Sektionen suchen, aber das w\u00e4re sehr frustrierend und w\u00fcrde all unsere Gewinne zunichte machen. Daher, um genau zu wissen, wo wir suchen sollen, erstellen wir logische Links\/Referenzen auf die Sektionen:<\/p>\n<ul>\n<li>In der Nachricht f\u00fcgen wir hinzu <b>ein Feld mit dem Datum des Themas<\/b><\/li>\n<li>Zum Thema f\u00fcgen wir hinzu <b>eine Sammlung von Nachrichten-Daten<\/b> dieser Unterhaltung (entweder in einer separaten Tabelle oder als Array von Daten)<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Messenger-Datenbank (Teil 2): Abschnitt \u201elive\u201c\" src=\"\/wp-content\/uploads\/2020\/01\/f7bfdc96c396ca37f46d876f185bf98e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa es nur wenige \u00c4nderungen der Nachrichten-Daten f\u00fcr jede einzelne Unterhaltung geben wird (da fast alle Nachrichten innerhalb von 1-2 benachbarten Tagen fallen), werde ich mich genau auf diese Variante konzentrieren.<\/p>\n<p>Zusammenfassend hat sich die Struktur unserer Datenbank unter Ber\u00fccksichtigung der Sektionierung wie folgt entwickelt:<\/p>\n<p><b class=\"spoiler_title\">Tabellen: RU, bei Abneigung gegen Kyrillisch in den Tabellennamen\/Feldern besser nicht schauen<\/b><\/p>\n<pre><code class=\"sql\">-- Abschnitte nach Datum der Nachricht\nCREATE TABLE \"Nachricht_YYYYMMDD\"(\n  \"Nachricht\"\n    uuid\n      PRIMARY KEY\n, \"Thema\"\n    uuid\n, \"DatumThema\"\n    date\n, \"Autor\"\n    uuid\n, \"DatumUhrzeit\" -- verwenden wir als Datum\n    timestamp\n, \"Text\"\n    text\n);\n\nCREATE TABLE \"Adressat_YYYYMMDD\"(\n  \"DatumNachricht\"\n    date\n, \"Nachricht\"\n    uuid\n, \"Person\"\n    uuid\n, PRIMARY KEY(\"Nachricht\", \"Person\")\n);\n\nCREATE TABLE \"Datei_YYYYMMDD\"(\n  \"DatumNachricht\"\n    date\n, \"Datei\"\n    uuid\n      PRIMARY KEY\n, \"Nachricht\"\n    uuid\n, \"BLOB\"\n    uuid\n, \"Name\"\n    text\n);\n\nCREATE TABLE \"RegisterNachrichten_YYYYMMDD\"(\n  \"DatumNachricht\"\n    date\n, \"Besitzer\"\n    uuid\n, \"TypRegister\"\n    smallint\n, \"DatumUhrzeit\"\n    timestamp\n, \"Nachricht\"\n    uuid\n, PRIMARY KEY(\"Besitzer\", \"TypRegister\", \"Nachricht\")\n);\nCREATE INDEX ON \"RegisterNachrichten_YYYYMMDD\"(\"Besitzer\", \"TypRegister\", \"DatumUhrzeit\" DESC);\n\n-- Abschnitte nach Datum des Themas\nCREATE TABLE \"Thema_YYYYMMDD\"(\n  \"DatumThema\"\n    date\n, \"Thema\"\n    uuid\n      PRIMARY KEY\n, \"Dokument\"\n    uuid\n, \"Titel\"\n    text\n);\n\nCREATE TABLE \"TeilnehmerThema_YYYYMMDD\"(\n  \"DatumThema\"\n    date\n, \"Thema\"\n    uuid\n, \"Person\"\n    uuid\n, PRIMARY KEY(\"Thema\", \"Person\")\n);\n\nCREATE TABLE \"DatenNachrichtenThema_YYYYMMDD\"(\n  \"DatumThema\"\n    date\n, \"Thema\"\n    uuid\n      PRIMARY KEY\n, \"Datum\"\n    date\n);\n<\/code><\/pre>\n<h2>Wir sparen ein paar Cent<\/h2>\n<p>\nNun, was ist, wenn wir nicht <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">die klassische Variante der Sektionierung verwenden<\/a><\/noindex> Basierend auf der Verteilung der Feldwerte (durch Trigger und Vererbung oder PARTITION BY) sowie manuell auf Anwendungsebene kann man feststellen, dass der Wert des Partitionierungsschl\u00fcssels bereits im Namen der Tabelle selbst gespeichert ist.<\/p>\n<p>Wenn Sie also so sehr <b>\u00fcber das Volumen der gespeicherten Daten besorgt sind<\/b>, dann k\u00f6nnen Sie auf diese \u201e\u00fcberfl\u00fcssigen\u201c Felder verzichten und gezielt auf bestimmte Tabellen zugreifen. Allerdings m\u00fcssen in diesem Fall alle Abfragen \u00fcber mehrere Partitionen auf die Anwendungsebene verlagert werden.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u0430\u00bb \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 \u0445\u043e\u0442\u044c \u0438 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55027","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u0430\u00bb \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 \u0445\u043e\u0442\u044c \u0438 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u043e\" \/>\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\/de\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\udd47\u0411\u0414 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 (\u0447.2): \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u0430\u00bb \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 \u0445\u043e\u0442\u044c \u0438 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu\" \/>\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-01-09T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:06+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\udd47Datenbank des Messengers (Teil 2): \u201eLive\u201c partitionieren | ProHoster","description":"Wir haben die Struktur unserer PostgreSQL-Datenbank zur Speicherung von Konversationen erfolgreich entworfen. Ein Jahr ist vergangen, und die Nutzer f\u00fcgen aktiv neue Daten hinzu. Inzwischen sind es bereits Millionen von Datens\u00e4tzen, und... es beginnt alles etwas zu stocken. Teil 1: Grundger\u00fcst der Datenbank entwerfen Teil 2: \u201eLive\u201c partitionieren. Die Tatsache ist, dass mit dem Wachstum der Tabelle auch die \u201eTiefe\u201c der Indizes w\u00e4chst \u2013 wenn auch logarithmisch. Aber im Laufe der Zeit...","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\udd47\u0411\u0414 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 (\u0447.2): \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb | ProHoster","og:description":"\u041c\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 PostgreSQL-\u0431\u0430\u0437\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438, \u043f\u0440\u043e\u0448\u0435\u043b \u0433\u043e\u0434, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442, \u0432\u043e\u0442 \u0432 \u043d\u0435\u0439 \u0443\u0436\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u2026 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u0427\u0430\u0441\u0442\u044c 1: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u043a\u0430\u0441 \u0431\u0430\u0437\u044b \u0427\u0430\u0441\u0442\u044c 2: \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u00ab\u043d\u0430\u0436\u0438\u0432\u0443\u044e\u00bb \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0441\u0442\u0435\u0442 \u0438 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u0430\u00bb \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 \u0445\u043e\u0442\u044c \u0438 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u043e","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bd-messendzhera-ch-2-sektsioniruem-nazhivuyu","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-01-09T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55027","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":"2026-01-24 13:34:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:53:48","updated":"2026-01-24 13:34:20"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=55027"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55027\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=55027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=55027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=55027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}