NewSQL = NoSQL+ACID
ביז לע׊טנס, Odnoklassniki סטא֞ךד וועגן 50 טב ׀ון דאַטן ׀֌ךאַסעסט אין ׀אַקטיש שייט אין SQL סעךוויךעך. ׀ֿאַך אַזאַ אַ באַנד, עס איז כ֌מעט אוממעגלעך שו ׊ושטעלן שנעל און ׀אַךלא֞זלעך, און א׀ילו דאַטן ׊ענטעך דוךכ׀אַל-טא֞לעךאַנט אַקסעס נישן אַ SQL DBMS. טי׀֌יקאַללי, אין אַזאַ קאַסעס, איינעך ׀ון די NoSQL סטא֞ךידזש איז געני׊ט, א֞בעך ניט אַלץ קענען זיין טךאַנס׀עךד שו NoSQL: עטלעכע ענטיטיז דאַך׀ן אַסיד טךאַנסאַקטיא֞ן געךאַנטיז.

דא֞ס הא־ט אונדז גע׀ֿיךט שו די נושן ׀ון NewSQL סטא֞ךידזש, דא֞ס איז, אַ DBMS ווא֞ס גיט שולד טא֞לעךאַנץ, סקאַלאַביליטי און ׀א֞ךשטעלונג ׀ון NoSQL סיסטעמען, א֞בעך אין דעך זעלביקעך שייט האַלטן די אַסיד געךאַנטיז באַקאַנט מיט קלאַסיש סיסטעמען. עס זענען ווייניק אךבעטן ינדאַסטךיאַל סיסטעמען ׀ון דעם נייַ קלאַס, אַזוי מי׹ ימ׀֌לאַמענאַד אַזאַ אַ סיסטעם זיך און שטעלן עס אין געשע׀ט א֞׀֌עךאַ׊יע.

ווי עס אַךבעט און ווא֞ס געטךא׀ן - לייענען אונטעך די שנייַדן.

הייַנט, די כוידעשלעך וילעם ׀ון Odnoklassniki איז מעך ווי 70 מיליא־ן יינשיק וויזאַטעךז. מי׹ מי׹ זענען אין די ש׀֌יץ ×€×™× ×£ גךעסטן געזעלשאַ׀טלעך נעטווא֞ךקס אין דעך וועלט, און ׊ווישן די ׊וואַנ׊יק זייטלעך אויף ווא֞ס ני׊עךס ׀אַךבךענגען די מעךסט שייט. די גוט ינ׀ךאַסטךאַקטשעך כאַנדאַלז זייעך הויך לא־ודז: מעך ווי אַ מיליא־ן הטט׀֌ ךיקוועס / סעק ׀֌עך ׀ךא֞נט. ׀֌אַךץ ׀ון אַ סעךוועך ׀ליט ׀ון מעך ווי 8000 בךעקלעך זענען ליגן נא֞ענט שו יעדעך אנדעךעך - אין ׀יך מא֞סקווע דאַטן סענטעךס, ווא֞ס אַלאַוז אַ × ×¢×¥ לייטאַנסי ׊ווישן זיי ווייניקעך ווי 1 מיז.

מי׹ הא־בן שוין נישן Cassandra זינט 2010, סטאַךטינג מיט וועךסיע 0.6. הייַנט עס זענען עטלעכע טוץ קלאַסטעךז אין א֞׀֌עךאַ׊יע. די ׀אַסטאַסט קנויל ׀֌ךאַסעסאַז מעך ווי 4 מיליא־ן אַ׀֌עךיישאַנז ׀֌עך סעקונדע, און די גךעסטן סטא֞ךז 260 טב.

א֞בעך, דא֞ס זענען אַלע ׀֌ךא֞סט NoSQL קלאַסטעךז געני׊ט ׀ֿאַך סטא֞ךידזש שוואַך קא֞וא֞ךדאַנייטיד דאַטן. מי׹ געוואלט שו ׀אַךבייַטן די הוי׀֌ט קא֞נסיסטענט סטא֞ךידזש, Microsoft SQL Server, ווא֞ס איז געני׊ט זינט די עךשטן ׀ון Odnoklassniki. די סטא֞ךידזש קא֞נסיסטעד ׀ון מעך ווי 300 סקל סעךוויךעך סטאַנדאַךד אַדישאַן מאשינען, ווא֞ס קאַנטיינד 50 טב ׀ון דאַטן - געשע׀ט ענטיטיז. די דאַטן זענען מאַדאַ׀ייד ווי אַ טייל ׀ון אַסיד טךאַנזאַקשאַנז און דאַך׀ן הויך קא֞נסיסטענסי.

שו ׀אַךש׀֌ךייטן דאַטן אַךיבעך SQL Server נא־ודז, מי׹ געוויינט ביידע וועךטיקאַל און הא֞ךיזא֞נטאַל ׊עטיילונג (שאַךדינג). היסטא֞ךיש, מי׹ געוויינט אַ ׀֌שוט דאַטן שאַךדינג סכעמע: יעדעך ענטיטי איז געווען ׀אךבונדן מיט אַ סימען - אַ ׀ֿונק׊יע ׀ון ​​די ענטיטי שייַן. ענטיטיז מיט די זעלבע סימען זענען געשטעלט אויף דעך זעלביקעך סקל סעךוועך. די בעל-דעטאַל שייכות איז ימ׀֌לאַמענאַד אַזוי אַז די טא֞קענס ׀ון די הוי׀֌ט און קינד ךעקא֞ךדס שטענדיק מאַטשט און זענען ליגן אויף דעך זעלביקעך סעךוועך. אין אַ געזעלשאַ׀טלעך × ×¢×¥, כ֌מעט אַלע ךעקא֞ךדס זענען דזשענעךייטאַד אויף ביכאַף ׀ון דעך באַני׊עך - ווא֞ס מיטל אַז אַלע באַני׊עך דאַטן אין איין ׀אַנגקשאַנאַל סאַבסיסטאַם זענען סטא֞ךד אויף איין סעךוועך. אַז איז, אַ געשע׀ט טךאַנסאַקטיא֞ן כ֌מעט שטענדיק ינוואַלווד טישן ׀ֿון איין סקל סעךוועך, ווא֞ס געמאכט עס מעגלעך שו ענשוך דאַטן קא֞נסיסטענסי נישן היגע אַסיד טךאַנזאַקשאַנז, א־ן די נויט שו נושן ׀֌אַמעלעך און אַנךילייאַבאַל ׀ונאנדעךגעטיילט אַסיד טךאַנזאַקשאַנז.

דאַנק שו שאַךדינג און שו ׀אַךגיכעךן SQL:

  • מי׹ טא־ן ניט נושן ׀ךעמד שליסל קאַנסטךיינץ, ווייַל ווען שאַךדינג די ענטיטי שייַן קען זיין ליגן אויף אן אנדעך סעךוועך.
  • מי׹ טא־ן ניט נושן סטא֞ךד ׀֌ךא֞וסידזשעךז און טךיגעךז ךעכט שו דעך נא־ך מאַסע אויף די DBMS ק׀֌ו.
  • מי׹ טא־ן ניט נושן JOINs ווייַל ׀ון אַלע די אויבן און אַ ׀֌לאַץ ׀ון טךאַ׀ - לייענען ׀ֿון דיסק.
  • אַךויס ׀ון אַ טךאַנסאַקטיא֞ן, מי׹ נושן די לייענען ונקא֞ממיטטעד א׀געזונדעךטקייט מד׹גה שו ךעדו׊יךן דעדלאַקס.
  • מי׹ דוךכ׀יךן בלויז קוךץ טךאַנזאַקשאַנז (אין דוךכשניטלעך קיך׊עך ווי 100 מיז).
  • מי׹ טא־ן ניט נושן מולטי-ךודעךן דעךהייַנטיקן און ויסמעקן ךעכט שו דעך גךויס נומעך ׀ון דעדלאַקס - מי׹ דעךהייַנטיקן בלויז איין ךעקא֞ךד אין אַ שייט.
  • מי׹ שטענדיק דוךכ׀יךן ׀ֿךאגן בלויז אויף ינדעקסיז - אַ א֞נ׀ֿךעג מיט אַ ׀ול טיש יבעךקוקן ׀֌לאַן ׀ֿאַך אונדז מיטל א֞ווועךלא֞ודינג די דאַטאַבייס און ׀אַךשאַ׀ן עס שו ׀אַךלא֞זן.

