MongoDB Sharding: Πρακτικός οδηγός βήμα προς βήμα

Η κοινή χρήση είναι μια διαδικασία διαχωρισμού της μεγάλης κλίμακας συνόλων δεδομένων σε ένα κομμάτι μικρότερων συνόλων δεδομένων σε πολλαπλές παρουσίες MongoDB σε ένα κατανεμημένο περιβάλλον.

Τι είναι το Sharding;

Η κοινή χρήση MongoDB μας παρέχει επεκτάσιμη λύση για την αποθήκευση μεγάλου όγκου δεδομένων μεταξύ του αριθμού των διακομιστών αντί για αποθήκευση σε έναν μόνο διακομιστή.

Πρακτικά, δεν είναι εφικτό να αποθηκεύονται εκθετικά αυξανόμενα δεδομένα σε ένα μόνο μηχάνημα. Η αναζήτηση ενός τεράστιου όγκου δεδομένων που είναι αποθηκευμένα σε έναν μόνο διακομιστή θα μπορούσε να οδηγήσει σε υψηλή χρήση πόρων και ενδέχεται να μην παρέχει ικανοποιητική απόδοση ανάγνωσης και εγγραφής.

Βασικά, υπάρχουν δύο τύποι μεθόδων κλιμάκωσης που υπάρχουν για την ανάληψη αυξανόμενων δεδομένων με το σύστημα:

Το Vertical Scaling λειτουργεί με τη βελτίωση της απόδοσης ενός διακομιστή προσθέτοντας πιο ισχυρούς επεξεργαστές, αναβαθμίζοντας τη μνήμη RAM ή προσθέτοντας περισσότερο χώρο στο δίσκο στο σύστημα. Υπάρχουν όμως οι πιθανές συνέπειες της εφαρμογής κάθετης κλιμάκωσης σε περιπτώσεις πρακτικής χρήσης με υπάρχουσες διαμορφώσεις τεχνολογίας και υλικού.

Το Horizontal Scaling λειτουργεί με την προσθήκη περισσότερων διακομιστών και τη διανομή του φορτίου σε πολλούς διακομιστές. Δεδομένου ότι κάθε μηχάνημα θα χειρίζεται το υποσύνολο ολόκληρου του συνόλου δεδομένων, παρέχει καλύτερη απόδοση και οικονομικά αποδοτική λύση αντί να αναπτύσσει το υλικό υψηλής τεχνολογίας. Απαιτεί όμως πρόσθετη συντήρηση σύνθετης υποδομής με μεγάλο αριθμό διακομιστών.

Ο διαμοιρασμός Mongo DB λειτουργεί με την τεχνική οριζόντιας κλίμακας.

Κοινοποίηση εξαρτημάτων

Για να επιτευχθεί η κοινή χρήση στο MongoDB, απαιτούνται τα ακόλουθα στοιχεία:

Το Shard είναι ένα παράδειγμα Mongo για το χειρισμό ενός υποσυνόλου αρχικών δεδομένων. Τα θραύσματα πρέπει να αναπτυχθούν στο σετ αντιγράφων.

Το Mongos είναι ένα στιγμιότυπο Mongo και λειτουργεί ως διεπαφή μεταξύ μιας εφαρμογής πελάτη και ενός θραυσμένου συμπλέγματος. Λειτουργεί ως δρομολογητής ερωτημάτων σε θραύσματα.

Ο διακομιστής Config είναι μια παρουσία Mongo που αποθηκεύει πληροφορίες μεταδεδομένων και λεπτομέρειες διαμόρφωσης του συμπλέγματος. Το MongoDB απαιτεί ο διακομιστής διαμόρφωσης να αναπτυχθεί ως σύνολο αντιγράφων.

Sharding Architecture

Το σύμπλεγμα MongoDB αποτελείται από έναν αριθμό συνόλων αντιγράφων.

