Lazımi insanlar üçün bir verilənlər bazasında büzüşmə və bölünmə arasındakı fərq nədir?


cavab 1:

Yalnız NoSQL verilənlər bazası ilə əlaqəli şardinq haqqında danışmaq üçün heç bir səbəb yoxdur. Bildiyimə görə, NoSQL hərəkəti performans, ölçeklenebilirlik və yüksək mövcudluğa görə idarə olunur. Buna görə, üfüqi genişlənməni dəstəkləyən NoSQL məlumat bazalarının əksəriyyətində bu dizayn üsulları bu və ya digər şəkildə olduqca yaygındır - çoxlu maşınlara (qovşaqlara) miqyas vermək.

Bəli, məlumatları birdən çox kompüter arasında yaymaq relyativ verilənlər bazası üçün çox yayılmışdır və ya heç olmasa bir başlanğıc deyil. Cavabın sonunda bir nümunə verdim.

Bölüşmə və sarsıdıcılıq kimi terminlərlə fərqli ədəbiyyatda gizli məna və istifadənin üst-üstə düşdüyünü görürəm. Məsələn, DynamoDB-dəki SOSP kağızı açıq şəkildə qeyd edir:

"Məlumat bölümdən istifadə edərək bir çox server arasında yayılır və mövcudluğu təmin etmək üçün hər bölmə təkrarlanmağa davam edir. Dağıtma texnikası (bölmə də deyilir) ardıcıl hashingdır. "

MongoDB onlayn təlimatını görsəniz:

"Sharding məlumatları birdən çox serverlər arasında yayma üsuludur. Sarsıntı ilə üfüqi genişlənməyə nail oluruq. "

Mən iki fərqli verilənlər bazasında ədəbiyyatdan gələn bu iki ifadənin gizli mənasında heç bir fərq görmürəm. Hər ikisi də məlumatları birdən çox kompüter arasında yaymağa və genişlənə bilən verilənlər bazası memarlığını qurmağa çalışırlar.

Ölçəkləmə səbəbləri eynidır: məlumat dəsti ətrafında artım, istifadəçi tələbləri (server yükü), məhdud CPU emal gücü, yaddaş tələbləri, DRAM gücü, tək bir kompüterdə I / O bant genişliyi, tək bir nöqtə nöqtəsi və daha çox arızaya dözümlülük və s.

Buna görə də, bu iki verilənlər bazası (və bir çox digər NoSQL verilənlər bazası) məlumatları bir çoxluq yerləşdirilməsində müxtəlif kompüterlər arasında yaydı. Dağıtma strategiyasından danışmağın mənası yoxdur.

Anlamaq üçün əsas şey budur. İndi söz bölümündən istifadə edək.

Məndə bir sıra məlumat elementləri (qeydlər) var. Hər yazının bir açarı var. Bu açarı bu qeydləri bir neçə fərqli bölməyə bölmək (yaymaq) üçün istifadə edə bilərəm. Oracle RDBMS haqqında danışdığımız zaman bir müddətdir masa bölümü olmuşdur. Bölmə açarı bir cədvəldəki qeydləri iki və ya daha çox hissəyə bölür. Bu arakəsmələr hələ də eyni DB instansiyası tərəfindən idarə olunur: eyni CPU, eyni yaddaş, eyni I / O və eyni yaddaş qaynaqlarını digər həmfikir bölmələri ilə, eyni zamanda digər bölüşdürülməmiş masalarla bölüşürlər.

Bir sorğu gəldikdə, əvvəlcə sorğu məlumatlarının hansı hissədə saxlandığını müəyyənləşdiririk. Müvafiq bölmənin məlumatları sonra sorğunun nəticələrini qaytarmaq üçün işlənir. Digər arakəsmələrə toxunmaq lazım deyil.

Oracle, hash, sıra və siyahı əsaslı bölməni dəstəkləyir. Bu və bir çox digər paylama sxemlərinin məqsədi sadədir: aid olduğu hədəf bölməsini müəyyən etmək üçün qeyd üçün açardan istifadə edin.

İndi sınmış şüşədən danışaq. Qeyd edək ki, Oracle kontekstində müzakirə olunan bölmə anlayışında eyni DB instansiyasının (beləliklə eyni fiziki maşın) nəzarəti altında bütün bölümlər var.

Fərqli fiziki maşınlar / qovşaqlar arasında bölünməyə şardinq deyilir. İndi hər bölmə tamamilə fərqli bir fiziki maşındadır və buna görə fərqli bir sxemdə və ayrı bir verilənlər bazası nümunəsinin nəzarəti altındadır. Bu MongoDB-də edilir. Məlumatların birdən çox kompüter arasında yayılması yanaşmaları hash və üçündür.