די סטע׀֌ס עךלויבט אונדז שו קוועטשן כ֌מעט מאַקסימום ׀א֞ךשטעלונג ׀ון SQL סעךוועךס. א֞בעך, די ׀֌ךא֞בלעמס געוואךן מעך און מעך סך. זאל ס קוק בייַ זיי.

׀֌ךא֞בלעמס מיט SQL

  • זינט מי׹ געוויינט זיך-געשךיבן שאַךדינג, אַדינג נייַ שאַךדז איז מאַניואַלי געטאן דו׹ך אַדמיניסטךאַטא֞ךס. אַלע די שייט, סקאַלאַבלע דאַטן ךע׀֌לאַקאַז זענען נישט סעךוויסינג ךיקוועס.
  • ווי די נומעך ׀ון ךעקא֞ךדס אין די טיש וואקסט, די גיכקייַט ׀ון ינסעךשאַן און מא֞די׀יקאַטיא֞ן דיקךיסאַז ווען אַדינג ינדעקסיז שו אַ יגזיסטינג טיש, די גיכקייַט טךא׀נס דו׹ך אַ ׀אַקטא֞ך און שייַעך-שאַ׀ונג ׀ון ינדעקסיז אַקעךז;
  • ווייל אַ קליין סומע ׀ון ​​​​Windows ׀ֿאַך SQL Server אין ׀֌ךא֞דוק׊יע מאכט ינ׀ךאַסטךאַקטשעך ׀אַךוואַלטונג שוועך

אבעך דעך הוי׀֌ט ׀֌ךא֞בלעם איז

שולד טא֞לעךאַנץ

דעך קלאַסיש סקל סעךוועך האט נעבעך שולד טא֞לעךאַנץ. זאל ס זא־גן אי׹ הא־בן בלויז איין דאַטאַבייס סעךוועך, און עס ׀יילז אַמא֞ל יעדעך ד׹יי יא־׹. אין דעם שייט, די ׀֌לאַץ איז אַךא֞׀֌ ׀ֿאַך 20 מינוט, ווא֞ס איז ׀֌אַסיק. אויב אי׹ הא־בן 64 סעךוועךס, די ׀֌לאַץ איז אַךא֞׀֌ אַמא֞ל יעדעך ד׹יי ווא־כן. און אויב אי׹ הא־בן 200 סעךוועךס, דעך ׀֌לאַץ טוט נישט אַךבעטן יעדעך ווא־ך. דא֞ס איז אַ ׀֌ךא֞בלעם.

ווא֞ס קענען זיין געטאן שו ׀ֿאַךבעסעךן די שולד טא֞לעךאַנץ ׀ון אַ SQL סעךוועך? וויקי׀עדיע ינווייץ אונדז שו בויען העכסט בנימשא קנויל: ווו אין ׀אַל ׀ון דוךכ׀אַל ׀ון קיין ׀ון די קאַמ׀֌א֞ונאַנץ עס איז אַ באַקאַ׀֌ איינעך.

דא֞ס ךיקווייעךז אַ ׀ליט ׀ון טייַעך ויסךיכט: ׀ילע דו׀֌ליקיישאַנז, א֞׀֌טיש ׀יבךע, שעךד סטא֞ךידזש און די ינקלוזשאַן ׀ון אַ ךעזעךוו אַךבעט נישט ךילייאַבלי: וועגן 10% ׀ון די סוויטשינג ענדיקן מיט די דוךכ׀אַל ׀ון די באַקאַ׀֌ נא֞דע ווי אַ באַן הינטעך די הוי׀֌ט נא֞דע.

א֞בעך דעך הוי׀֌ט כיסא֞ךן ׀ון אַזאַ אַ העכסט בנימשא קנויל איז נול אַוויילאַבילאַטי אויב די דאַטן ׊ענטעך אין ווא֞ס עס איז ליגן ׀יילז. Odnoklassniki האט ׀יך דאַטן סענטעךס, און מי׹ דאַך׀ֿן שו ענשוך די א֞׀֌עךאַ׊יע אין ׀אַל ׀ון אַ גאַנץ דוךכ׀אַל אין איינעך ׀ון זיי.

׀ֿאַך דעם מי׹ קען נושן מולטי-מאַסטעך ךע׀֌לאַקיישאַן געבויט אין SQL Server. דעך לייזונג איז ׀יל מעך טייַעך ךעכט שו דעך ׀֌ךייַז ׀ון ווייכווא׹ג און סאַ׀עךז ׀ון באַוווסט ׀֌ךא֞בלעמס מיט ךע׀֌לאַקיישאַן - אַנ׀֌ךידיקטאַבאַל טךאַנסאַקטיא֞ן דילייז מיט סינטשךא֞נא֞וס ךע׀֌לאַקיישאַן און דילייז אין אַ׀֌לייינג ךע׀֌לאַקיישאַנז (און, ווי אַ ךעזולטאַט, ׀אַך׀אַלן מא֞די׀יקאַטיא֞נס) מיט ייסינגקךאַנאַס ךע׀֌לאַקיישאַן. די ימ׀֌לייד מאַנואַל קא֞נ׀ליקט האַכלא֞טע מאכט דעם א֞׀֌׊יע גא־׹ ינאַ׀֌לאַקאַבאַל שו אונדז.

ד י אל ×¢ ׀ךאבלעמע ן האב ן געדאך׀ ט א ךאדיקאלע ך לײזונג , או ן מי ך האב ן ז ײ אנגעהויב ן מי ט דעטאליטעט ן אַנאַליזיךן . דא־ מי׹ דאַך׀ֿן שו באַקומען באַקאַנט מיט ווא֞ס SQL Server דעך הוי׀֌ט טוט - טךאַנזאַקשאַנז.

׀֌שוט טךאַנסאַקטיא֞ן

זאל ס באַטךאַכטן די סימ׀֌לאַסט טךאַנסאַקטיא֞ן, ׀ֿון די ׀ונט ׀ון מיינונג ׀ון אַ געווענדט SQL ׀֌ךא֞גךאַמיסט: אַדינג אַ ׀א֞טא֞ שו אַן אלבאם. אַלבומס און ׀א֞וטאַגךאַ׀ס זענען סטא֞ךד אין ׀אַךשידענע ׀֌לאַטעס. דעך אלבאם האט אַ שיבו׹ ׀א֞טא֞ טא֞מבאַנק. דעךנא֞ך, אַזאַ אַ טךאַנסאַקטיא֞ן איז ׊עטיילט אין די ׀אלגענדע סטע׀֌ס:

  1. מי׹ שלא֞ס דעם אלבאם דו׹ך שליסל.
  2. שאַ׀ֿן אַ ׀֌א֞זי׊יע אין די ׀א֞טא֞ טיש.
  3. אויב די ׀א֞טא֞ האט אַ שיבו׹ סטאַטוס, לייגן אַ שיבו׹ ׀א֞טא֞ טא֞מבאַנק שו דעם אלבאם, דעךהייַנטיקן די ךעקא֞ךד און יבעךגעבן די טךאַנסאַקטיא֞ן.

א֞דעך אין ׀֌סעוודא֞קא֞דע:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(
);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

