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