Κάθε σετ ρεπλίκα αποτελείται από τουλάχιστον 3 ή περισσότερες παρουσίες mongo. Ένα τεμαχισμένο σύμπλεγμα μπορεί να αποτελείται από πολλαπλά στιγμιότυπα θραυσμάτων μονγκό και κάθε παρουσία θραυσμάτων λειτουργεί μέσα σε ένα σύνολο αντιγράφων θραυσμάτων. Η εφαρμογή αλληλεπιδρά με το Mongos, το οποίο με τη σειρά του επικοινωνεί με θραύσματα. Επομένως, στο Sharding, οι εφαρμογές δεν αλληλεπιδρούν ποτέ απευθείας με τους κόμβους θραυσμάτων. Ο δρομολογητής ερωτημάτων διανέμει τα υποσύνολα δεδομένων μεταξύ των κόμβων θραυσμάτων με βάση το κλειδί θραυσμάτων.

Εφαρμογή Sharding

Ακολουθήστε τα παρακάτω βήματα για την κοινή χρήση

Βήμα 1

  • Ξεκινήστε τον διακομιστή διαμόρφωσης στο σύνολο αντιγράφων και ενεργοποιήστε την αναπαραγωγή μεταξύ τους.

mongod –configsvr –port 27019 –replSet rs0 –dbpath C:datadata1 –bind_ip localhost

mongod –configsvr –port 27018 –replSet rs0 –dbpath C:datadata2 –bind_ip localhost

mongod –configsvr –port 27017 –replSet rs0 –dbpath C:datadata3 –bind_ip localhost

Βήμα 2

  • Εκκινήστε το σετ αντιγραφής σε έναν από τους διακομιστές διαμόρφωσης.

rs.initiate( { _id : “rs0”, configsvr: true, μέλη: [   { _id: 0, host: “IP:27017” },   { _id: 1, host: “IP:27018” },   { _id: 2, host: “IP:27019” }    ] })

rs.initiate( { _id : "rs0",  configsvr: true,  members: [   { _id: 0, host: "IP:27017" },   { _id: 1, host: "IP:27018" },   { _id: 2, host: "IP:27019" }    ] })
{
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(1593569257, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593569257, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1593569257, 1)
}

Βήμα 3

  • Ξεκινήστε την κοινή χρήση διακομιστών στο σύνολο αντιγράφων και ενεργοποιήστε την αναπαραγωγή μεταξύ τους.
  Ένας γρήγορος οδηγός σχετικά με τη συγγραφή μαθημάτων ηλεκτρονικής μάθησης για την ανάπτυξη μαθημάτων [+5 Tools]

mongod –shardsvr –port 27020 –replSet rs1 –dbpath C:datadata4 –bind_ip localhost

mongod –shardsvr –port 27021 –replSet rs1 –dbpath C:datadata5 –bind_ip localhost

mongod –shardsvr –port 27022 –replSet rs1 –dbpath C:datadata6 –bind_ip localhost

Το MongoDB προετοιμάζει τον πρώτο διακομιστή διαμοιρασμού ως Κύριος, για να μετακινήσει τη χρήση του κύριου διακομιστή κοινής χρήσης movePrimary μέθοδος.

Βήμα 4

  • Αρχικοποιήστε το σύνολο αντιγράφων σε έναν από τους διακομιστές διακομιστές.

rs.initiate( { _id : “rs0”, μέλη: [   { _id: 0, host: “IP:27020” },   { _id: 1, host: “IP:27021” },   { _id: 2, host: “IP:27022” }    ] })

rs.initiate( { _id : "rs0",  members: [   { _id: 0, host: "IP:27020" },   { _id: 1, host: "IP:27021" },   { _id: 2, host: "IP:27022" }    ] })
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593569748, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1593569748, 1)
}

Βήμα 5

  • Ξεκινήστε τα μάνγκο για το τεμαχισμένο σύμπλεγμα

mongos –port 40000 –configdb rs0/localhost:27019,localhost:27018, localhost:27017

Βήμα 6

  • Συνδέστε το διακομιστή διαδρομής mongo

mongo –port 40000

  • Τώρα, προσθέστε διακομιστές κοινής χρήσης.

sh.addShard( “rs1/localhost:27020,localhost:27021,localhost:27022”)