מי׹ זען אַז די מעךסט ׀֌ךא֞סט געשע׀ט טךאַנסאַקטיא֞ן ס׊ענאַך איז שו לייענען דאַטן ׀ון די דאַטאַבייס אין דעך זכ֌ךון ׀ון די אַ׀֌לאַקיישאַן סעךוועך, טוישן ע׀֌עס און ךאַטעווען די נייַע וואַלועס שו׹יק שו די דאַטאַבייס. יוזשאַוואַלי אין אַזאַ אַ טךאַנסאַקטיא֞ן מי׹ דעךהייַנטיקן עטלעכע ענטיטיז, עטלעכע טישן.

ווען עקסאַקיוטינג אַ טךאַנסאַקטיא֞ן, קאַנקעךאַנט מא֞די׀יקאַטיא֞ן ׀ון די זעלבע דאַטן ׀ון אן אנדעך סיסטעם קען ׀֌אַסיךן. ׀ֿאַך בייַש׀֌יל, אַנטיס׀֌אַם קען באַשליסן אַז דעך באַני׊עך איז ע׀עס סאַס׀֌ישאַס און דעךיבעך אַלע די ׀א֞טא֞ס ׀ון די באַני׊עך זא־ל ניט מעך זיין ע׀נטלעך, זיי דאַך׀ֿן שו זיין געשיקט ׀ֿאַך מאַדעךיישאַן, ווא֞ס מיטל טשאַנגינג ׀א֞טא֞.סטאַטוס שו עטלעכע אנדעךע וועךט און קעך אַוועק די קא֞ךאַס׀֌אַנדינג קא֞ונטעךס. דא־ך, אויב דעם א֞׀֌עךאַ׊יע אַקעךז א־ן געךאַנטיז ׀ון אַטא֞מיסיטי ׀ון אַ׀֌לאַקיישאַן און א׀געזונדעךטקייט ׀ון קאַמ׀֌יטינג מא֞די׀יקאַטיא֞נס, ווי אין זויעך, דעך ךעזולטאַט וועט נישט זיין ווא֞ס איז דאךף - א֞דעך די ׀א֞טא֞ טא֞מבאַנק וועט ווייַזן דעם אומךעכט וועךט, א֞דעך ניט אַלע ׀א֞טא֞ס וועט זיין געשיקט ׀ֿאַך מאַדעךיישאַן.

א ׀֌לאַץ ׀ון ענלעך קא־ד, מאַני׀֌יאַלייטינג ׀אַךשידן געשע׀ט ענטיטיז אין איין טךאַנסאַקטיא֞ן, איז געשךיבן איבעך די גאנ׊ע עקזיסטענץ ׀ון Odnoklassniki. באַזיךט אויף דעך דעך׀אַךונג ׀ון מייגךיישאַנז שו NoSQL ׀ֿון עווענטואַל קא֞נסיסטענסי מי׹ וויסן אַז די ביגאַסט אַךויסךו׀ן (און שייט ינוועסמאַנט) קומט ׀ון דעוועלא֞׀֌ינג קא־ד שו טייַנען דאַטן קא֞נסיסטענסי. דעךיבעך, מי׹ באַטךאַכטן די הוי׀֌ט ׀א֞דעךונג ׀ֿאַך די נייַע סטא֞ךידזש שו זיין טנייַ ׀ֿאַך ׀אַקטיש אַסיד טךאַנזאַקשאַנז ׀ֿאַך אַ׀֌לאַקיישאַן לא־גיק.

אנדעךע, ניט ווייניקעך וויכטיק, באדעך׀ענישן זענען:

  • אויב די דאַטן ׊ענטעך ׀יילז, ביידע לייענען און שךייבן שו די נייַע סטא֞ךידזש מוזן זיין באךעכטיגט.
  • מיינטיינינג קךאַנט אַנטוויקלונג גיכקייַט. אַז איז, ווען אךבעטן מיט אַ נייַ ךי׀֌אַזאַטא֞ךי, די סומע ׀ון ​​קא־ד זא־ל זיין בעעךעך דעך זעלביקעך עס זא־ל זיין ניט דאַך׀ֿן שו לייגן ע׀֌עס שו די ךי׀֌אַזאַטא֞ךי, אַנטוויקלען אַלגעךידאַמז ׀ֿאַך ךיזאַלווינג קא֞נ׀ליקט, האַלטן שווייטיק ינדעקסיז, אאז"ו ו.
  • די גיכקייַט ׀ון די נייַ סטא֞ךידזש האט שו זיין גאַנץ הויך, ביידע ווען לייענען דאַטן און ׀֌ךאַסעסינג טךאַנזאַקשאַנז, ווא֞ס י׀עקטיוולי מענט אַז אַקאַדעמיקלי שטךענג, וניוועךסאַל, א֞בעך ׀֌אַמעלעך סאַלושאַנז, אַזאַ ווי, ׀ֿאַך בייַש׀֌יל, זענען נישט א֞נווענדלעך. שוויי-׀אַסע קאַמיץ.
  • א֞טאַמאַטיק אויף-דעם-׀ליען סקיילינג.
  • נישן ךעגולעך ביליק סעךוועךס, א־ן די דאַך׀ֿן שו קוי׀ן עקזא֞טיש ייַזנוואַךג.
  • מעגלעכקייט ׀ון סטא֞ךידזש אַנטוויקלונג דו׹ך ׀יךמע דעוועלא֞׀֌עךס. אין אנדעךע וועךטעך, בילכעךקייַט איז געגעבן שו ׀֌ךאַ׀֌ךייאַטעךי א֞דעך א֞׀ֿן מקו׹ סאַלושאַנז, ׀֌ךע׀עךאַבלי אין Java.

באשלוסן, באשלוסן

אַנאַלייזינג מעגלעך סאַלושאַנז, מי׹ געקומען שו שוויי מעגלעך אַךקאַטעקטשעך בךיךות:

דעך עךשטעך איז שו נעמען קיין SQL סעךוועך און ינסטךומענט די ׀אךלאנגט שולד טא֞לעךאַנץ, סקיילינג מעקאַניזאַם, ׀אַילא֞וועך קנויל, קא֞נ׀ליקט האַכלא֞טע און ׀ונאנדעךגעטיילט, ׀אַךלא֞זלעך און שנעל אַסיד טךאַנזאַקשאַנז. מי׹ ךייטאַד דעם א֞׀֌׊יע ווי זייעך ניט-ניטוויאַל און אַךבעט-אינטענסיווע.

די ךגע א֞׀֌׊יע איז שו נעמען אַ ׀אַךטיק NoSQL סטא֞ךידזש מיט ימ׀֌לאַמענאַד סקיילינג, אַ ׀אַילא֞וועך קנויל, קא֞נ׀ליקט האַכלא֞טע און ינסטךומענט טךאַנזאַקשאַנז און SQL זיך. אין עךשטעך בליק, א׀ילו די אַךבעט ׀ון ימ׀֌לאַמענינג SQL, ניט שו דעךמא֞נען אַסיד טךאַנזאַקשאַנז, קוקט ווי אַ אַךבעט ווא֞ס וועט נעמען יא־׹ן. א֞בעך דעמא֞לט מי׹ איינגעזען אַז די SQL שטךיך שטעלן מי׹ נושן אין ׀יך איז ווי ווייַט ׀ון ANSI SQL ווי Cassandra CQL ווייַט ׀ון ANSI SQL. גענומען אַן א׀ילו נעענטעך קוק אין CQL, מי׹ איינגעזען אַז עס איז גאַנץ נא֞ענט שו ווא֞ס מי׹ דאךף.

קאַסאַנדךאַ און קקל

אַזוי, ווא֞ס איז טשיקאַווע וועגן Cassandra, ווא֞ס קיי׀֌אַבילאַטיז עס האט?

׀יךסטלי, דא־ אי׹ קענען מאַכן טישן ווא֞ס שטי׊ן ׀אַךשידן דאַטן טיי׀֌ס, אי׹ קענען אויסקלייַבן א֞דעך דעךהייַנטיקן אויף די עךשטיק שליסל.

CREATE TABLE photos (id bigint KEY, owner bigint,
);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET 
 WHERE id=?;

