Baca Versi sebelumnya Belajar Dengan Jenius Node.js Volume 1
- Git
- Node.js
- Express.js
- Prisma.js
- Create MySQL CRUD Project
- Setup
- Install Typescript
- Generate tsconfig
- Install Prisma
- Setup Prisma
- Config .env
- Create Schema
- Push Prisma
- Main Script
- Create
- Create Single Record
- Create Multiple Record
- Read
- Read All Record
- Read Related Record
- Read Specific Record
- Read Filtered Record
- Read By Multiple Field
- Read By Filtered Related Record
- Read By Subset of Field
- Read By Subset of Related Record
- Read Related Record
- Update
- Update Single Record
- Update Multiple Record
- Update or Insert Record
- Update Number Field
- Delete
- Delete Single Record
- Delete Multiple Record
- Delete All Record
- Transaction
- Prisma Seeder
- Create
- Setup
- Create MySQL CRUD Project
- Postman
- Docker
- Amazon Web Services
- Big Data
Last touched on 7-3-2022
Parameter | Value | Note |
---|---|---|
Official Website | https://nodejs.org/en/ | |
Node.js Latest Version (LTS) | 16.15.1 | |
Node.js Latest Version (Current) | 18.14.0 | |
Node.js Blog | https://nodejs.org/en/blog/ | |
Node.js Security Group | https://groups.google.com/g/nodejs-sec?pli=1 |
Saat kita sedang melakukan pemasangan module terdapat dua mode yaitu :
- devDependencies adalah module yang dibutuhkan saat melakukan development.
- dependencies adalah module yang dibutuhkan saat runtime.
Untuk mendapatkan informasi dalam dependencies dari node.js project yang kita miliki eksekusi perintah di bawah ini :
$ npm ls
Node.js telah mendukung konfigurasi terbaru dalam package.json, konfigurasi tersebut adalah type. Kita bisa mengubah type dengan module atau commonJS :
{
"name": "my-package",
"type": "module",
"//": "...",
"dependencies": {
}
}
Konfigurasi ini menentukan setiap javascript files akan diinterpretasikan sebagai ES Modules atau CommonJS modules. Konfigurasi dasar type pada package.json secara default adalah CommonJS jika tidak kita tambahkan. Jika kita menggunakan type dengan mode module maka ada beberapa rules baru :
- Kita bisa menggunakan import dan export statement
- Kita dapat menggunakan Top-level await
- Jika kita menggunakan Relative Import maka kita harus menulisnya secara full path (eg. "./foo.js")
Node.js secara original menggunakan CommonJS Format Module dengan ciri penggunakan keyword require dan module.export. Namun selain Format Module CommonJS juga terdapat EcmaScript Format Module dengan ciri penggunaan keyword import dan export, karena EcmaScript menjadi standard maka Node.js harus bisa memberikan dukungan untuk EcmaScript Module.
Node.js akan membaca ekstensi file .cjs sebagai CommonJS Modules dan .mjs sebagai EcmaScript Modules.
Last touched on 6-29-2022
Parameter | Value | Note |
---|---|---|
Repository | ||
Website | ||
Notes :
4.x API Version, last touched on 6-17-2022
Untuk membuat sebuah express applications gunakan top level function express() yang telah di export oleh express module. Perhatikan kode di bawah ini :
var express = require('express')
var app = express()
express.json() adalah sebuah built-in middleware function dalam express, fungsinya digunakan untuk melakukan parsing atas permintaan (request) yang memiliki payload dalam format JSON dan menjadi basis dalam middleware body-parser.
CORS (Cross-Origin Resource Sharing) dan SOP (Same-Origin Policy) adalah sebuah server-side configurations yang dapat di gunakan oleh client atau tidak sama sekali.
A <---JSON---> B
JSON Web Token (JWT) digunakan untuk berbagi informasi dengan aman antar dua entitas menggunakan JSON Object, ketika JWT telah di produksi tidak terdapat cara untuk mengubah konten di dalamnya. JWT selalu ditandatangani menggunakan Cryptographic Hashing seperti RSA, untuk memverifikasi integritas informasi yang ada di dalam JSON Object.
Struktur JSON Web Token (JWT) :
- Header
- Payload
- Signature
Last touched on 6-29-2022
Parameter | Value | Note |
---|---|---|
Repository | 3.14.0 - https://github.com/prisma/prisma | |
Website | www.prisma.io | |
Prisma adalah Open Source Object Relational Mapper (ORM) Generasi Terbaru (Next-generation ORM). Dikatakan terbaru karena Prisma adalah project open source untuk Node.js dan typescript yang ditulis menggunakan bahasa pemrograman Rust.
Prisma dapat digunakan dalam Node.js dan Typescript Application di back-end system. Prisma dapat digunakan di dalam arsitektur microservices dan serverless. Kita bisa menerapkan Prisma untuk mempermudah pembangunan REST API, GraphQL API dan gRPC API.
Untuk rute mempelajari prisma bisa dimulai dengan :
Object Relational Mapper (ORM) adalah sebuah framework yang menyediakan abstraksi agar sumber data yang tidak kompatibel untuk pengolahan dara dapat digunakan pada suatu database. Prisma memiliki tiga development tools, diantaranya adalah :
- Prisma Client - Untuk memproduksi tyfe-safe database client secara otomatis.
- Prisma Migrate - Untuk melakukan data modelling secara declarative dan kustomisasi migrations.
- Prisma Studio - Sebuah Web Application berbasis Graphic User Interface (GUI) untuk mengolah database.
Buat directory project dengan nama sqlite-prisma kemudian di dalam directory eksekusi perintah di bawah ini :
$ npm init -y
Selanjutnya kita akan melakukan pemasangan module, terdapat dua mode pemasangan yaitu :
- devDependencies adalah module yang dibutuhkan saat melakukan development.
- dependencies adalah module yang dibutuhkan saat runtime.
Pertama kita akan melakukan instalasi typescript development tools :
$ npm install typescript ts-node @types/node --save-dev
Di bawah ini adalah penjelasan modules yang kita pasang :
- Module typescript digunakan agar kita memiliki TypeScript toolchains.
- Module ts-node digunakan agar kita bisa menjalankan typescript applications.
- Module @types/node digunakan agar Node.js yang kita pakai dapat menggunakan Type Definitions dalam Typescript.
Eksekusi perintah di bawah ini untuk memproduksi file konfigurasi TypeScript :
$ tsc --init
Selanjutnya ubah isi file konfigurasi dari tsconfig.json menjadi :
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
Selanjutnya install Prisma dengan cara mengeksekusi perintah di bawah ini :
$ npm install prisma --save-dev
Saat database server telah berjalan menggunakan docker selanjutnya adalah setup prisma dengan cara mengeksekusi perintah di bawah ini :
$ npx prisma init
Setelah mengeksekusi perintah di atas terdapat folder dengan nama prisma dan .env file yang akan kita gunakan untuk menentukan koneksi ke database.
Perintah di atas akan memberikan output :
✔ Your Prisma schema was created at prisma/schema.prisma
You can now open it in your favorite editor.
warn You already have a .gitignore file. Don't forget to add `.env` in it to not commit any private information.
Next steps:
1. Set the DATABASE_URL in the .env file to point to your existing database. If your database has no tables yet, read https://pris.ly/d/getting-started
2. Set the provider of the datasource block in schema.prisma to match your database: postgresql, mysql, sqlite, sqlserver, mongodb or cockroachdb.
3. Run prisma db pull to turn your database schema into a Prisma schema.
4. Run prisma generate to generate the Prisma Client. You can then start querying your database.
More information in our documentation:
https://pris.ly/d/getting-started
Isi dari .env file :
DATABASE_URL="mysql://USERNAME:PASSWORD@localhost:3306/DATABASENAME"
Dalam file .env terdapat informasi :
- User Credentials username dan password ke database yang kita isi.
- Port Number MySQL di 3306.
- Database name yang akan kita gunakan, jika belum di buat anda harus membuatnya terlebih dahulu.
Pada folder prisma terdapat file dengan nama scheme.prisma yang dapat kita gunakan untuk melakukan data modelling :
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model ExtendedProfile {
id Int @id @default(autoincrement())
biography String
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
name String?
email String @unique
profileViews Int @default(0)
role Role @default(USER)
posts Post[]
profile ExtendedProfile?
}
model Post {
id Int @id @default(autoincrement())
title String
published Boolean @default(true)
author User @relation(fields: [authorId], references: [id])
authorId Int
comments Json?
views Int @default(0)
likes Int @default(0)
categories Category[]
}
model Category {
id Int @id @default(autoincrement())
name String @unique
posts Post[]
}
enum Role {
USER
ADMIN
}
Pada tahap ini kita akan menentukan data model dalam Prisma schema file, selanjutnya data model akan di mapping ke dalam database menggunakan Prisma Migrate. Proses mapping terjadi dengan cara mengeksekusi sekumpulan SQL Statements yang telah diproduksi secara otomatis untuk membuat sekumpulan tables sesuai dengan data model yang diberikan.
Push Prisma Scheme ke dalam database MySQL dengan mengeksekusi perintah berikut :
$ npx prisma db push
Untuk memastikan bahwa table sudah dibuat kedalam mysql database gunakan Prisma Studio.
Setelah itu eksekusi perintah di bawah ini :
$ npx prisma studio
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Prisma Studio is up on http://localhost:5555
Selanjutnya anda bisa membuka browser dengan alamat localhost di port 5555.
Buatlah File dengan nama Index.ts, dengan kerangka berikut :
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
// CRUD SCRIPT
}
main()
.catch((error) => {
console.log(error);
})
.finally(async () => {
await prisma.$disconnect();
});
Untuk membuat Single Record tambahkan kode berikut di dalam entrypoint di main function :
// CREATE SINGLE RECORD
const user = await prisma.user.create({
data: {
email: "[email protected]",
name: "Gun Gun Febrianza",
},
});
Untuk membuat Multiple Record sekaligus tambahkan kode berikut di dalam entrypoint di main function :
//CREATE MULTIPLE RECORD
const createMany = await prisma.user.createMany({
data: [
{ name: "Gun", email: "[email protected]" },
{
name: "Gun Gun Febrianza",
email: "[email protected]",
}, // Duplicate unique key!
{ name: "Maudy", email: "[email protected]" },
{ name: "KodokGempal", email: "[email protected]" },
{ name: "KodokZuma", email: "[email protected]" },
],
skipDuplicates: true,
});
Untuk membaca All Record tambahkan kode berikut di dalam entrypoint di main function :
//FIND ALL USER
const listUsers = await prisma.user.findMany();
console.dir(listUsers, { depth: null });
Untuk membaca Related Record tambahkan kode berikut di dalam entrypoint di main function :
//FIND ALL USER USING INCLUDE PROFILE
const allUsers = await prisma.user.findMany({
include: {
posts: true,
profile: true,
},
});
console.dir(allUsers, { depth: null });
Untuk membaca Specific Record tambahkan kode berikut di dalam entrypoint di main function :
//FIND SPECIFIC USER
let resultFindByEmail = await prisma.user
.findUnique({
where: { email: "[email protected]" },
})
.catch((error) => console.log(error));
console.dir(resultFindByEmail);
Untuk membaca Record dengan Specific Criteria tambahkan kode berikut di dalam entrypoint di main function :
//FIND BY SPECIFIC CRITERIA
const findFirstUser = await prisma.user.findFirst({
where: {
posts: {
some: {
likes: {
gt: 100,
},
},
},
},
orderBy: {
id: "desc",
},
});
console.dir(findFirstUser);
Untuk membaca Record dengan Specific Filter tambahkan kode berikut di dalam entrypoint di main function :
//GET FILTERED LIST OF RECORDS
const filteredUsers = await prisma.user.findMany({
where: {
email: {
endsWith: "cryptolibertarian.id",
},
},
});
console.dir(filteredUsers);
Untuk membaca Record dengan Multiple Field tambahkan kode berikut di dalam entrypoint di main function :
//GET BY MULTIPLE FIELD VALUES
const users = await prisma.user.findMany({
where: {
OR: [
{
name: {
startsWith: "G",
},
},
{
AND: {
profileViews: {
gt: 0,
},
role: {
equals: "USER",
},
},
},
],
},
});
console.dir(users);
Untuk membaca Related Record dengan Filtered Field tambahkan kode berikut di dalam entrypoint di main function :
//GET BY FILTERED RELATED RECORD OF FIELD VALUES
const users = await prisma.user.findMany({
where: {
email: {
endsWith: "cryptolibertarian.id",
},
posts: {
some: {
published: true,
},
},
},
});
Untuk membaca Record dengan Specific Subset of Field tambahkan kode berikut di dalam entrypoint di main function :
//SELECT BY SUBSET OF FIELDS
const user = await prisma.user.findUnique({
where: {
email: "[email protected]",
},
select: {
email: true,
profile: true,
},
});
console.dir(user);
Untuk membaca Record dengan Specific Subset of Related Record tambahkan kode berikut di dalam entrypoint di main function :
//SELECT A SUBSET OF RELATED RECORD FIELDS
const user = await prisma.user.findUnique({
where: {
email: "[email protected]",
},
select: {
email: true,
posts: {
select: {
likes: true,
},
},
},
});
console.dir(user);
Untuk membaca Related Record tambahkan kode berikut di dalam entrypoint di main function :
//READ RELATED RECORD
const users = await prisma.user.findMany({
where: {
role: "USER",
},
include: {
posts: true,
},
});
console.dir(users);
Untuk memodifikasi Single Record tambahkan kode berikut di dalam entrypoint di main function :
//UPDATE SINGLE RECORD
const post = await prisma.user.update({
where: { id: 1 },
data: { profileViews: 100 },
});
console.dir(post);
Untuk memodifikasi Multiple Record tambahkan kode berikut di dalam entrypoint di main function :
//UPDATE MULTIPLE RECORD
const updateUsers = await prisma.user.updateMany({
where: {
email: {
contains: "prisma.io",
},
},
data: {
role: "ADMIN",
},
});
Untuk memodifikasi dengan Update & Insert Record tambahkan kode berikut di dalam entrypoint di main function :
//UPSERT (UPDATE OR INSERT)
const upsertUser = await prisma.user.upsert({
where: {
email: "[email protected]",
},
update: {
name: "Viola the Magnificent",
},
create: {
email: "[email protected]",
name: "Viola the Magnificent",
},
});
Untuk memodifikasi Number Fields of Record tambahkan kode berikut di dalam entrypoint di main function :
//UPDATE NUMBER FIELDS
const updatePosts = await prisma.post.updateMany({
data: {
views: {
increment: 1,
},
likes: {
increment: 1,
},
},
});
Untuk menghapus Single Record tambahkan kode berikut di dalam entrypoint di main function :
//DELETE SINGLE RECORD
const deleteUser = await prisma.user.delete({
where: {
email: "[email protected]",
},
});
console.dir(listUsers, { depth: null });
Untuk menghapus Multiple Record tambahkan kode berikut di dalam entrypoint di main function :
//DELETE MULTIPLE RECORD
const deleteUsers = await prisma.user.deleteMany({
where: {
email: {
contains: "prisma.io",
},
},
});
Untuk menghapus All Record tambahkan kode berikut di dalam entrypoint di main function :
//DELETE ALL RECORD
const deleteUsers = await prisma.user.deleteMany({});
CASCADING DELETE
const deletePosts = prisma.post.deleteMany({
where: {
authorId: 7,
},
});
const deleteUser = prisma.user.delete({
where: {
id: 7,
},
});
Untuk menghapus All Record tambahkan kode berikut di dalam entrypoint di main function :
//TRANSACTION
const transaction = await prisma.$transaction([deletePosts, deleteUser]);
Tambahkan script berikut pada package.json :
"prisma": {
"seed": "ts-node --transpile-only prisma/seed.ts"
},
Flag --transpile-only digunakan untuk mempercepat eksekusi dengan mengabaikan proses typechecking sehingga bisa mengurangi beban memory (RAM). Jalankan dengan perintah berikut :
$ npx prisma db seed
Perintah ini digunakan jika ingin melakukan uji coba manipulasi data, namun untuk proses seeding prisma menyediakan perintah satu lagi yaitu :
$ npx prisma migrate reset
Perintah ini akan melakukan penghapusan data dan otomatis mengeksekusi perintah seeding sekaligus. Jika kita ingin mencegah proses seeding saat mengeksekusi migrate dan reset tambahkan Flag :
--skip-seed
Buat directory project dengan nama sqlite-prisma kemudian di dalam directory eksekusi perintah di bawah ini :
$ npm init -y
Selanjutnya kita akan melakukan pemasangan module, terdapat dua mode pemasangan yaitu :
- devDependencies adalah module yang dibutuhkan saat melakukan development.
- dependencies adalah module yang dibutuhkan saat runtime.
Pertama kita akan melakukan instalasi typescript development tools :
$ npm install typescript ts-node @types/node --save-dev
Di bawah ini adalah penjelasan modules yang kita pasang :
- Module typescript digunakan agar kita memiliki TypeScript toolchains.
- Module ts-node digunakan agar kita bisa menjalankan typescript applications.
- Module @types/node digunakan agar Node.js yang kita pakai dapat menggunakan Type Definitions dalam Typescript.
Eksekusi perintah di bawah ini untuk memproduksi file konfigurasi TypeScript :
$ tsc --init
Selanjutnya ubah isi file konfigurasi dari tsconfig.json menjadi :
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
$ nano docker-compose.yml
isi dengan konfigurasi berikut :
version: '3.8'
services:
postgres:
image: postgres:13
restart: always
environment:
- POSTGRES_USER=africa
- POSTGRES_PASSWORD=village_people
volumes:
- postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
volumes:
postgres:
Launch docker :
$ docker-compose up -d
kemudian eksekusi :
$ docker ps
Selanjutnya install Prisma dengan cara mengeksekusi perintah di bawah ini :
$ npm install prisma --save-dev
Saat database server telah berjalan menggunakan docker selanjutnya adalah setup prisma dengan cara mengeksekusi perintah di bawah ini :
$ npx prisma init
Setelah mengeksekusi perintah di atas terdapat folder dengan nama prisma dan .env file yang akan kita gunakan untuk menentukan koneksi ke database.
Perintah di atas akan memberikan output :
✔ Your Prisma schema was created at prisma/schema.prisma
You can now open it in your favorite editor.
warn You already have a .gitignore file. Don't forget to add `.env` in it to not commit any private information.
Next steps:
1. Set the DATABASE_URL in the .env file to point to your existing database. If your database has no tables yet, read https://pris.ly/d/getting-started
2. Set the provider of the datasource block in schema.prisma to match your database: postgresql, mysql, sqlite, sqlserver, mongodb or cockroachdb.
3. Run prisma db pull to turn your database schema into a Prisma schema.
4. Run prisma generate to generate the Prisma Client. You can then start querying your database.
More information in our documentation:
https://pris.ly/d/getting-started
Isi dari .env file :
DATABASE_URL="file:./dev.db"
Pada folder prisma terdapat file dengan nama scheme.prisma yang dapat kita gunakan untuk melakukan data modelling :
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
Pada tahap ini kita akan menentukan data model dalam Prisma schema file, selanjutnya data model akan di mapping ke dalam database menggunakan Prisma Migrate. Proses mapping terjadi dengan cara mengeksekusi sekumpulan SQL Statements yang telah diproduksi secara otomatis untuk membuat sekumpulan tables sesuai dengan data model yang diberikan.
Jika anda telah menentukan data model eksekusi perintah di bawah ini untuk melakukan migration :
$ npx prisma migrate dev --name init
Prisma schema loaded from prisma\schema.prisma
Datasource "db": PostgreSQL database "mydb", schema "public" at "localhost:5432"
PostgreSQL database mydb created at localhost:5432
Applying migration `20220606035836_init`
The following migration(s) have been created and applied from new schema changes:
migrations/
└─ 20220606035836_init/
└─ migration.sql
Your database is now in sync with your schema.
✔ Generated Prisma Client (3.14.0 | library) to .\node_modules\@prisma\client in 63ms
Prisma Client untuk memproduksi tyfe-safe query builder yang digunakan untuk berinteraksi dengan database dari Node.js Applications dan TypeScript Applications.
$ npm install @prisma/client
Selanjuntnya buatlah directory bernama src dan di dalamnya buat file dengan nama index.ts, tulis kode di bawah ini :
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
// A `main` function so that you can use async/await
async function main() {
const allUsers = await prisma.user.findMany({
include: { posts: true },
});
// use `console.dir` to print nested objects
console.dir(allUsers, { depth: null });
}
main()
.catch((e) => {
throw e;
})
.finally(async () => {
await prisma.$disconnect();
});
Tambahkan command dev :
"scripts": {
"dev": "ts-node ./script.ts"
},
Setelah itu eksekusi perintah di bawah ini :
$ npx prisma studio
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Prisma Studio is up on http://localhost:5555
Selanjutnya anda bisa membuka browser dengan alamat localhost di port 5555.
Postman Interceptor adalah sebuah Chrome Extension yang menjadi jembatan untuk bisa terintegrasi dengan Postman Dekstop Apps. Dengan interceptor kita bisa mendapatkan network request dan cookies dari chrome browser yang kita gunakan.
Setelah interceptor berjalan di dalam chrome browser kita bisa melakukan debug session.
Install Postman Interceptor disini :
https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo?hl=en
Pada Postman Dekstop App footer klik Capture Request, kemudian install Interceptor Bridge.
Chapter 6 - Docker
-
-
- Amazon Lightsail
- Amazon Elastic Compute Cloud (EC2)
- Amazon Elastic Container Service (ECS)
-
- Amazon Simple Storage Service (S3)
- Amazon Glacier
- Amazon Elastic Block Store (EBS)
- Amazon Elastic File System (EFS)
-
-
-
- Linux Shell
- Windows Command Line
- Remote
-
- Install AWS CLI V2 on Linux
- Install AWS CLI V2 on MacOS
- Install AWS CLI V2 on Windows
-
- Install AWS CLI
- Upgrade AWS CLI
- Verify AWS CLI
-
-
-
- Set User Details
- AWS Access Type
- Set Permission
- Tags
- IAM User Credential
-
- Add Policy to Role
- AWS Lambda Role
- AWS Lambda Basic Execution Role
- AWS Xray Write Only Access
- Tag & Review
- Trust Relationships
-
-
-
- Handler
- Runtime
-
- Create Lambda Function
-
-
-
- HTTP API
- REST API
- WebSocket API
-
- API Developer
- App Developer
-
- Resources Management
- Method Execution Management
- Staging Management
- Models Management
- Throttling Management
- AWS CloudWatch Integration
- AWS X-Ray Integration
- AWS Cognito Integration
- AWS WAF Integration
- Export API
- Deployment History
- Documentation
- Dashboard Metrics
-
- Create REST API
- Create Resource
- Create Method
- Integration Request
- Test API
- Deploy API
- Export to Postman
-
-
-
- Data Management
- Scalability
- Data Heterogenity
- Eficiency
- Persistence
- Reliability
- Consistency
- Non-redundancy
-
- Aplikasi Penjualan (Sales)
- Aplikasi Accounting
- Aplikasi HR (Human Resources)
- Aplikasi Manufaktur
- Aplikasi e-Banking
- Aplikasi Keuangan
-
-
-
- Amazon Relational Database Service (RDS)
- Amazon Aurora
-
- Amazon DynamoDB
- Amazon DocumentDB
-
- Amazon Redshift
-
- Amazon ElastiCache
-
- Amazon TimeStream
-
- Amazon Quantum Ledger Database (QLDB)
-
- Amazon Neptune
-
- Amazon Database Migration Service (DMS)
-
-
- Consistency
- Availability
- Partition Tolerance
-
- Basic Availability
- Soft State
- Eventual Consistency
-
- Schemaless
- Scalable
-
Key-value Store
-
Column-oriented
-
Graph
-
Document Oriented
-
- Uniform Interface
- Client-Server Architecture
- Stateless
- Cacheable
- Layered System
- Code on demand