{"id":41081,"date":"2020-02-05T21:30:11","date_gmt":"2020-02-05T18:30:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle"},"modified":"2020-02-05T21:30:11","modified_gmt":"2020-02-05T18:30:11","slug":"cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Wie man nicht stirbt, wenn man nur Oracle kennt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Habr.<\/p>\n<p>Ich bin Misha Butrimov und m\u00f6chte Ihnen ein wenig \u00fcber Cassandra erz\u00e4hlen. Meine Ausf\u00fchrungen werden insbesondere f\u00fcr diejenigen hilfreich sein, die noch nie mit NoSQL-Datenbanken gearbeitet haben, denn sie weist viele Besonderheiten und potenzielle H\u00fcrden auf, die es zu beachten gilt. Wenn Sie au\u00dfer Oracle oder einer anderen relationalen Datenbank noch nichts gesehen haben, werden Ihnen diese Informationen das Leben erleichtern.<\/p>\n<p>Was macht Cassandra so besonders? Es handelt sich um eine NoSQL-Datenbank, die ohne einen Single Point of Failure entwickelt wurde und sich gut skalieren l\u00e4sst. Wenn Sie ein paar Terabyte f\u00fcr eine Datenbank ben\u00f6tigen, f\u00fcgen Sie einfach Knoten zum Cluster hinzu. M\u00f6chten Sie sie auf ein weiteres Rechenzentrum ausdehnen? F\u00fcgen Sie Knoten zum Cluster hinzu. Die Verarbeitung von mehr Anfragen pro Sekunde (RPS) erh\u00f6hen? Auch hier f\u00fcgen Sie zus\u00e4tzliche Knoten hinzu. Es funktioniert auch in die andere Richtung. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Wie man nicht stirbt, wenn man nur Oracle kennt\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Was kann sie noch gut? Sie ist in der Lage, viele Anfragen zu verarbeiten. Aber wie viele? 10, 20, 30, 40 Tausend Anfragen pro Sekunde? Das ist nicht viel. Auch 100.000 Schreibanfragen pro Sekunde sind nicht viel. Es gibt Unternehmen, die behaupten, 2 Millionen Anfragen pro Sekunde zu verarbeiten. Auf diese Aussage m\u00fcsste man wohl glauben. <\/p>\n<p>Cassandra unterscheidet sich grundlegend von relationalen Daten, was sehr wichtig ist zu beachten.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nicht alles, was gleich aussieht, funktioniert auch gleich.<\/h2>\n<p>\nEines Tages kam ein Kollege zu mir und fragte: \u201eHier ist die CQL Cassandra Query-Sprache, und sie hat ein SELECT-Statement, es gibt ein WHERE und ein AND. Ich schreibe Buchstaben, und es funktioniert nicht. Warum?\u201c. Wenn Sie Cassandra wie eine relationale Datenbank behandeln, steht dem Ende Ihrer Bem\u00fchungen nichts im Wege. Und ich propagiere das nicht, das ist in Russland verboten. Sie werden einfach etwas falsch konzipieren.<\/p>\n<p>Beispielsweise kommt ein Kunde zu uns und sagt: \u201eLass uns eine Datenbank f\u00fcr Serien oder eine Datenbank f\u00fcr ein Rezeptverzeichnis erstellen. Wir werden dort Gerichte mit Zutaten oder eine Liste von Serien und Schauspielern haben.\u201c Wir antworten erfreut: \u201eLass uns anfangen!\u201c. Es sind nur zwei Bytes zu \u00fcbertragen, ein paar Tabellen, und alles wird sehr schnell und zuverl\u00e4ssig funktionieren. Das klingt gro\u00dfartig, bis die Kunden wiederkommen und sagen, dass die Hausfrauen auch die umgekehrte Aufgabe l\u00f6sen wollen: Sie haben eine Liste von Zutaten und m\u00f6chten wissen, welches Gericht sie zubereiten k\u00f6nnen. Dann sind Sie erledigt.<\/p>\n<p>Das liegt daran, dass Cassandra eine hybride Datenbank ist: Sie fungiert sowohl als Key-Value-Datenbank als auch als Wide-Column-Datenbank. Wenn wir das in Java oder Kotlin beschreiben m\u00f6chten, w\u00e4re es so:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&gt;<\/code><\/p>\n<p>Das hei\u00dft, eine Map, die eine sortierte Map beinhaltet. Der erste Schl\u00fcssel dieser Map ist der Row Key oder Partition Key \u2013 der Partitionierungsschl\u00fcssel. Der zweite Schl\u00fcssel, der auf die bereits sortierte Map verweist, ist der Clustering Key.<\/p>\n<p>Um die Verteilung der Datenbank zu veranschaulichen, zeichnen wir drei Nodes. Jetzt m\u00fcssen wir verstehen, wie die Daten auf die Nodes verteilt werden. Denn wenn wir alles in eine Node stopfen (es kann davon \u00fcbrigens tausend, zweitausend oder f\u00fcnf sein \u2013 ganz egal), spricht das nicht wirklich f\u00fcr Verteilung. Daher ben\u00f6tigen wir eine mathematische Funktion, die eine Zahl zur\u00fcckgibt. Einfach eine Zahl, ein langer int, der in einen bestimmten Bereich f\u00e4llt. So wird eine Node f\u00fcr einen Bereich zust\u00e4ndig sein, die zweite f\u00fcr einen zweiten, die n-te f\u00fcr den n-ten. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Wie man nicht stirbt, wenn man nur Oracle kennt\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDiese Zahl wird durch eine Hash-Funktion generiert, die genau auf den sogenannten Partition Key angewendet wird. Dies ist die Spalte, die in der Prim\u00e4rschl\u00fcssel-Direktive angegeben wird, und sie ist der erste und wichtigste Schl\u00fcssel der Map. Sie bestimmt, auf welchem Knoten welche Daten landen. Die Tabelle wird in Cassandra fast mit derselben Syntax wie in SQL erstellt: <\/p>\n<pre><code class=\"sql\">CREATE TABLE users (\n\tuser_id uuid,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY(user_id)\n\n)\n<\/code><\/pre>\n<p>Der Prim\u00e4rschl\u00fcssel besteht in diesem Fall aus einer Spalte, die auch der Partitionierungsschl\u00fcssel ist.<\/p>\n<p>Wie werden unsere Benutzer verteilt? Ein Teil landet auf einem Knoten, ein Teil auf einem anderen und ein Teil auf einem dritten. Es entsteht eine gew\u00f6hnliche Hash-Tabelle, auch Map genannt, in Python ein Dictionary, und es handelt sich um eine einfache Key-Value-Struktur, aus der wir alle Werte lesen k\u00f6nnen, sowohl zum Lesen als auch zum Schreiben \u00fcber den Schl\u00fcssel.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Wie man nicht stirbt, wenn man nur Oracle kennt\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: wenn allow filtering in einen Full Scan umschl\u00e4gt, oder wie man es nicht machen sollte.<\/h2>\n<p>\nLassen Sie uns eine Auswahlabfrage schreiben: <code>select * from users where user_id = <\/code>. Es funktioniert \u00e4hnlich wie bei Oracle: Wir schreiben ein SELECT, geben Bedingungen an und alles funktioniert, die Benutzer werden abgerufen. Wenn wir jedoch zum Beispiel einen Benutzer mit einem bestimmten Geburtsjahr ausw\u00e4hlen, beschwert sich Cassandra, dass sie die Anfrage nicht ausf\u00fchren kann. Denn sie wei\u00df \u00fcberhaupt nichts dar\u00fcber, wie unsere Daten \u00fcber das Geburtsjahr verteilt sind \u2014 als Schl\u00fcssel ist nur eine Spalte angegeben. Dann sagt sie: \u201eGut, ich kann diese Anfrage dennoch ausf\u00fchren. F\u00fcgen Sie allow filtering hinzu\u201c. Wir f\u00fcgen die Direktive hinzu, alles funktioniert. Und in diesem Moment passiert etwas Schreckliches. <\/p>\n<p>Wenn wir mit Testdaten arbeiten, ist alles hervorragend. Aber wenn Sie eine Anfrage in der Produktion ausf\u00fchren, wo wir zum Beispiel 4 Millionen Datens\u00e4tze haben, l\u00e4uft es nicht sehr gut. Denn allow filtering ist eine Direktive, die es Cassandra erm\u00f6glicht, alle Daten aus dieser Tabelle von allen Knoten zu sammeln, und erst dann zu filtern. Das ist vergleichbar mit einem Full Scan, und ich bezweifle, dass das jemand begeistert. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/kompaniya\/data-centers\/\"   title=\"von Rechenzentren\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">von Rechenzentren<\/a> (wenn es viele in diesem Cluster gibt), und erst dann zu filtern. Das ist vergleichbar mit einem Full Scan, und ich bezweifle, dass jemand davon begeistert ist. <\/p>\n<p>Wenn wir nur Benutzer anhand ihrer IDs ben\u00f6tigen w\u00fcrden, w\u00e4re das f\u00fcr uns in Ordnung. Aber manchmal m\u00fcssen wir andere Abfragen durchf\u00fchren und andere Einschr\u00e4nkungen auf das Sampling anwenden. Daher erinnern wir uns: Das ist alles eine Map, die einen Partitionierungsschl\u00fcssel hat, aber darin befindet sich eine sortierte Map. <\/p>\n<p>Und auch diese hat einen Schl\u00fcssel, den wir Clustering-Key nennen. Dieser Schl\u00fcssel besteht wiederum aus den Spalten, die wir ausw\u00e4hlen, und mit dessen Hilfe Cassandra versteht, wie die Daten physisch sortiert werden und auf jedem Knoten gespeichert sind. Das bedeutet, dass der Clustering-Key f\u00fcr einen bestimmten Partition-Key erkl\u00e4rt, wie die Daten in diese Baumstruktur eingef\u00fcgt werden und welchen Platz sie darin einnehmen.<\/p>\n<p>Es ist tats\u00e4chlich ein Baum; es wird einfach ein Comparator aufgerufen, dem wir eine bestimmte Menge an Spalten als Objekt \u00fcbergeben, und er wird ebenfalls als Aufz\u00e4hlung der Spalten angegeben. <\/p>\n<pre><code class=\"sql\">CREATE TABLE users_by_year_salary_id (\n\tuser_id uuid,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY((year), salary, user_id)\n<\/code><\/pre>\n<p>Bitte beachten Sie die Direktive \"Prim\u00e4rschl\u00fcssel\", bei der das erste Argument (in unserem Fall das Jahr) immer der Partitionsschl\u00fcssel ist. Er kann aus einer oder mehreren Spalten bestehen, das ist nicht entscheidend. Wenn es mehrere Spalten gibt, m\u00fcssen diese nochmals in Klammern gesetzt werden, damit der Preprocessor der Sprache versteht, dass es sich um einen Prim\u00e4rschl\u00fcssel handelt, gefolgt von allen anderen Spalten \u2013 dem Clustering-Schl\u00fcssel. Diese werden dann im Comparator in der Reihenfolge \u00fcbergeben, in der sie erscheinen. Das bedeutet, die erste Spalte ist die bedeutendste, die zweite ist weniger bedeutend und so weiter. So wie wir es f\u00fcr Datenklassen machen, zum Beispiel bei den Feldern equals: wir listen die Felder auf und geben an, welche wichtiger und welche weniger wichtig sind. In Cassandra sind dies, um es so auszudr\u00fccken, die Felder der Datenklasse, auf die der geschriebene equals angewendet wird.<\/p>\n<h2>Wir legen die Sortierung fest und setzen Einschr\u00e4nkungen.<\/h2>\n<p>\nEs ist wichtig zu beachten, dass die Sortierreihenfolge (ob absteigend, aufsteigend oder egal) in dem Moment festgelegt wird, in dem der Schl\u00fcssel erstellt wird, und dass sie danach nicht mehr ver\u00e4ndert werden kann. Sie bestimmt physisch, wie die Daten sortiert werden und wie sie gespeichert sind. Wenn der Clustering-Schl\u00fcssel oder die Sortierreihenfolge ge\u00e4ndert werden m\u00fcssen, muss eine neue Tabelle erstellt und die Daten dorthin \u00fcbertragen werden. Mit einer bereits bestehenden Tabelle ist das nicht m\u00f6glich.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Wie man nicht stirbt, wenn man nur Oracle kennt\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben unsere Tabelle mit Benutzern gef\u00fcllt und festgestellt, dass sie zun\u00e4chst nach Geburtsjahr und dann innerhalb jeder Node nach Gehalt und Benutzer-ID angeordnet sind. Nun k\u00f6nnen wir Abfragen durchf\u00fchren und Einschr\u00e4nkungen anwenden. <\/p>\n<p>Unser funktionierender <code>where, und<\/code>, und wir erhalten die Benutzer, und alles ist wieder gut. Wenn wir jedoch versuchen, nur einen Teil des Clustering-Schl\u00fcssels zu verwenden, und zwar einen weniger signifikanten, wird Cassandra sofort melden, dass es in unserer Map keinen Platz finden kann, wo dieses Objekt mit diesen Feldern f\u00fcr den Comparator null ist und wo das neue, das wir gerade gesetzt haben, gespeichert ist. Ich m\u00fcsste alle Daten von dieser Node erneut abrufen und filtern. Das entspricht einem Full Scan innerhalb der Node, was nicht ideal ist.<\/p>\n<h2>In jeder unklaren Situation erstellen Sie eine neue Tabelle.<\/h2>\n<p>\nWenn wir Benutzer nach ID, Alter oder Gehalt abrufen m\u00f6chten, was tun wir? Nichts. Einfach zwei Tabellen verwenden. Wenn wir Benutzer auf drei verschiedene Arten abrufen m\u00fcssen, gibt es drei Tabellen. Die Zeiten, in denen wir Speicherplatz auf der Festplatte sparen wollten, sind vorbei. Speicher ist die g\u00fcnstigste Ressource. Er kostet viel weniger als die Antwortzeit, die f\u00fcr den Benutzer sch\u00e4dlich sein kann. Es ist f\u00fcr den Benutzer viel angenehmer, innerhalb von einer Sekunde etwas zu erhalten, als nach 10 Minuten.<\/p>\n<p>Wir tauschen \u00fcberfl\u00fcssigen Speicherplatz und denormalisierte Daten gegen die M\u00f6glichkeit, gut zu skalieren und zuverl\u00e4ssig zu arbeiten. Tats\u00e4chlich kann ein Cluster, bestehend aus drei Rechenzentren mit jeweils f\u00fcnf Nodes, bei einem akzeptablen Datenverlustniveau (bei dem sicher niemand etwas verliert) den kompletten Ausfall eines Rechenzentrums \u00fcberstehen. Zudem bleiben in den beiden verbleibenden Rechenzentren jeweils zwei Nodes vorhanden. Erst dann beginnen die Probleme. Diese Art der Redundanz ist recht gut und kostet nur ein paar zus\u00e4tzliche SSDs und Prozessoren. Daher ist es wichtig, einfache Regeln zu kennen, um Cassandra effektiv nutzen zu k\u00f6nnen, die definitiv kein SQL ist und keine Relationen oder Fremdschl\u00fcssel enth\u00e4lt.<\/p>\n<p>Wir gestalten alles ausgehend von der Anfrage. Nicht die Daten sind entscheidend, sondern wie die Anwendung mit ihnen arbeitet. Wenn sie verschiedene Daten auf unterschiedliche Weise abrufen muss oder dieselben Daten auf unterschiedliche Weise ben\u00f6tigt, sollten wir sie so anordnen, dass es f\u00fcr die Anwendung bequem ist. Andernfalls laufen wir Gefahr, in einen Full Scan zu geraten, was uns keinerlei Vorteile von Cassandra bringen wird.<\/p>\n<p>Die Denormalisierung von Daten ist ganz normal. Wir verzichten auf die Normalformen; wir haben keine relationalen Datenbanken mehr. Wenn wir etwas 100 Mal ablegen, liegt es 100 Mal vor. Das ist immer noch g\u00fcnstiger, als die Leistung zu beeintr\u00e4chtigen. <\/p>\n<p>Wir w\u00e4hlen die Schl\u00fcssel f\u00fcr die Partitionierung so aus, dass sie gleichm\u00e4\u00dfig verteilt sind. Wir wollen nicht, dass der Hash unserer Schl\u00fcssel in einen engen Bereich f\u00e4llt. Das hei\u00dft, das Geburtsjahr im obigen Beispiel ist nicht ideal. Es ist gut, wenn unsere Nutzer nach Geburtsjahr gut verteilt sind, und schlecht, wenn es um Sch\u00fcler der 5. Klasse geht \u2013 da w\u00e4re die Partitionierung nicht optimal. <\/p>\n<p>Die Sortierung wird einmal beim Erstellen des Clustering-Keys festgelegt. Wenn sie ge\u00e4ndert werden muss, m\u00fcssen wir unsere Tabelle mit einem anderen Schl\u00fcssel umstellen.<\/p>\n<p>Und das Wichtigste: Wenn wir die gleichen Daten auf 100 verschiedene Arten abrufen m\u00fcssen, haben wir 100 verschiedene Tabellen.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 NoSQL-\u0431\u0430\u0437\u0430\u043c\u0438, \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 Oracle \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u044d\u0442\u0438 \u0432\u0435\u0449\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41082,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-41081","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 NoSQL-\u0431\u0430\u0437\u0430\u043c\u0438, \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 Oracle \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u044d\u0442\u0438 \u0432\u0435\u0449\u0438\" \/>\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\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\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\udd47Cassandra. \u041a\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0440\u0435\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e Oracle | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 NoSQL-\u0431\u0430\u0437\u0430\u043c\u0438, \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 Oracle \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u044d\u0442\u0438 \u0432\u0435\u0449\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\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-02-05T18:30:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T18:30:11+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\udd47Cassandra. Wie man nicht scheitert, wenn man nur Oracle kennt | ProHoster","description":"Hallo, Habr. Mein Name ist Misha Butrimov, und ich m\u00f6chte ein wenig \u00fcber Cassandra erz\u00e4hlen. Mein Beitrag wird besonders f\u00fcr diejenigen hilfreich sein, die noch nie mit NoSQL-Datenbanken gearbeitet haben \u2013 es gibt viele spezifische Implementierungsmerkmale und Fallstricke, die man wissen sollte. Wenn Sie nur Oracle oder eine andere relationale Datenbank kennen, werden diese Punkte wichtig sein.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","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\udd47Cassandra. \u041a\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0440\u0435\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e Oracle | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 NoSQL-\u0431\u0430\u0437\u0430\u043c\u0438, \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 Oracle \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u044d\u0442\u0438 \u0432\u0435\u0449\u0438","og:url":"https:\/\/prohoster.info\/de\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","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-02-05T18:30:11+00:00","article:modified_time":"2020-02-05T18:30:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41081","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-03-01 00:24:40","updated":"2022-09-30 11:42:25"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/41081","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=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}