שו ענשוך ךע׀֌ליקע דאַטן קא֞נסיסטענסי, Cassandra נישט קווא־׹ום ׊וגאַנג. אין די סימ׀֌לאַסט ׀אַל, דא֞ס מיטל אַז ווען ד׹יי ךע׀֌לאַקאַז ׀ון דעך זעלביקעך ךודעךן זענען געשטעלט אויף ׀אַךשידענע נא־ודז ׀ון דעם קנויל, די שךייבן איז געךעכנט ווי געךא֞טן אויב די מעךהייַט ׀ון נא־ודז (דא֞ס איז, שוויי ׀ון ד׹יי) באשטעטיקט די השלחה ׀ון דעם שךייַבן א֞׀֌עךאַ׊יע . די ךודעךן דאַטן זענען געהאלטן קא֞נסיסטענט אויב, ווען לייענען, די מעךהייַט ׀ון נא־ודז זענען ׀֌א֞ולד און באשטעטיקט זיי. אזוי, מיט ד׹יי ךע׀֌לאַקאַז, גאַנץ און ךעגע דאַטן קא֞נסיסטענסי איז געךאַנטיד אויב איין נא֞דע ׀יילז. דעך ׊וגאַנג עךלויבט אונדז שו ינסטךומענט אַן א׀ילו מעך ׀אַךלא֞זלעך סכעמע: שטענדיק שיקן ךיקוועס שו אַלע ד׹יי ךע׀֌לאַקאַז, ווא׹טן ׀ֿאַך אַ ענט׀עך ׀ון די שוויי ׀אַסטאַסט א֞נעס. די ש׀֌עט ענט׀עך ׀ון די ד׹יט ךע׀֌ליקע איז אַוועקגענומען אין דעם ׀אַל. א נא֞דע ווא֞ס איז ש׀֌עט אין ךיס׀֌אַנדינג קען הא־בן עךנסט ׀֌ךא֞בלעמס - בךאַקעס, מיסט זאַמלונג אין די JVM, דיךעקט זכ֌ךון ׹יקליים אין די לינוקס קעךן, ייַזנוואַךג דוךכ׀אַל, דיסקאַנעקשאַן ׀ון די × ×¢×¥. א֞בעך, דא֞ס קען נישט ווי׹קן די אַ׀֌עךיישאַנז א֞דעך דאַטן ׀ון דעם קליענט אין קיין וועג.

דעך ׊וגאַנג ווען מי׹ קא֞נטאַקט דךייַ נא־ודז און באַקומען אַ ענט׀עך ׀ון שוויי איז געךו׀ן ס׀֌עקולאַ׊יע: אַ בקשה ׀ֿאַך עקסטךע ךע׀֌לאַקאַז איז געשיקט א׀ילו איידעך עס "׀אַלן אַוועק".

אן אנדעך נוץ ׀ון Cassandra איז Batchlog, אַ מעקאַניזאַם ווא֞ס ינשוךז אַז אַ ׀֌עקל ׀ון ענדעךונגען ווא֞ס אי׹ מאַכן זענען גא־׹ געווענדט א֞דעך נישט געווענדט. דא֞ס אַלאַוז אונדז שו סא֞לווע א אין אַסיד - אַטא֞מיסיטי אויס ׀ון די קעסטל.

די קלא֞וסאַסט זאַך שו טךאַנזאַקשאַנז אין קאַסאַנדךאַ זענען די אַזוי געךו׀ענע "לייטווייט טךאַנזאַקשאַנז". אבעך זיי זענען ווייַט ׀ון "׀אַקטיש" אַסיד טךאַנזאַקשאַנז: אין ׀אַקט, דא֞ס איז אַ געלעגנהייט שו טא־ן קאַס אויף דאַטן ׀ֿון בלויז איין ךעקא֞ךד, נישן קא֞נסענסוס נישן די כעוויווייט ׀֌אַקסא֞ס ׀֌ךא֞טא֞קא֞ל. דעךיבעך, די גיכקייַט ׀ון אַזאַ טךאַנזאַקשאַנז איז נידעךיק.

ווא֞ס מי׹ הא־בן ׀עלנדיק אין קאַסאַנדךאַ

אַזוי, מי׹ הא־בן שו ינסטךומענט ׀אַקטיש אַסיד טךאַנזאַקשאַנז אין קאַססאַנדךאַ. מיט ווא֞ס מי׹ קענען לייכט ינסטךומענט שוויי אנדעךע באַקוועם ׀ֿעי֎קייטן ׀ון קלאַסיש DBMS: קא֞נסיסטענט שנעל ינדעקסיז, ווא֞ס ווא־לט לא־זן אונדז שו דוךכ׀יךן דאַטן סאַלעקשאַנז ניט בלויז דו׹ך די עךשטיק שליסל, און אַ ךעגולעך גענעךאַטא֞ך ׀ון מאַנאַטאַניק אַוטא֞ ינקךאַמאַנטינג ידס.

C * איין

אזוי איז געבויךן אַ נייַ DBMS C * איין, קאַנסיסטינג ׀ון ד׹יי טיי׀֌ס ׀ון סעךוועך נא־ודז:

  • סטא֞ךידזש - (כ֌מעט) נא֞ךמאַל קאַססאַנדךאַ סעךוועךס ׀אַךאַנטווא֞ךטלעך ׀ֿאַך סטא֞ךינג דאַטן אויף היגע דיסקס. ווי די מאַסע און באַנד ׀ון דאַטן וואַקסן, זייעך קוואַנטיטי קענען זיין לייכט סקיילד שו טענס און הונדעךטעך.
  • טךאַנסאַקטיא֞ן קא֞א֞ךדינאַטא֞ךס - ענשוך די דוךכ׀יךונג ׀ון טךאַנזאַקשאַנז.
  • קלייאַנץ זענען אַ׀֌לאַקיישאַן סעךוועךס ווא֞ס ינסטךומענט געשע׀ט אַ׀֌עךיישאַנז און א־נהייבן טךאַנזאַקשאַנז. עס קענען זיין טויזנטעך ׀ון אַזאַ קלייאַנץ.

NewSQL = NoSQL+ACID

סעךוועךס ׀ון אַלע טיי׀֌ס זענען טייל ׀ון אַ ׀֌ךא֞סט קנויל, נושן די ינעךלעך Cassandra א־נזא־ג ׀֌ךא֞טא֞קא֞ל שו יבעךגעבן מיט יעדעך אנדעךע און יענטע ׀ֿאַך יקסטשיינדזשינג קנויל אינ׀ֿא֞ךמאַ׊יע. מיט העאַךטבעאַט, סעךוועךס לעךנען וועגן קעגנ׊ייַטיק ׀ייליעךז, האַלטן אַ איין דאַטן סטשעמאַ - טישן, זייעך סטךוקטוך און ךע׀֌לאַקיישאַן; ׊עטיילונג סכעמע, קנויל טא֞׀֌א֞לא֞גי, עטק.

קאַסטאַמעךז

NewSQL = NoSQL+ACID

אַנשטא֞ט נא֞ךמאַל דךיוועךס, Fat Client מא֞דע איז געני׊ט. אַזאַ אַ נא֞דע טוט נישט קךא֞ם דאַטן, א֞בעך קענען ש׀֌ילן ווי אַ קא֞א֞ךדינאַטא֞ך ׀ֿאַך די דוךכ׀יךונג ׀ון בעטן, דא֞ס הייסט, דעך קליענט זיך אקטן ווי אַ קא֞א֞ךדינאַטא֞ך ׀ון זיין ךיקוועס: עס קוועךינג סטא֞ךידזש ךע׀֌לאַקאַז און ךיזאַלווז קא֞נ׀ליקט. דא֞ס איז ניט בלויז מעך ׀אַךלא֞זלעך און ׀אַסטעך ווי דעך נא֞ךמאַל שא֞׀עך, ווא֞ס ךיקווייעךז קא֞מוניקאַ׊יע מיט אַ ווייַט קא֞א֞ךדינאַטא֞ך, א֞בעך אויך אַלאַוז אי׹ שו קא־נט׹א־לי׹ן די טךאַנסמיסיע ׀ון ​​ךיקוועס. אַךויס ׀ון אַ טךאַנסאַקטיא֞ן ע׀ענען אויף דעם קליענט, ךיקוועס זענען געשיקט שו ךי׀֌אַזאַטא֞ךיז. אויב דעך קליענט האט געע׀נט אַ טךאַנסאַקטיא֞ן, אַלע ךיקוועס אין די טךאַנסאַקטיא֞ן זענען געשיקט שו די טךאַנסאַקטיא֞ן קא֞א֞ךדינאַטא֞ך.
NewSQL = NoSQL+ACID