Eynilə, bu, paylama texnikasının ardıcıl hashing olduğu DynamoDB və Cassandra'da edilir.

Sarsıdıcı və bölünmə arasındakı bu fərq məqbuldur -

"Şardinq - bir neçə fərqli kompüterdə məlumatların paylanması və ya bölünməsi, bölmə isə eyni kompüterdə məlumatların paylanmasıdır."

Şəxsən mən bu fərqlə getmək istərdim, baxmayaraq ki, heç bir şey qırıqlığın müxtəlif maşınlara yayıldığını söyləmir.

Hər ikisi bir paylama açarı ilə işləməlidir. İndi onu "Shard Key" və ya "Partition Key" adlandıra bilərik. Həqiqətən heç bir əhəmiyyəti yoxdur. Əslində, MongoDB sənədləri həm "bölmə", həm də "şardinq" terminlərindən istifadə edir. DynamoDB və Cassandra yalnız "bölmə" termini istifadə edirlər.

Cavabın əvvəlində dediyim nümunəyə qayıdaq. Oracle RAC Oracle DB niyyətlərinin çoxluq yerləşdirilməsidir. Hər bir nümunə ayrı bir node üzərində çalışır və buna görə ayrı CPU və yaddaş qaynaqları var. Yaddaş / sabit disk paylaşılır - sabit disk arxitekturası.

Oracle RAC-da məlumatları bir çox hallarda yaya bilərik. Bir cədvəl T, bir RAC mühitində saxlanıldıqda, RAC qovşaqlarının üzərindən yuyula bilər (bölmə açarının hash istifadə edərək). Hash dəyəri açarın (və onun qeydinin) hansı düyünə getdiyini müəyyənləşdirir. Sharding anlayışına görə, RAC-da edə biləcəyimiz şey sharding ilə əlaqədardır, amma biz onu bölmə adlandırırıq. Başqa bir üst-üstə düşmə.

Bir əsas fərq var. RAC ortaq bir şey memarlıq deyil. Bu ümumi bir memarlıq deyil. Birləşdirilmiş disk arxitekturasıdır, buna görə məlumatların fərqli fiziki qovşaqlara yayıldığına baxmayaraq, şardinqin ən uyğun termin olmadığını düşünürəm.

Buna görə büzülmə, bölüşdürülən məlumatlarımızı müxtəlif düyünlər və düyünlər arasında heç bir qaynaq paylaşmadığımız ortaq bir şey memarlığı ilə əlaqələndirilir. Anlamaq üçün əsas fərq budur.


cavab 2:

Birincisi, sualınızın ikinci hissəsi: Bunu da gördüm.

Netezza mütləq paylaşılır - NoSQL / NewSQL platformaları kimi heç nə:

http: //www.idt.mdh.se/kurser/ct3 ...

Ancaq niyə bir kölgə adlandırılmadığını bilmirəm. Bəlkə sadəcə NoSQL bir şeydir. Redshift üçün belə bir arayış tapsam da:

Amazon Redshift və Shard Query xüsusiyyətlərini və performansını müqayisə edin

İndi sualınızın birinci hissəsi üçün:

Sarsıdıcı məlumatların standart (ucuz) kompüterlərə paylandığı bir arxitektura aiddir: paylanmış, paylanmayan bir memarlıq, bütün qovşaqlar verilən bir sorğuya cavab verir, lakin müstəqil işləyir və tamamlandıqda bir təşəbbüskara və ya master node-a hesabat verir. Düyünlər nə yaddaş, nə də saxlama sahəsi bölüşmür. Ucuz olduğumuz üçün bir çox qovşaq əldə edə bilərik, yəni platforma kütləvi şəkildə paralel işlənir (MPP). Məlumat ümumiyyətlə bir paylama düyməsini (və ya Vertikada bir seqmentləşdirmə bəndini) istifadə edərək qovşaqlara paylanır. Buna görə sifarişlər vahid bir cədvəldə yerləşdirilə bilər, bunlar sifariş_fakt adlandırıla bilər və bütün düyünlərə paylanacaq, məlumatların bölüşdürmə düyməsini istifadə edərək bir nodea veriləcəyi.

Arakəsmə: Üç növ var: üfüqi, şaquli və masa bölümləri.

