MongoDB and DynamoDB September 8, 2020 Md Minhazul Haque hello@mdminhazulhaque.io
What is NoSQL ● Stands for Not SQL ● No relational form, No schema ● No storing data in tables ● Supports sharding for data partitioning ● Different adaption to NoSQL ○ Document Based: MongoDB, CouchDB ○ Key-value Based: DynamoDB, Redis
Why use MongoDB ● Scalable horizontally unlike RDBMS ● Supports dynamic Data Structure ● Caching not needed for performance tuning ● Saves time in designing database ● More agile
NoSQL vs RDBMS Terms MongoDB SQL Database Database Collection Table Index Index Document Row Field Column Link/Embed Join
Who uses MongoDB
Who uses MongoDB
Setting Up MongoDB
Setting Up MongoDB # ubuntu sudo apt install mongodb-server mongodb-clients # centos sudo yum install -y mongodb-org-4.4.0 mongodb-org-server-4.4.0 mongodb-org-shell-4.4.0 mongodb-org-mongos-4.4.0 mongodb-org-tools-4.4.0
Starting MongoDB Daemon mongod mongod --dbpath /my/custom/path mongod --port 27017 mongod --bind_ip 127.0.0.1 mongod --config /etc/mongodb.conf Mongod --replSet prod_replica
Accessing MongoDB using Client mongo mongo 127.0.0.1 mongo 127.0.0.1:27017 mongo 127.0.0.1:27017/formapply
MongoDB: Create Query > show dbs admin 0.000GB config 0.000GB local 0.000GB > use users switched to db users > db.users.insert({name:"Foo Bar"}) WriteResult({ "nInserted" : 1 })
MongoDB: Read Query > use users > db.users.find({}) { "_id" : ObjectId("5f5659472eef8cb6bf6a02f1"), "name" : "Foo Bar" }
MongoDB: Update Query > db.users.update({}, {$set: {name:"Tanvir JurisTech"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find({}) { "_id" : ObjectId("5f5659472eef8cb6bf6a02f1"), "name" : "Tanvir JurisTech" }
MongoDB: Delete Query > db.users.remove({name:"Tanvir JurisTech"}) WriteResult({ "nRemoved" : 1 }) > db.users.find({}) >
MongoDB: Replica Set mongod --dbpath /data/db1 --port 27001 --replSet prod mongod --dbpath /data/db2 --port 27002 --replSet prod mongod --dbpath /data/db3 --port 27003 --replSet prod
MongoDB: Replica Set > rs.initiate( { _id : "prod", members: [ { _id: 0, host: "127.0.0.1:27001" }, { _id: 1, host: "127.0.0.1:27002" } ] }) { "ok" : 1, "operationTime" : Timestamp(1599495296, 1), ... }
MongoDB: Replica Set > mongo 127.0.0.1:27001 prod:PRIMARY> use messages switched to db messages prod:PRIMARY> db.messages.find({}) prod:PRIMARY> db.messages.insert({message:"Hello World!"}) WriteResult({ "nInserted" : 1 }) > mongo 127.0.0.1:27002 prod:SECONDARY> rs.slaveOk() prod:SECONDARY> use messages switched to db messages prod:SECONDARY> db.messages.find({}) { "_id" : ObjectId("5f565dcc832cf9e810aeea2d"), "message" : "Hello World!" }
MongoDB: Replica Set > mongo 127.0.0.1:27001 prod:PRIMARY> rs.add({ _id: 2, host: "127.0.0.1:27003" } > prod:SECONDARY> rs.conf() { "_id" : "prod", "members" : [ { "host" : "127.0.0.1:27001", }, { "host" : "127.0.0.1:27002", }, { "host" : "127.0.0.1:27003", } ] }
MongoDB: Replica Set > mongo 127.0.0.1:27001 prod:PRIMARY> 2020-09-08T00:28:05.646+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27001 (127.0.0.1) failed 2020-09-08T00:28:05.646+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27001, in(checking socket for error after poll), reason: Connection refused 2020-09-08T00:28:05.646+0800 I NETWORK [thread1] reconnect 127.0.0.1:27001 (127.0.0.1) failed failed # stop mongodb on port 27001 > mongo 127.0.0.1:27002 prod:SECONDARY> prod:SECONDARY> prod:PRIMARY> prod:PRIMARY> prod:PRIMARY> prod:PRIMARY>
DynamoDB
Why use DynamoDB ● Key-value based database at scale ● Serverless (managed by AWS) ● Auto scaling on enterprise level ● Read/Write capacity mode ● Realtime Trigger/Streams ● Priced on Read/Write operation* ● Automatic replication among AZ ● Handy HTTP API
Who uses DynamoDB
DynamoDB: Create Table
DynamoDB: Create Table
DynamoDB: Create Table
DynamoDB: Insert Item
DynamoDB: Insert Item
DynamoDB: Update Item
DynamoDB: Delete Item
Q&A
More references ● https://www.mongodb.com/nosql-explained/nosql-vs-sql ● https://www.featuredcustomers.com/vendor/amazon-dynamodb/customers ● https://bits.mdminhazulhaque.io/mongodb/mongodb-for-mysql-people.html ● https://bits.mdminhazulhaque.io/aws/aws-cli-cheatsheet.html#dynamodb ● https://aws.amazon.com/dynamodb/features/ ● https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStar ted.PHP.html

MongoDB and DynamoDB

  • 1.
    MongoDB and DynamoDB September8, 2020 Md Minhazul Haque hello@mdminhazulhaque.io
  • 2.
    What is NoSQL ●Stands for Not SQL ● No relational form, No schema ● No storing data in tables ● Supports sharding for data partitioning ● Different adaption to NoSQL ○ Document Based: MongoDB, CouchDB ○ Key-value Based: DynamoDB, Redis
  • 3.
    Why use MongoDB ●Scalable horizontally unlike RDBMS ● Supports dynamic Data Structure ● Caching not needed for performance tuning ● Saves time in designing database ● More agile
  • 4.
    NoSQL vs RDBMSTerms MongoDB SQL Database Database Collection Table Index Index Document Row Field Column Link/Embed Join
  • 5.
  • 6.
  • 7.
  • 8.
    Setting Up MongoDB #ubuntu sudo apt install mongodb-server mongodb-clients # centos sudo yum install -y mongodb-org-4.4.0 mongodb-org-server-4.4.0 mongodb-org-shell-4.4.0 mongodb-org-mongos-4.4.0 mongodb-org-tools-4.4.0
  • 9.
    Starting MongoDB Daemon mongod mongod--dbpath /my/custom/path mongod --port 27017 mongod --bind_ip 127.0.0.1 mongod --config /etc/mongodb.conf Mongod --replSet prod_replica
  • 10.
    Accessing MongoDB usingClient mongo mongo 127.0.0.1 mongo 127.0.0.1:27017 mongo 127.0.0.1:27017/formapply
  • 11.
    MongoDB: Create Query >show dbs admin 0.000GB config 0.000GB local 0.000GB > use users switched to db users > db.users.insert({name:"Foo Bar"}) WriteResult({ "nInserted" : 1 })
  • 12.
    MongoDB: Read Query >use users > db.users.find({}) { "_id" : ObjectId("5f5659472eef8cb6bf6a02f1"), "name" : "Foo Bar" }
  • 13.
    MongoDB: Update Query >db.users.update({}, {$set: {name:"Tanvir JurisTech"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find({}) { "_id" : ObjectId("5f5659472eef8cb6bf6a02f1"), "name" : "Tanvir JurisTech" }
  • 14.
    MongoDB: Delete Query >db.users.remove({name:"Tanvir JurisTech"}) WriteResult({ "nRemoved" : 1 }) > db.users.find({}) >
  • 15.
    MongoDB: Replica Set mongod--dbpath /data/db1 --port 27001 --replSet prod mongod --dbpath /data/db2 --port 27002 --replSet prod mongod --dbpath /data/db3 --port 27003 --replSet prod
  • 16.
    MongoDB: Replica Set >rs.initiate( { _id : "prod", members: [ { _id: 0, host: "127.0.0.1:27001" }, { _id: 1, host: "127.0.0.1:27002" } ] }) { "ok" : 1, "operationTime" : Timestamp(1599495296, 1), ... }
  • 17.
    MongoDB: Replica Set >mongo 127.0.0.1:27001 prod:PRIMARY> use messages switched to db messages prod:PRIMARY> db.messages.find({}) prod:PRIMARY> db.messages.insert({message:"Hello World!"}) WriteResult({ "nInserted" : 1 }) > mongo 127.0.0.1:27002 prod:SECONDARY> rs.slaveOk() prod:SECONDARY> use messages switched to db messages prod:SECONDARY> db.messages.find({}) { "_id" : ObjectId("5f565dcc832cf9e810aeea2d"), "message" : "Hello World!" }
  • 18.
    MongoDB: Replica Set >mongo 127.0.0.1:27001 prod:PRIMARY> rs.add({ _id: 2, host: "127.0.0.1:27003" } > prod:SECONDARY> rs.conf() { "_id" : "prod", "members" : [ { "host" : "127.0.0.1:27001", }, { "host" : "127.0.0.1:27002", }, { "host" : "127.0.0.1:27003", } ] }
  • 19.
    MongoDB: Replica Set >mongo 127.0.0.1:27001 prod:PRIMARY> 2020-09-08T00:28:05.646+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27001 (127.0.0.1) failed 2020-09-08T00:28:05.646+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27001, in(checking socket for error after poll), reason: Connection refused 2020-09-08T00:28:05.646+0800 I NETWORK [thread1] reconnect 127.0.0.1:27001 (127.0.0.1) failed failed # stop mongodb on port 27001 > mongo 127.0.0.1:27002 prod:SECONDARY> prod:SECONDARY> prod:PRIMARY> prod:PRIMARY> prod:PRIMARY> prod:PRIMARY>
  • 20.
  • 21.
    Why use DynamoDB ●Key-value based database at scale ● Serverless (managed by AWS) ● Auto scaling on enterprise level ● Read/Write capacity mode ● Realtime Trigger/Streams ● Priced on Read/Write operation* ● Automatic replication among AZ ● Handy HTTP API
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
    More references ● https://www.mongodb.com/nosql-explained/nosql-vs-sql ●https://www.featuredcustomers.com/vendor/amazon-dynamodb/customers ● https://bits.mdminhazulhaque.io/mongodb/mongodb-for-mysql-people.html ● https://bits.mdminhazulhaque.io/aws/aws-cli-cheatsheet.html#dynamodb ● https://aws.amazon.com/dynamodb/features/ ● https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStar ted.PHP.html