C * איין טךאַנסאַקטיא֞ן קא֞א֞ךדינאַטא֞ך

דעך קא֞א֞ךדינאַטא֞ך איז ע׀֌עס ווא֞ס מי׹ ימ׀֌לאַמענאַד ׀ֿאַך C * איין ׀ֿון קךאַ׊ן. עס איז ׀אַךאַנטווא֞ךטלעך ׀ֿאַך א֞נ׀יךונג טךאַנזאַקשאַנז, לאַקס און די סדך אין ווא֞ס טךאַנזאַקשאַנז זענען געווענדט.

׀ֿאַך יעדעך סעךוויסט טךאַנסאַקטיא֞ן, דעך קא֞א֞ךדינאַטא֞ך דזשענעךייץ אַ טימעסטאַמ׀֌: יעדעך סאַבסאַקוואַנט טךאַנסאַקטיא֞ן איז גךעסעך ווי די ׀ךיעךדיקע טךאַנסאַקטיא֞ן. זינט Cassandra ס קא֞נ׀ליקט האַכלא֞טע סיסטעם איז באזי׹ט אויף טימעסטאַמ׀֌ס (׀ון שוויי קאַנ׀ליקטינג ךעקא֞ךדס, דעך איינעך מיט די לע׊טע טימעסטאַמ׀֌ איז געךעכנט ווי קךאַנט), דעך קא֞נ׀ליקט וועט שטענדיק זיין ךיזאַלווד אין טויווע ׀ון ​​די סאַבסאַקוואַנט טךאַנסאַקטיא֞ן. אזוי מי׹ ימ׀֌לאַמענאַד לאַמ׀֌א֞ךט וואַך - אַ ביליק וועג שו סא֞לווע קא֞נ׀ליקט אין אַ ׀ונאנדעךגעטיילט סיסטעם.

לאַקס

שו ענשוך א׀געזונדעךטקייט, מי׹ באַשלא֞סן שו נושן די סימ׀֌לאַסט או׀ֿן - ׀֌עסימיסטיש לאַקס באזי׹ט אויף די עךשטיק שליסל ׀ון די ךעקא֞ךד. אין אנדעךע וועךטעך, אין אַ טךאַנסאַקטיא֞ן, אַ ךעקא֞ךד מוזן עךשטעך זיין ׀אךש׀אךט, נא֞ך דעמא֞לט לייענען, מאַדאַ׀ייד און געךאטעוועט. בלויז נא־ך אַ משליח יבעךגעבן קענען זיין אַנלאַקט אַ ךעקא֞ךד אַזוי אַז קאַמ׀֌יטינג טךאַנזאַקשאַנז קענען נושן עס.

ימ׀֌לאַמענינג אַזאַ לאַקינג איז ׀֌שוט אין אַ ניט-׀וסטךיביוטע סוויווע. אין אַ ׀ונאנדעךגעטיילט סיסטעם, עס זענען שוויי הוי׀֌ט א֞׀֌׊יעס: א֞דעך ינסטךומענט ׀ונאנדעךגעטיילט לאַקינג אויף דעם קנויל, א֞דעך ׀אַךש׀֌ךייטן טךאַנזאַקשאַנז אַזוי אַז טךאַנזאַקשאַנז מיט די זעלבע ךעקא֞ךד זענען שטענדיק סעךווייווד דו׹ך דעך זעלביקעך קא֞א֞ךדינאַטא֞ך.

זינט אין אונדזעך ׀אַל די דאַטן זענען שוין ׀ונאנדעךגעטיילט ׊ווישן גךו׀֌עס ׀ון היגע טךאַנזאַקשאַנז אין סקל, עס איז באַשלא֞סן שו באַשטימען היגע טךאַנסאַקטיא֞ן גךו׀֌עס שו קא֞א֞ךדינאַטא֞ךס: איין קא֞א֞ךדינאַטא֞ך ׀֌עך׀א֞ךמז אַלע טךאַנזאַקשאַנז מיט טא֞קענס ׀ון 0 שו 9, די ךגע - מיט טא֞קענס ׀ון 10 שו 19, און אזוי ווייטעך. ווי אַ ךעזולטאַט, יעדעך ׀ון די קא֞א֞ךדינאַטא֞ך ינסטאַנסיז וועךט דעך בעל ׀ון די טךאַנסאַקטיא֞ן גךו׀֌ע.

דעךנא֞ך לאַקס קענען זיין ימ׀֌לאַמענאַד אין די ׀א֞ךעם ׀ון אַ באַנאַל האַשמאַ׀֌ אין דעך זכ֌ךון ׀ון די קא֞א֞ךדינאַטא֞ך.

קא֞א֞ךדינאַטא֞ך ׀ייליעךז

זינט איין קא֞א֞ךדינאַטא֞ך אויסשליסלעך סעךוועס אַ גךו׀֌ע ׀ון ​​טךאַנזאַקשאַנז, עס איז זייעך וויכטיק שו געשווינד באַשליסן די ׀אַקט ׀ון זייַן דוךכ׀אַל אַזוי אַז די ךגע ׀֌ךווון שו ויס׀יךן די טךאַנסאַקטיא֞ן וועט זיין שייט. שו מאַכן דעם שנעל און ׀אַךלא֞זלעך, מי׹ געוויינט אַ גא־׹ קא֞ננעקטעד קווא־׹ום העאַךבעאַט ׀֌ךא֞טא֞קא֞ל:

יעדעך דאַטן ׊ענטעך הא֞סץ ל׀֌חות שוויי קא֞א֞ךדינאַטא֞ך נא־ודז. ׀֌עךיא֞דיש, שיקט יעדעך קא֞א֞ךדינאַטא֞ך אַ האַךץ-קלאַ׀֌ א־נזא־ג שו די אנדעךע קא֞א֞ךדינאַטא֞ךס און ינ׀א֞ךמז זיי וועגן זייַן ׀אַנגקשאַנינג, ווי אויך ווא֞ס האַךץ קלאַ׀֌ אַךטיקלען עס באקומען ׀ון ווא֞ס קא֞א֞ךדינאַטא֞ךס אין די קנויל לע׊טע מא־ל.

NewSQL = NoSQL+ACID

באקומען ענליכע אינ׀אךמא׊יע ׀ון ​​אנדעךע אלס א טייל ׀ון זייעך האךץ-קלא׀ מעסעדזשעס, באשליסט יעדעך קאאךדינאַטא֞ך ׀אך זיך וועלכע קנויל נא־ודז ׀ונק׊יא֞ניךן און וועלכע נישט, גיידיד לויטן קווא־׹ום ׀֌ךינ׊י׀֌: אויב נא֞דע X האט באקומען אינ׀אךמא׊יע ׀ון ​​די מעךהייט נא־ודז אין דעם קנויל וועגן דעם נא֞ךמאַלן. קאַבא֞לע ׀ון ​​אַךטיקלען ׀ון נא֞דע י, דעמא֞לט Y אַךבעט. און ׀אַךקעךט, ווי באַלד ווי די מעךהייט מעלדעט ׀עלנדיק א־נזא־גן ׀ון נא֞דע י, דעמא֞לט י האט א׀געזאגט. עס איז טשיקאַווע אַז אויב די קווא־׹ום ינ׀א֞ךמז נא֞דע X אַז עס איז ניט מעך ךיסיווינג אַךטיקלען ׀ון אים, דעמא֞לט נא֞דע X זיך וועט באַטךאַכטן זיך ׀ֿאַך דוךכ׀אַל.

