Sharding ( în engleză sharding ) este o abordare care implică împărțirea bazelor de date , a obiectelor sale individuale sau a indicilor motoarelor de căutare în segmente independente , fiecare dintre acestea fiind controlată de o instanță separată a serverului de baze de date , situată de obicei pe un nod de calcul separat.
Spre deosebire de partiționare , care implică stocarea separată a unor părți ale obiectelor bazei de date sub controlul unei singure instanțe DBMS, sharding vă permite să utilizați tehnica de calcul distribuit , dar este mai dificil de implementat, deoarece necesită coordonarea mai multor instanțe într-un astfel de mod că interacțiunea cu întregul set de segmente se realizează ca la o singură bază de date.
Unele date din baza de date pot fi prezente în toate fragmentele, iar unele pot fi în doar una sau câteva fragmente. De exemplu, tabelele mici folosite ca dimensiuni care se schimbă lent pot fi reprezentate pe deplin în fiecare fragment, în timp ce tabelele mari de fapte sunt împărțite uniform de o cheie între fragmente. Accesarea frecventă a datelor de pe toate fragmentele permite operațiuni de alăturare mai eficiente , asigurând în același timp că toate fragmentele se actualizează sincron.
Tehnica sharding este utilizată pe scară largă în DBMS NoSQL (cum ar fi Cassandra , Couchbase , MongoDB ), DBMS analitic masiv paralel ( Teradata Database , Netezza , Greenplum ), motoarele de căutare scalabile orizontal ( Elasticsearch , Solr ). De asemenea, tehnica este implementată în unele SGBD relaționale tradiționale (opțiunea de fragmentare în baza de date Oracle ). Pentru SGBD care nu acceptă segmentarea, pentru a implementa această tehnică, solicitările sunt direcționate către mai multe instanțe ale SGBD din partea aplicației; Există mai multe proiecte middleware care implementează sharding transparent ( dbShards , Apache ShardingShere , ScaleArc , MaxScale pentru MariaDB ).