sh.addShard( "rs1/localhost:27020,localhost:27021,localhost:27022")
{
        "shardAdded" : "rs1",
        "ok" : 1,
        "operationTime" : Timestamp(1593570212, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593570212, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Βήμα 7

  • Στο κέλυφος mongo ενεργοποιήστε την κοινή χρήση σε DB και συλλογές.
  • Ενεργοποίηση κοινής χρήσης στο DB

sh.enableSharding (“geekFlareDB”)

sh.enableSharding("geekFlareDB")
{
        "ok" : 1,
        "operationTime" : Timestamp(1591630612, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1591630612, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Βήμα 8

  • Για να μοιραστείτε το κλειδί θραυσμάτων συλλογής (που περιγράφεται παρακάτω σε αυτό το άρθρο) απαιτείται.

Σύνταξη: sh.shardCollection(“dbName.collectionName”, { “key” : 1 } )

sh.shardCollection("geekFlareDB.geekFlareCollection", { "key" : 1 } )
{
        "collectionsharded" : "geekFlareDB.geekFlareCollection",
        "collectionUUID" : UUID("0d024925-e46c-472a-bf1a-13a8967e97c1"),
        "ok" : 1,
        "operationTime" : Timestamp(1593570389, 3),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593570389, 3),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Σημειώστε εάν η συλλογή δεν υπάρχει, δημιουργήστε ως εξής.

db.createCollection("geekFlareCollection")
{
        "ok" : 1,
        "operationTime" : Timestamp(1593570344, 4),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593570344, 5),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Βήμα 9

Εισαγάγετε δεδομένα στη συλλογή. Τα κούτσουρα Mongo θα αρχίσουν να αναπτύσσονται και υποδεικνύοντας ότι ένας εξισορροπητής βρίσκεται σε δράση και προσπαθεί να εξισορροπήσει τα δεδομένα μεταξύ των θραυσμάτων.

Βήμα 10

Το τελευταίο βήμα είναι να ελέγξετε την κατάσταση του διαμοιρασμού. Η κατάσταση μπορεί να ελεγχθεί εκτελώντας την παρακάτω εντολή στον κόμβο διαδρομής Mongos.

Κατάσταση κοινής χρήσης

Ελέγξτε την κατάσταση κοινής χρήσης εκτελώντας την παρακάτω εντολή στον κόμβο διαδρομής mongo.

sh.status()

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5ede66c22c3262378c706d21")
  }
  shards:
        {  "_id" : "rs1",  "host" : "rs1/localhost:27020,localhost:27021,localhost:27022",  "state" : 1 }
  active mongoses:
        "4.2.7" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  5
        Last reported error:  Could not find host matching read preference { mode: "primary" } for set rs1
        Time of Reported error:  Tue Jun 09 2020 15:25:03 GMT+0530 (India Standard Time)
        Migration Results for the last 24 hours:
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                rs1     1024
                        too many chunks to print, use verbose if you want to force print
        {  "_id" : "geekFlareDB",  "primary" : "rs1",  "partitioned" : true,  "version" : {  "uuid" : UUID("a770da01-1900-401e-9f34-35ce595a5d54"),  "lastMod" : 1 } }
                geekFlareDB.geekFlareCol
                        shard key: { "key" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                rs1     1
                        { "key" : { "$minKey" : 1 } } -->> { "key" : { "$maxKey" : 1 } } on : rs1 Timestamp(1, 0)
                geekFlareDB.geekFlareCollection
                        shard key: { "product" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                rs1     1
                        { "product" : { "$minKey" : 1 } } -->> { "product" : { "$maxKey" : 1 } } on : rs1 Timestamp(1, 0)
        {  "_id" : "test",  "primary" : "rs1",  "partitioned" : false,  "version" : {  "uuid" : UUID("fbc00f03-b5b5-4d13-9d09-259d7fdb7289"),  "lastMod" : 1 } }

mongos>

Διανομή δεδομένων

Ο δρομολογητής Mongos κατανέμει το φορτίο μεταξύ των θραυσμάτων με βάση το κλειδί θραύσματος και για την ομοιόμορφη κατανομή των δεδομένων. ο εξισορροπητής μπαίνει σε δράση.

  Πρέπει να το ενεργοποιήσετε ή να απενεργοποιήσετε;

Το βασικό στοιχείο για τη διανομή δεδομένων μεταξύ θραυσμάτων είναι

  • Ένας εξισορροπητής παίζει ρόλο στην εξισορρόπηση του υποσυνόλου δεδομένων μεταξύ των κομμένων κόμβων. Το Balancer εκτελείται όταν ο διακομιστής Mongos αρχίζει να διανέμει φορτία μεταξύ θραυσμάτων. Μόλις ξεκίνησε, το Balancer μοίραζε τα δεδομένα πιο ομοιόμορφα. Για να ελέγξετε την κατάσταση του balancer εκτελέστε το sh.status() ή sh.getBalancerState() ήsh.isBalancerRunning().
mongos> sh.isBalancerRunning()
true
mongos>

Ή

mongos> sh.getBalancerState()
true
mongos>

Μετά την εισαγωγή των δεδομένων, θα μπορούσαμε να παρατηρήσουμε κάποια δραστηριότητα στον δαίμονα του Mongos που δηλώνει ότι μετακινεί μερικά κομμάτια για τα συγκεκριμένα θραύσματα και ούτω καθεξής, δηλαδή, ο εξισορροπητής θα είναι σε δράση προσπαθώντας να εξισορροπήσει τα δεδομένα στα θραύσματα. Η λειτουργία του εξισορροπητή θα μπορούσε να οδηγήσει σε προβλήματα απόδοσης. Ως εκ τούτου, προτείνεται η λειτουργία του εξισορροπητή μέσα σε ένα ορισμένο παράθυρο εξισορροπητή.

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5efbeff98a8bbb2d27231674")
  }
  shards:
        {  "_id" : "rs1",  "host" : "rs1/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022",  "state" : 1 }
        {  "_id" : "rs2",  "host" : "rs2/127.0.0.1:27023,127.0.0.1:27024,127.0.0.1:27025",  "state" : 1 }
  active mongoses:
        "4.2.7" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  yes
        Failed balancer rounds in last 5 attempts:  5
        Last reported error:  Could not find host matching read preference { mode: "primary" } for set rs2
        Time of Reported error:  Wed Jul 01 2020 14:39:59 GMT+0530 (India Standard Time)
        Migration Results for the last 24 hours:
                1024 : Success
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                rs2     1024
                        too many chunks to print, use verbose if you want to force print
        {  "_id" : "geekFlareDB",  "primary" : "rs2",  "partitioned" : true,  "version" : {  "uuid" : UUID("a8b8dc5c-85b0-4481-bda1-00e53f6f35cd"),  "lastMod" : 1 } }
                geekFlareDB.geekFlareCollection
                        shard key: { "key" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                rs2     1
                        { "key" : { "$minKey" : 1 } } -->> { "key" : { "$maxKey" : 1 } } on : rs2 Timestamp(1, 0)
        {  "_id" : "test",  "primary" : "rs2",  "partitioned" : false,  "version" : {  "uuid" : UUID("a28d7504-1596-460e-9e09-0bdc6450028f"),  "lastMod" : 1 } }

mongos>
  • Το Shard Key καθορίζει τη λογική διανομής εγγράφων της συλλογής θραυσμάτων μεταξύ των θραυσμάτων. Το κλειδί θραυσμάτων μπορεί να είναι ένα πεδίο με ευρετήριο ή ένα σύνθετο πεδίο με ευρετήριο που απαιτείται να υπάρχει σε όλα τα έγγραφα της συλλογής που πρόκειται να εισαχθεί. Τα δεδομένα θα χωριστούν σε κομμάτια και κάθε κομμάτι θα συσχετιστεί με το κλειδί θραύσματος που βασίζεται στην περιοχή. Με βάση το ερώτημα εμβέλειας, ο δρομολογητής θα αποφασίσει ποιο θραύσμα θα αποθηκεύσει το κομμάτι.

Το Shard Key μπορεί να επιλεγεί λαμβάνοντας υπόψη πέντε ιδιότητες:

  • Καρδιοτητα
  • Γράψτε τη διανομή
  • Διαβάστε τη διανομή
  • Διαβάστε τη στόχευση
  • Διαβάστε την τοποθεσία

Ένα ιδανικό κλειδί θραυσμάτων κάνει το MongoDB να κατανέμει ομοιόμορφα το φορτίο σε όλα τα θραύσματα. Η επιλογή ενός καλού κλειδιού θραυσμάτων είναι εξαιρετικά σημαντική.

Εικόνα: MongoDB

Αφαίρεση του κόμβου θραυσμάτων

Πριν αφαιρέσετε τα θραύσματα από το σύμπλεγμα, ο χρήστης πρέπει να διασφαλίσει την ασφαλή μετεγκατάσταση των δεδομένων στα υπόλοιπα θραύσματα. Η MongoDB φροντίζει για την ασφαλή αποστράγγιση δεδομένων σε άλλους κόμβους θραυσμάτων πριν την αφαίρεση του απαιτούμενου κόμβου θραυσμάτων.

Εκτελέστε την παρακάτω εντολή για να αφαιρέσετε το απαιτούμενο θραύσμα.

Βήμα 1

Αρχικά, πρέπει να προσδιορίσουμε το όνομα κεντρικού υπολογιστή του θραύσματος που θα αφαιρεθεί. Η παρακάτω εντολή θα εμφανίσει όλα τα θραύσματα που υπάρχουν στο σύμπλεγμα μαζί με την κατάσταση του θραύσματος.

db.adminCommand( { listShards: 1 } )

mongos> db.adminCommand( { listShards: 1 } )
{
        "shards" : [
                {
                        "_id" : "rs1",
                        "host" : "rs1/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022",
                        "state" : 1
                },
                {
                        "_id" : "rs2",
                        "host" : "rs2/127.0.0.1:27023,127.0.0.1:27024,127.0.0.1:27025",
                        "state" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1593572866, 15),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593572866, 15),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Βήμα 2

Εκδώστε την παρακάτω εντολή για να αφαιρέσετε το απαιτούμενο θραύσμα από το σύμπλεγμα. Μόλις εκδοθεί, ο εξισορροπητής φροντίζει για την αφαίρεση των κομματιών από τον κόμβο αποστράγγισης θραυσμάτων και, στη συνέχεια, εξισορροπεί την κατανομή των υπολειπόμενων κομματιών μεταξύ των κόμβων των υπολοίπων θραυσμάτων.

db.adminCommand( { removeShard: "shardedReplicaNodes" } )

mongos> db.adminCommand( { removeShard: "rs1/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022" } )
{
        "msg" : "draining started successfully",
        "state" : "started",
        "shard" : "rs1",
        "note" : "you need to drop or movePrimary these databases",
        "dbsToMove" : [ ],
        "ok" : 1,
        "operationTime" : Timestamp(1593572385, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593572385, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Βήμα 3

Για να ελέγξετε την κατάσταση του θραύσματος αποστράγγισης, δώστε ξανά την ίδια εντολή.

db.adminCommand( { removeShard: "rs1/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022" } )

Πρέπει να περιμένουμε μέχρι να ολοκληρωθεί η αποστράγγιση των δεδομένων. Τα πεδία msg και κατάστασης θα δείχνουν εάν η αποστράγγιση των δεδομένων έχει ολοκληρωθεί ή όχι, ως εξής

"msg" : "draining ongoing",
"state" : "ongoing",

Μπορούμε επίσης να ελέγξουμε την κατάσταση με την εντολή sh.status(). Μόλις αφαιρεθεί ο τεμαχισμένος κόμβος δεν θα αντικατοπτρίζεται στην έξοδο. Αλλά εάν η αποστράγγιση είναι συνεχής, ο τεμαχισμένος κόμβος θα έχει την κατάσταση αποστράγγισης ως αληθής.

Βήμα 4

Συνεχίστε να ελέγχετε την κατάσταση της αποστράγγισης με την ίδια παραπάνω εντολή, μέχρι να αφαιρεθεί τελείως το απαιτούμενο θραύσμα.
Μόλις ολοκληρωθεί, η έξοδος της εντολής θα αντικατοπτρίζει το μήνυμα και θα δηλώσει ως ολοκληρωμένο.

"msg" : "removeshard completed successfully",
"state" : "completed",
"shard" : "rs1",
"ok" : 1,

Βήμα 5

Τέλος, πρέπει να ελέγξουμε τα υπόλοιπα θραύσματα στο σύμπλεγμα. Για να ελέγξετε την κατάσταση, πληκτρολογήστε sh.status() ή db.adminCommand( { listShards: 1 } )

mongos> db.adminCommand( { listShards: 1 } )
{
        "shards" : [
                {
                        "_id" : "rs2",
                        "host" : "rs2/127.0.0.1:27023,127.0.0.1:27024,127.0.0.1:27025",
                        "state" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1593575215, 3),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1593575215, 3),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Εδώ, μπορούμε να δούμε ότι το αφαιρεμένο θραύσμα δεν υπάρχει πλέον στη λίστα των θραυσμάτων.

Οφέλη του Sharding έναντι της αναπαραγωγής

  • Στην αναπαραγωγή, ο κύριος κόμβος χειρίζεται όλες τις λειτουργίες εγγραφής, ενώ οι δευτερεύοντες διακομιστές απαιτούνται για τη διατήρηση αντιγράφων ασφαλείας ή την εξυπηρέτηση λειτουργιών μόνο για ανάγνωση. Αλλά κατά τη διανομή μαζί με σύνολα αντιγράφων, το φορτίο κατανέμεται μεταξύ πολλών διακομιστών.
  • Ένα σετ μεμονωμένων αντιγράφων περιορίζεται σε 12 κόμβους, αλλά δεν υπάρχει περιορισμός στον αριθμό των θραυσμάτων.
  • Η αναπαραγωγή απαιτεί υψηλού επιπέδου υλικό ή κλιμάκωση κορυφών για το χειρισμό μεγάλων συνόλων δεδομένων, η οποία είναι πολύ ακριβή σε σύγκριση με την προσθήκη πρόσθετων διακομιστών σε κοινή χρήση.
  • Στην αναπαραγωγή, η απόδοση ανάγνωσης μπορεί να βελτιωθεί με την προσθήκη περισσότερων slave/secondary servers, ενώ, στη Sharding, η απόδοση ανάγνωσης και εγγραφής θα βελτιωθεί με την προσθήκη περισσότερων κόμβων shards.

Περιορισμός διαμοιρασμού

  • Το σύμπλεγμα Sharded δεν υποστηρίζει μοναδική ευρετηρίαση στα θραύσματα έως ότου το μοναδικό ευρετήριο έχει το πρόθεμα του κλειδιού πλήρους θραύσματος.
  • Όλες οι λειτουργίες ενημέρωσης για τη συλλογή διαμερισμάτων είτε σε ένα είτε σε πολλά έγγραφα πρέπει να περιέχουν το πεδίο διαμοιρασμένου κλειδιού ή _id στο ερώτημα.
  • Οι συλλογές μπορούν να τεμαχιστούν εάν το μέγεθός τους δεν υπερβαίνει το καθορισμένο όριο. Αυτό το όριο μπορεί να εκτιμηθεί με βάση το μέσο μέγεθος όλων των κλειδιών θραυσμάτων και το διαμορφωμένο μέγεθος των κομματιών.
  • Το Sharding περιλαμβάνει λειτουργικά όρια για το μέγιστο μέγεθος συλλογής ή τον αριθμό των διαχωρισμών.
  • Επιλέγοντας τα λανθασμένα πλήκτρα θραυσμάτων για να οδηγήσει σε επιπτώσεις στην απόδοση.

συμπέρασμα

Το MongoDB προσφέρει ενσωματωμένο διαμοιρασμό για την υλοποίηση μιας μεγάλης βάσης δεδομένων χωρίς να διακυβεύεται η απόδοση. Ελπίζω τα παραπάνω να σας βοηθήσουν να ρυθμίσετε τον διαμοιρασμό MongoDB. Στη συνέχεια, ίσως θελήσετε να εξοικειωθείτε με μερικές από τις κοινώς χρησιμοποιούμενες εντολές MongoDB.