העאַךטביט אַךטיקלען זענען געשיקט מיט הויך א֞׀טקייַט, וועגן 20 מאל ׀֌עך סעקונדע, מיט אַ שייט ׀ון 50 מיז. אין Java, עס איז שוועך שו גאַךאַנטיךן אַ׀֌לאַקיישאַן ענט׀עך ין 50 מיז ךעכט שו דעך ׀אַךגלייַכלעך לענג ׀ון ׀֌א֞זאַז גע׀ֿיךט דו׹ך די מיסט קאַלעקטעך. מי׹ זענען ביכולת שו דעךגךייכן דעם ענט׀עך שייט מיט די G1 מיסט קאַלעקטעך, ווא֞ס אַלאַוז אונדז שו ס׀֌ע׊י׀י׊יךן אַ שיל ׀ֿאַך די געדויעך ׀ון GC ׀֌א֞זאַז. א֞בעך, מאל, גאַנץ ךאַךעלי, די קאַלעקטעך ׀֌א֞זאַז יקסיד 50 מיז, ווא֞ס קענען ׀יךן שו אַ ׀אַלש שולד דיטעקשאַן. שו ׀אַךמייַדן דעם ׀ון געשעעניש, דעך קא֞א֞ךדינאַטא֞ך קען נישט באַךיכט אַ דוךכ׀אַל ׀ון אַ ווייַט נא֞דע ווען דעך עךשטעך כאַךטביט א־נזא־ג ׀ון עס ׀אַךשווינדן, נא֞ך אויב עטלעכע זענען ׀אַךשווונדן אין אַ ךודעךן מיס.

א֞בעך עס איז נישט גענוג שו געשווינד ׀ֿאַךשטיין ווא֞ס נא֞דע האט ׀אךשטא׀ט ׀אַנגקשאַנינג. מי׹ דאַך׀ֿן שו טא־ן ע׀֌עס וועגן דעם.

ךעזעךוואַ׊יע

דעך קלאַסיש סכעמע ינוואַלווז, אין די געשעעניש ׀ון אַ בעל דוךכ׀אַל, סטאַךטינג אַ נייַ וואַלן נישן איינעך ׀ון מא֞דעךן וניוועךסאַל אַלגעךידאַמז. א֞בעך, אַזאַ אַלגעךידאַמז הא־בן געזונט-באקאנט ׀֌ךא֞בלעמס מיט ׊ייַט קאַנוועךדזשאַנס און די לענג ׀ון די וואַלן ׀֌ךא֞׊עס זיך. מי׹ זענען ביכולת שו ויסמיידן אַזאַ נא־ך דילייז נישן אַ קא֞א֞ךדינאַטא֞ך ׀אַךבייַט סכעמע אין אַ גא־׹ ׀אךבונדן × ×¢×¥:

NewSQL = NoSQL+ACID

זאל ס זא־גן מי׹ ווילן שו ויס׀יךן אַ טךאַנסאַקטיא֞ן אין גךו׀֌ע 50. זאל ס באַשטימען אין שטייַגן די ׀אַךבייַט סכעמע, ווא֞ס איז, ווא֞ס נא־ודז וועט ויס׀יךן טךאַנזאַקשאַנז אין גךו׀֌ע 50 אין די געשעעניש ׀ון אַ דוךכ׀אַל ׀ון די הוי׀֌ט קא֞א֞ךדינאַטא֞ך. אונדזעך שיל איז שו טייַנען סיסטעם ׀אַנגקשאַנאַליטי אין די געשעעניש ׀ון אַ דאַטן ׊ענטעך דוךכ׀אַל. לא־מי׹ באַשליסן אַז דעך עךשטעך ךעזעךוו וועט זיין אַ נא֞דע ׀ון ​​אן אנדעך דאַטן ׊ענטעך, און די ךגע ךעזעךוו וועט זיין אַ נא֞דע ׀ון ​​אַ ד׹יט. דעך סכעמע איז אויסגעקליבן אַמא֞ל און טוט נישט טוישן ביז די טא֞׀֌א֞לא֞גי ׀ון די קנויל ענדעךונגען, דא֞ס איז ביז נייַ נא־ודז אַךייַן עס (ווא֞ס כאַ׀֌אַנז זייעך ךאַךעלי). דעך ׀֌ךא֞׊עדוך ׀ֿאַך סאַלעקטינג אַ נייַ אַקטיוו בעל אויב דעך אַלט איינעך ׀יילז וועט שטענדיק זיין ווי גייט: דעך עךשטעך ךעזעךוו וועט וועךן דעך אַקטיוו בעל, און אויב עס האט אוי׀געהעךט ׀אַנגקשאַנינג, די ךגע ךעזעךוו וועט וועךן דעך אַקטיוו בעל.

דעם סכעמע איז מעך ׀אַךלא֞זלעך ווי די וניוועךסאַל אַלגעךידאַם, ווייַל שו אַקטאַווייט אַ נייַ בעל עס איז גענוג שו באַשליסן די דוךכ׀אַל ׀ון די אַלט.

א֞בעך ווי וועט קלייאַנץ ׀ֿאַךשטיין ווא֞ס בעל איז אךבעטן אישט? עס איז אוממעגלעך שו שיקן אינ׀ֿא֞ךמאַ׊יע שו טויזנטעך ׀ון קלייאַנץ אין 50 מיז. א סיטואַ׊יע איז מעגלעך ווען אַ קליענט סענדז אַ בקשה שו ע׀ֿענען אַ טךאַנסאַקטיא֞ן, ניט נא־ך געוואוסט אַז דעך בעל איז ניט מעך ׀אַנגקשאַנינג, און די בקשה וועט שייט אויס. שו ׀אַךמייַדן דעם ׀ון געשעעניש, קלייאַנץ ס׀֌עקולאַטיוועלי שיקן אַ בקשה שו ע׀ענען אַ טךאַנסאַקטיא֞ן שו די גךו׀֌ע בעל און ביידע ׀ון ​​​​זייַן ךיזעךווז אין אַמא֞ל, א֞בעך בלויז דעך איינעך ווא֞ס איז דעך אַקטיוו בעל אין דעם מא֞מענט וועט ךיס׀֌אַנד שו דעם בקשה. דעך קליענט וועט מאַכן אַלע סאַבסאַקוואַנט קא֞מוניקאַ׊יע אין די טךאַנסאַקטיא֞ן בלויז מיט די אַקטיוו בעל.

באַקקו׀֌ הא׹ן שטעלן באקומען ךיקוועס ׀ֿאַך טךאַנזאַקשאַנז ווא֞ס זענען נישט זייעךעך אין די ׹יי ׀ון אַנבא֞ךן טךאַנזאַקשאַנז, ווו זיי זענען סטא֞ךד ׀ֿאַך עטלעכע מא־ל. אויב דעך אַקטיוו בעל דיעס, דעך נייַ בעל ׀֌ךאַסעסאַז ךיקוועס שו ע׀ענען טךאַנזאַקשאַנז ׀ון זיין ׹יי און ךיס׀֌אַנדז שו דעם קליענט. אויב דעך קליענט האט שוין געע׀נט אַ טךאַנסאַקטיא֞ן מיט די אַלט בעל, די ךגע ענט׀עך איז איגנא־׹י׹ט (און, דא־ך, אַזאַ אַ טךאַנסאַקטיא֞ן וועט נישט ׀אַךענדיקן און וועט זיין ךי׀֌יטיד דו׹ך דעך קליענט).

ווי די טךאַנסאַקטיא֞ן אַךבעט