Üfüqi bölmə məlumatları ilə, məsələn Bu vəziyyətdə poçt kodu / coğrafi bölgə ola biləcək bir açara uyğun olaraq təşkil edilən ünvanlar, şərq poçt kodları şərq poçt kodlarının cədvəlində və qərb poçt kodu qərb poçt kodları cədvəlində olmalıdır. Bu iki cədvəl eynidır, lakin fərqli məlumatlar ehtiva edir.

Şaquli bölmə bir süfrəni iki sütun arasında bölür ki, parçalanmanın solundakı bütün sütunlar bir cədvəldə, sağdakı sütunlar isə digərində olsun. Bu təcrübə qeyri-adi. İstifadəsi, bəzi sütunlar heç istifadə edilmədikdə və ya böyük olduqda.

Cədvəl bölməsi də üfüqi, lakin məntiqi, fiziki deyil və vahid cədvəldə yer alır. Məlumat, qovşaqlar üçün bir paylama açarına çox bənzəyən bir bölmə açarı tərəfindən təşkil edilir. Bu, əlaqəsiz arakəsmələri atlayaraq sorğuların daha sürətli işləməsinə imkan verir.

Mənbələr:

Sharding vs Horizontal Partitioning - Shard (verilənlər bazası memarlığı):

Üfüqi və şaquli bölüm, şərq / qərb üçün poçt kodları: (bölmə (verilənlər bazası))

Bu terminlərdən istifadə edərkən diqqətli olun. Onlardan fərqli platformalarda fərqli şəkildə istifadə edilə bilər. Vertica: məlumatları bölmə və bölmə

Ümid edirəm bu kömək edir!


cavab 3:

Layersçilər üçün bir izahat, əlaqəli TƏRƏF, böyük bir lüğətdə hərfləri olan nişanların olmasıdır. İstədiyiniz hərf sekmesini tapıb açacaqsınız və asanlıqla əldə etmək üçün lüğətin istədiyiniz bölməsinə sahib olacaqsınız.Sözlük minlərlə səhifəni əhatə etsə də, sağa doğru gedin və sözünüzü tapın.

Şardinq çox cildli bir ensiklopediyadır. AB 1 cilddə, 2 cilddə CD və s.

Müəyyən izahlara gəlincə ...

Bir əlaqəli verilənlər bazasında bölüşdürülmə TƏRƏZİ qaydasından istifadə edərək masa səviyyəsində aparılır. Bu cədvəl (və bəzi verilənlər bazalarında, məsələn, Oracle, indeks kimi), PARTITION qaydası və ya TƏRƏZİ funksiyası əsasında müəyyən bir dəyəri həll edilmiş satırları olan yaddaşın ayrıca bloklarına bölür.

Çaşdırıcı olaraq, "bölmə" kəlməsi sarsıntı demək üçün də istifadə edilə bilər və _does_ bir çox NoSQL verilənlər bazasında şardinq deməkdir. Bu DB-lər, adətən, nisbi variantın masa səviyyəsində TƏRƏZİLƏR-i dəstəkləmir (və ümumiyyətlə "masaları" dəstəkləməyə də bilər).

Nisbi və NoSQL verilənlər bazalarında sarsıntı adətən NoSQL məlumat dünyasındakı inventarların və ya qovşaqların əlaqəli bir hovuzundakı müəyyən bir "node" ya satır göndərmək üçün "şard qayda" ya da "şard açarı" istifadə edilməsinə aiddir. .

Əksər əlaqəli mühitlərdə siyasət sardinqi ümumiyyətlə avtomatik şardinq əvəzinə istifadə olunur. Məsələn, 1-100 müştərilər, məsələn 1, müştərilər 101-200, məsələn 2, və sair ola bilər .. Məlumat bazasının özü sarsıdıcı fəaliyyətini idarə etmək üçün istifadə olunmadığı üçün tətbiq səviyyəsindən aşağı olanlar bu barədə danışırlar.

Geniş yayılmış məlumat dünyalarını dəstəkləyən NoSQL verilənlər bazası məlumatların necə paylandığını tapmaq üçün avtomatik şardinqdən istifadə edir. Shard düymələri ümumiyyətlə sxemin bir hissəsidir - və onların seçimi çox vacibdir - lakin NoSQL verilənlər bazalarının çoxu düyünlərin harada məlumat göndərməli və ya haradan məlumat alacağını bilmək üçün şard açarı üzərində bir növ istifadə edir. olmalıdır.

Həm SQL, həm də NoSQL verilənlər bazası aləmində yaxşı bir şard strategiyası, qovşaq axtarışlarını aradan qaldıran və ya ən azı minimuma endirən bir strategiyadır.