Sharding ( engelsk sharding ) är ett tillvägagångssätt som involverar uppdelning av databaser , dess individuella objekt eller sökmotorindex i oberoende segment , som vart och ett styrs av en separat instans av databasservern , vanligtvis placerad på en separat datornod.
Till skillnad från partitionering , som innebär separat lagring av delar av databasobjekt under kontroll av en enda DBMS-instans, tillåter sharding dig att använda den distribuerade beräkningstekniken , men det är svårare att implementera, eftersom det kräver samordning av flera instanser på ett sådant sätt att interaktion med hela uppsättningen av segment utförs som med en enda databas.
Vissa data i databasen kan finnas i alla skärvor, och vissa kan finnas i endast en eller några få skärvor. Till exempel kan små tabeller som används som långsamt föränderliga dimensioner representeras fullt ut i varje skärva, medan stora faktatabeller är jämnt uppdelade av någon nyckel över skärvor. Att ha ofta åtkomst till data på alla shards möjliggör effektivare sammanfogningsoperationer samtidigt som man säkerställer att alla shards uppdateras synkront.
Skärningstekniken används ofta i NoSQL DBMS (som Cassandra , Couchbase , MongoDB ), massivt parallella analytiska DBMS ( Teradata Database , Netezza , Greenplum ), horisontellt skalbara sökmotorer ( Elasticsearch , Solr ). Tekniken är också implementerad i vissa traditionella relationella DBMS (Sharding option i Oracle Database ). För DBMS som inte stöder segmentering, för att implementera denna teknik, dirigeras förfrågningar till flera instanser av DBMS från applikationssidan; Det finns flera mellanprogramsprojekt som implementerar transparent skärning ( dbShards , Apache ShardingShere , ScaleArc , MaxScale för MariaDB ).