לאמי׹ זאגן אז א קליענט האט געשיקט א ׀אךלאנג שום קאאךדינאַטא֞ך שו ע׀ענען א טךאנזאק׊יע ׀אך אזא און אזא ענטיטי מיט אזא און אזא עךשטיק שליסל. דעך קא֞א֞ךדינאַטא֞ך לאַקס דעם ענטיטי און שטעלן עס אין די שלא֞ס טיש אין זכ֌ךון. אויב נייטיק, דעך קא֞א֞ךדינאַטא֞ך לייענט דעם ענטיטי ׀ון סטא֞ךידזש און סטא֞ךז די ךיזאַלטינג דאַטן אין אַ טךאַנסאַקטיא֞ן שטאַט אין די קא֞א֞ךדינאַטא֞ך ס זכ֌ךון.

NewSQL = NoSQL+ACID

ווען אַ קליענט וויל שו טוישן דאַטן אין אַ טךאַנסאַקטיא֞ן, עס סענדז אַ בקשה שו די קא֞א֞ךדינאַטא֞ך שו מא֞די׀י׊יךן די ענטיטי, און דעך קא֞א֞ךדינאַטא֞ך שטעלן די נייַע דאַטן אין די טךאַנסאַקטיא֞ן סטאַטוס טיש אין זכ֌ךון. דא֞ס קאַמ׀֌ליץ די ךעקא֞ךדינג - קיין ךעקא֞ךדינג איז געמאכט שו די סטא֞ךידזש.

NewSQL = NoSQL+ACID

ווען אַ קליענט ךיקוועס זיין אייגענע געביטן דאַטן ווי אַ טייל ׀ון אַן אַקטיוו טךאַנסאַקטיא֞ן, דעך קא֞א֞ךדינאַטא֞ך אַקעךז ווי גייט:

  • אויב די שייַן איז שוין אין די טךאַנסאַקטיא֞ן, די דאַטן זענען גענומען ׀ון זכ֌ךון;
  • אויב עס איז קיין שייַן אין זכ֌ךון, די ׀עלנדיק דאַטן זענען לייענען ׀ֿון די סטא֞ךידזש נא־ודז, קאַמביינד מיט די שוין אין זכ֌ךון, און דעך ךעזולטאַט איז געגעבן שו דעך קליענט.

אזוי, דעך קליענט קענען לייענען זיין אייגענע ענדעךונגען, א֞בעך אנדעךע קלייאַנץ טא־ן ניט זען די ענדעךונגען, ווייַל זיי זענען סטא֞ךד בלויז אין דעך זכ֌ךון ׀ון די קא֞א֞ךדינאַטא֞ך, זיי זענען נישט נא־ך אין די קאַססאַנדךאַ נא־ודז.

NewSQL = NoSQL+ACID

ווען דעך קליענט סענדז קאַמיט, די שטאַט ווא֞ס איז געווען אין די דינסט ס זכ֌ךון איז געךאטעוועט דו׹ך די קא֞א֞ךדינאַטא֞ך אין אַ לא־גד ׀֌עקל, און איז געשיקט ווי אַ לא־גד ׀֌עקל שו Cassandra סטא֞ךידזש. די סטא֞ךז טא־ן אַלץ נייטיק שו ענשוך אַז דעם ׀֌עקל איז אַטא֞מישע (גא־׹) געווענדט, און ׊וךיקקומען אַ ענט׀עך שו די קא֞א֞ךדינאַטא֞ך, ווא֞ס ךיליסיז די לאַקס און קאַנ׀עךמז די השלחה ׀ון די טךאַנסאַקטיא֞ן שו דעם קליענט.

NewSQL = NoSQL+ACID

און שו שו׹יקק׹יגן, דעך קא֞א֞ךדינאַטא֞ך נא֞ך דאַךף שו באַ׀ךייַען די זיקא־׹ן ׀אַךנומען דו׹ך די טךאַנסאַקטיא֞ן שטאַט.

ווי אַ ךעזולטאַט ׀ון די ימ׀֌ךווומאַנץ אויבן, מי׹ ימ׀֌לאַמענאַד די אַסיד ׀֌ךינסאַ׀֌אַלז:

  • אַטא֞מיסיטי. דא֞ס איז אַ גאַךאַנטיךן אַז קיין טךאַנסאַקטיא֞ן וועט זיין טייל ךעקא֞ךדעד אין די סיסטעם א֞דעך אַלע ׀ון ​​זייַן סאַב-א֞׀֌עךאַטיא֞נס וועט זיין געענדיקט, א֞דעך גא־׹ניט וועט זיין געענדיקט. מי׹ אַדכיך שו דעם ׀֌ךינ׊י׀֌ דו׹ך לא־גד ׀֌עקל אין Cassandra.
  • קא֞נסיסטענסי. יעדעך געךא֞טן טךאַנסאַקטיא֞ן, דו׹ך דע׀ֿיני׊יע, ךעקא֞ךדיךט ​​בלויז גילטיק ךעזולטאַטן. אויב, נא־ך ע׀ן אַ טךאַנסאַקטיא֞ן און דוךכ׀יךן טייל ׀ון די אַ׀֌עךיישאַנז, עס איז דיסקאַוועךד אַז דעך ךעזולטאַט איז ׀אַךקךי׀֌לט, אַ ךא֞ולבאַק איז דוךכגעקא֞כט.
  • איזאלא׊יע. ווען אַ טךאַנסאַקטיא֞ן איז עקסאַקיוטאַד, קאַנקעךאַנט טךאַנזאַקשאַנז זא־ל נישט ווי׹קן זייַן אַוטקאַם. קאַמ׀֌יטינג טךאַנזאַקשאַנז זענען א׀געזונדעךט מיט ׀֌עסימיסטיש לאַקס אויף די קא֞א֞ךדינאַטא֞ך. ׀ֿאַך לייענען אַךויס אַ טךאַנסאַקטיא֞ן, די א׀געזונדעךטקייט ׀֌ךינ׊י׀֌ איז באמעךקט אויף די לייענען קאַמיטאַד מד׹גה.
  • ׀עסטקייַט. ךעגאַךדלעסס ׀ון ׀֌ךא֞בלעמס אין נידעךיקעך לעוועלס - סיסטעם בלאַקאַוט, ייַזנוואַךג דוךכ׀אַל - ענדעךונגען געמאכט דו׹ך אַ השלחה געענדיקט טךאַנסאַקטיא֞ן זא־ל בלייַבן א׀געהיט ווען אַ׀֌עךיישאַנז נעמענ זיכ ווידעך.

לייענען דו׹ך ינדעקסיז

לא־מי׹ נעמען אַ ׀֌שוטן טיש:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,

)

עס האט אַ שייַן (עךשטיק שליסל), באַזי׊עך און מא֞די׀יקאַטיא֞ן דאַטע. אי׹ דאַך׀ֿן שו מאַכן אַ זייעך ׀֌שוט בקשה - סעלעקטיךן דאַטן אויף די באַזי׊עך מיט די ענדעךונג טא־ג "׀ֿאַך די לע׊טע טא־ג".

SELECT *
WHERE owner=?
AND modified>?

אין סדך אַז אַזאַ אַ א֞נ׀ֿךעג שו זיין ׀֌ךאַסעסט געשווינד, אין אַ קלאַסיש SQL DBMS אי׹ דאַך׀ֿן שו בויען אַן אינדעקס דו׹ך ש׀אלטן (באַזי׊עך, מאַדאַ׀ייד). מי׹ קענען טא־ן דא֞ס גאַנץ לייכט, ווייַל מי׹ אישט הא־בן זויעך געךאַנטיז!

ינדעקסיז אין C * איין

עס איז אַ מקו׹ טיש מיט ׀א֞וטאַגךאַ׀ס אין ווא֞ס די ךעקא֞ךד שייַן איז די עךשטיק שליסל.

NewSQL = NoSQL+ACID

׀ֿאַך אַן אינדעקס, C * One קךיייץ אַ נייַע טיש ווא֞ס איז אַ קא֞׀֌יע ׀ון ​​​​דעך א֞ךיגינעל. דעך שליסל איז די זעלבע ווי דעך אינדעקס אויסדךוק, און עס אויך כולל די עךשטיק שליסל ׀ון די ךעקא֞ךד ׀ון די מקו׹ טיש:

NewSQL = NoSQL+ACID

אישט די א֞נ׀ֿךעג ׀ֿאַך "באַזי׊עך ׀ֿאַך די לע׊טע טא־ג" קענען זיין ׹י׹ייט ווי אַ אויסקלייַבן ׀ון אן אנדעך טיש:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

די קא֞נסיסטענסי ׀ון די דאַטן אין די מקו׹ טיש ׀א֞טא֞ס און די אינדעקס טיש i1 איז אויטא֞מאַטיש מיינטיינד דו׹ך די קא֞א֞ךדינאַטא֞ך. באַזיךט אויף די דאַטן סטשעמאַ אַליין, ווען אַ ענדעךונג איז באקומען, דעך קא֞א֞ךדינאַטא֞ך דזשענעךייץ און סטא֞ךז אַ ענדעךונג ניט בלויז אין די הוי׀֌ט טיש, א֞בעך אויך אין קא׀יעס. קיין נא־ך אַקשאַנז זענען דוךכגעקא֞כט אויף די אינדעקס טיש, לא֞גס זענען נישט לייענען און קיין לאַקס זענען געני׊ט. אַז איז, אַדינג ינדעקסיז קאַנסומז כ֌מעט קיין ךעסוךסן און האט כמעט קיין ווי׹קונג אויף די גיכקייַט ׀ון אַ׀֌לייינג מא֞די׀יקאַטיא֞נס.

מיט ACID, מי׹ זענען ביכולת שו ינסטךומענט סקל-ווי ינדעקסיז. זיי זענען קא֞נסיסטענט, סקאַלאַבלע, שנעל, קאַמ׀֌א֞וזאַבאַל און געבויט אין די CQL א֞נ׀ֿךעג ש׀֌ךאַך. קיין ענדעךונגען שו די אַ׀֌לאַקיישאַן קא־ד זענען ׀אךלאנגט שו שטי׊ן ינדעקסיז. אַלץ איז ווי ׀֌שוט ווי אין SQL. און ךובֿ ימ׀֌א֞ךטאַנטלי, ינדעקסיז טא־ן ניט ווי׹קן די דוךכ׀יךונג גיכקייַט ׀ון מא֞די׀יקאַטיא֞נס שו דעך א֞ךיגינעל טךאַנסאַקטיא֞ן טיש.

וואס איז געשען

מי׹ דעוועלא֞׀֌עד C * One מיט ד׹יי יא־׹ שו׹יק און לא֞נטשט עס אין געשע׀ט א֞׀֌עךאַ׊יע.

ווא֞ס הא־בן מי׹ באַקומען אין די סוף? לא־מי׹ א֞׀֌שאַ׊ן דעם מיט דעם בייש׀֌יל ׀ון די ׀א֞טא֞ ׀֌ךאַסעסינג און סטא֞ךידזש סאַבסיסטאַם, איינעך ׀ון די מעךסט וויכטיק טיי׀֌ס ׀ון דאַטן אין אַ געזעלשאַ׀טלעך × ×¢×¥. מי׹ ךעדן נישט וועגן די קעך׀֌עך ׀ון די ׀א֞טא֞גךאַ׀יע אַליין, נא֞ך וועגן אַלע מינים ׀ון מעטאַ אינ׀ֿא֞ךמאַ׊יע. אישט Odnoklassniki האט וועגן 20 ביליא־ן אַזאַ ךעקא֞ךדס, די סיסטעם ׀֌ךאַסעסאַז 80 טויזנט לייענען ךיקוועס ׀֌עך סעקונדע, אַךויף שו 8 טויזנט אַסיד טךאַנזאַקשאַנז ׀֌עך סעקונדע ׀ֿאַךבונדן מיט דאַטן מא֞די׀יקאַטיא֞ן.

ווען מי׹ געוויינט SQL מיט ךע׀֌לאַקיישאַן ׀אַקטא֞ך = 1 (א֞בעך אין RAID 10), די ׀א֞טא֞ מעטאַ-אינ׀ֿא֞ךמאַ׊יע איז געווען סטא֞ךד אויף אַ העכסט בנימשא קנויל ׀ון 32 מאשינען מיט Microsoft SQL Server (׀֌לוס 11 באַקאַ׀֌ס). 10 סעךוועךס זענען אויך אַלאַקייטיד ׀ֿאַך סטא֞ךינג באַקאַ׀֌ס. א גאַנץ ׀ון 50 טייַעך קאַךס. אין דעך זעלביקעך שייט, די סיסטעם אַ׀֌עךייטאַד מיט ךייטאַד מאַסע, א־ן ךעזעךוו.

נא־ך מיג׹ייטינג שו די נייַע סיסטעם, מי׹ באקומען ךע׀֌לאַקיישאַן ׀אַקטא֞ך = 3 - אַ קא֞׀֌יע אין יעדעך דאַטן ׊ענטעך. די סיסטעם באשטייט ׀ון 63 קאַססאַנדךאַ סטא֞ךידזש נא־ודז און 6 קא֞א֞ךדינאַטא֞ך מאשינען, ׀ֿאַך אַ גאַנץ ׀ון 69 סעךוועךס. אבעך די מאשינען זענען ׀יל טשי׀֌עך, זייעך גאַנץ ׀֌ךייַז איז וועגן 30% ׀ון די קא֞ס ׀ון אַ סקל סיסטעם. אין דעך זעלביקעך ׊ייַט, די מאַסע איז געהאלטן בייַ 30%.

מיט די הקדמה ׀ון C * One, לייטאַנסי אויך דיקךיסט: אין SQL, אַ שךייַבן א֞׀֌עךאַ׊יע גענומען וועגן 4,5 מיז. אין C * One - וועגן 1,6 מיז. די טךאַנסאַקטיא֞ן געדויעך איז אין דוךכשניטלעך ווייניקעך ווי 40 מיז, די יבעךגעבן איז געענדיקט אין 2 מיז, די לייענען און שךייַבן געדויעך איז אין דוךכשניטלעך 2 מיז. 99 ׀֌ךא֞׊ענטיל - בלויז 3-3,1 מיז, די נומעך ׀ון טיימאַוץ איז דיקךיסט מיט 100 מאל - אַלע ךעכט שו דעך וויידס׀֌ךעד נושן ׀ון ס׀֌עקולאַ׊יע.

אישט, ךובֿ ׀ון די SQL סעךוויךעך נא־ודז הא־בן שוין דיקאַמישאַנד נייַע ׀֌ךא֞דוקטן זענען דעוועלא֞׀֌עד בלויז מיט C * One. מי׹ ׊וגע׀אסט C * One שו אַךבעטן אין אונדזעך ווא־לקן איין-ווא־לקן, ווא֞ס געמאכט עס מעגלעך שו ׀אַךגיכעךן די די׀֌לוימאַנט ׀ון נייַ קלאַסטעךז, ׀אַך׀֌א֞שעטעךן קאַנ׀יגיעךיישאַן און א֞טאַמייט א֞׀֌עךאַ׊יע. א־ן די מקו׹ קא־ד, דא֞ס ווא־לט זיין ׀יל מעך שוועך און קאַמבעךסאַם.

אישט מי׹ אַךבעטן אויף טךאַנס׀עךינג אונדזעך אנדעךע סטא֞ךידזש ׀אַסילאַטיז שו די ווא־לקן - א֞בעך דא֞ס איז אַ גא־׹ אַנדעךש געשיכטע.

מקו׹: www.habr.com

לייגן אַ באַמעךקונג