NoSQL
đ 8. NoSQL Databasesâ
79. What is NoSQL?â
NoSQL āĻšāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻāĻāĻāĻŋ āĻāϧā§āύāĻŋāĻ āĻĒāĻĻā§āϧāϤāĻŋ, āϝāĻž āĻĒā§āϰāĻĨāĻžāĻāϤ (traditional) āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ (RDBMS) āĻāϰ āĻŽāϤ⧠āĻĄā§āĻāĻžāĻā§ āĻā§āĻŦāĻŋāϞ, āϰ⧠(row), āĻāĻŦāĻ āĻāϞāĻžāĻŽā§āϰ āĻĢāĻŋāĻā§āϏāĻĄ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ⧠āϏā§āĻ āĻāϰ⧠āύāĻžāĨ¤ āĻāĻāĻŋ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻŦāĻŋāĻĒā§āϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻāύāϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āĻĄ (Unstructured) āĻŦāĻž āϏā§āĻŽāĻŋ-āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āĻĄ (Semi-structured) āĻĄā§āĻāĻž āĻā§āĻŦ āĻĻā§āϰā§āϤ āĻāĻŦāĻ āĻĢā§āϞā§āĻā§āϏāĻŋāĻŦāϞ āĻāĻĒāĻžāϝāĻŧā§ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
āϏāĻšāĻ āĻāĻĨāĻžāϝāĻŧ, āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻžāύā§āύ āύāĻž āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻžāϰ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻā§āĻŽāύ āĻšāĻŦā§, āĻ āĻĨāĻŦāĻž āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻžāϰ āĻāϞāĻŋāĻāĻŽ āĻāĻŽāύāĻāĻžāĻŦā§ āĻŦāĻžāĻĄāĻŧāĻā§ āϝāĻž āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϞ āϏāĻžāϰ⧠āĻāĻžāϰ⧠āϰāĻžāĻāĻž āϏāĻŽā§āĻāĻŦ āύāϝāĻŧ, āϤāĻāύ NoSQL āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
Technical definition: NoSQL (often interpreted as "Not Only SQL") is a broad class of non-relational database management systems that do not rely on rigid schemas (like traditional SQL databases) and are specifically designed to be distributed, highly scalable, and capable of handling massive volumes of structured, semi-structured, and unstructured data.
How does it differ from relational databases?â
NoSQL āĻāĻŦāĻ SQL āĻāϰ āĻŽāϧā§āϝ⧠āĻŦā§āĻļ āĻāĻŋāĻā§ āĻŽā§āϞāĻŋāĻ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āϰāϝāĻŧā§āĻā§:
| Feature | SQL Databases (RDBMS) | NoSQL Databases |
|---|---|---|
| Data Storage Model | āĻā§āĻŦāĻŋāϞ-āĻāĻŋāϤā§āϤāĻŋāĻ (Rows and Columns)āĨ¤ āĻĄā§āĻāĻž āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻŽāĻĄā§āϞ⧠āĻĨāĻžāĻā§āĨ¤ | Document, Key-Value, Graph, āĻŦāĻž Wide-column āϏā§āĻā§āϰā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ |
| Schema | Rigid/Fixed SchemaāĨ¤ āĻĄā§āĻāĻž āϏā§āĻ āĻāϰāĻžāϰ āĻāĻā§āĻ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻ āĻŋāĻ āĻāϰāϤ⧠āĻšā§ (Schema-on-write)āĨ¤ | Dynamic/Flexible SchemaāĨ¤ āϝā§āĻā§āύ⧠āϏāĻŽāϝāĻŧ āύāϤā§āύ āĻĢāĻŋāϞā§āĻĄ āϝā§āĻ āĻāϰāĻž āϝāĻžāϝāĻŧ (Schema-on-read)āĨ¤ |
| Scaling Strategy | Vertical Scaling (Scale-up) - āϏāĻžāϰā§āĻāĻžāϰā§āϰ RAM, CPU āĻŦāĻžāĻĄāĻŧāĻžāϤ⧠āĻšāϝāĻŧāĨ¤ | Horizontal Scaling (Scale-out) - āϏāϏā§āϤāĻž āĻ āύā§āĻāĻā§āϞ⧠āϏāĻžāϰā§āĻāĻžāϰ āϝā§āĻ āĻ āϰ⧠āĻā§āϝāĻžāĻĒāĻžāϏāĻŋāĻāĻŋ āĻŦāĻžāĻĄāĻŧāĻžāύ⧠āϝāĻžāϝāĻŧāĨ¤ |
| ACID vs BASE | ACID (Atomicity, Consistency, Isolation, Durability) āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻĻā§ā§āĨ¤ | BASE (Basically Available, Soft state, Eventual consistency) āĻŽāĻĄā§āϞ āĻŽā§āύ⧠āĻāϞā§āĨ¤ |
| Relationships/Joins | Foreign key āĻāĻŦāĻ Complex JOINs āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§āĨ¤ | āĻĄā§āĻāĻž āĻĄāĻŋāύāϰā§āĻŽāĻžāϞāĻžāĻāĻāĻĄ (Denormalized) āĻĨāĻžāĻā§, āϤāĻžāĻ āϏāĻžāϧāĻžāϰāĻŖāϤ JOIN āϏāĻžāĻĒā§āϰā§āĻ āĻāϰ⧠āύāĻž āĻŦāĻž āĻāϰāϞā§āĻ āĻā§āĻŦ āϏā§āĻŽāĻŋāϤāĨ¤ |
When should you choose NoSQL over SQL?â
āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻā§ NoSQL āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻž āĻāĻāĻŋāϤ āϝāĻāύ āύāĻŋāĻā§āϰ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāĻā§āϞ⧠āĻĻā§āĻāĻž āϝāĻžā§:
- ā§§. āĻŦāĻŋāĻļāĻžāϞ āĻĄā§āĻāĻž āĻāϞāĻŋāĻāĻŽ (Huge Data Growth): āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϝāĻĻāĻŋ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻā§āϰāĻžāĻŦāĻžāĻāĻ āϏā§āϤāϰā§āϰ āĻĄā§āĻāĻž āĻā§āύāĻžāϰā§āĻ āĻāϰ⧠(āϝā§āĻŽāύ: āϏā§āĻļā§āϝāĻžāϞ āĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž āĻĢāĻŋāĻĄ, āĻāĻāĻāĻāĻŋ āϏā§āύā§āϏāϰā§āϰ āĻĄā§āĻāĻž), āϤāĻŦā§ āĻāĻāĻŋ āĻšāϰāĻŋāĻāύā§āĻāĻžāϞ āϏā§āĻā§āϞāĻŋāĻāϝāĻŧā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏāĻšāĻā§ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
- ⧍. āϏā§āĻāĻŋāĻŽāĻžāϤ⧠āĻŦāĻžāϰāĻŦāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ (Frequent Schema Changes): āϝāĻāύ āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻžāϰ āĻā§āύ⧠āĻĢāĻŋāĻā§āϏāĻĄ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āύ⧠āĻ (Agile development)āĨ¤ āϝā§āĻŽāύ: āĻ-āĻāĻŽāĻžāϰā§āϏ⧠āĻāĻā§āĻ āĻĒā§āϰā§āĻĄāĻžāĻā§āĻā§āϰ āĻāĻā§āĻ āϰāĻāĻŽ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ (āĻā§āϝāĻžāĻŽā§āϰāĻžāϰ āϞā§āύā§āϏ āϏāĻžāĻāĻ, āĻāĻŋāύā§āϤ⧠āĻļāĻžāϰā§āĻā§āϰ āϏāĻžāĻāĻ) āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
- ā§Š. āĻāĻā§āĻ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻ āϏā§āĻĒāĻŋāĻĄ (High Performance): āǰāĻŋāϝāĻŧā§āϞ-āĻāĻžāĻāĻŽ āĻā§āĻŽāĻŋāĻ, āϞāĻžāĻāĻ āĻā§āϝāĻžāĻ, āĻŦāĻž āϰāĻŋāϝāĻŧā§āϞ-āĻāĻžāĻāĻŽ āĻāύāĻžāϞāĻžāĻāĻāĻŋāĻā§āϏ āϝā§āĻāĻžāύ⧠āĻĢā§āϰā§āϝāĻžāĻāĻļāύ-āĻ āĻĢ-āϏā§āĻā§āύā§āĻĄā§ āϰāĻŋāĻĄ/āϰāĻžāĻāĻ āϰā§āϏāĻĒāύā§āϏ āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤
- ā§Ē. āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ (Distributed Architecture): āϝāĻāύ āĻāĻĒāύāĻžāϰ āϏāĻŋāϏā§āĻā§āĻŽāĻā§ āĻŦāĻŋāĻļā§āĻŦā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻĒā§āϰāĻžāύā§āϤā§āϰ āĻĄā§āĻāĻž āϏā§āύā§āĻāĻžāϰ⧠āĻĄā§āĻāĻž āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻāϰāϤ⧠āĻšāϝāĻŧ āĻāĻŦāĻ āϏāĻŋāĻā§āĻā§āϞ āĻĒāϝāĻŧā§āύā§āĻ āĻ āĻĢ āĻĢā§āĻāϞāĻŋāϝāĻŧāϰ (Single Point of Failure) āĻā§āĻžāϤ⧠āĻšāϝāĻŧāĨ¤
80. Types of NoSQL databases?â
NoSQL āĻā§āύ⧠āĻāĻāĻ āĻĒā§āϰāϝā§āĻā§āϤāĻŋāϰ āύāĻžāĻŽ āύāϝāĻŧ; āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāϤāĻž-āĻĒāϰāĻŋāĻāĻžāώāĻž (Umbrella term)āĨ¤ āĻĄā§āĻāĻž āϏā§āĻā§āϰ āĻāϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§ āĻĒā§āϰāϧāĻžāύāϤ ā§ĒāĻāĻŋ āĻļā§āϰā§āĻŖāĻŋāϤ⧠āĻāĻžāĻ āĻāϰāĻž āϝāĻžā§āĨ¤
Give examples of each type (document, key-value, column-family, graph)?â
ā§§. Document-oriented Databaseâ
āĻāĻāĻžāύ⧠āĻĄā§āĻāĻžāĻā§ JSON, BSON āĻŦāĻž XML āĻĢāϰāĻŽā§āĻā§ "āĻĄāĻā§āĻŽā§āύā§āĻ" āĻšāĻŋāϏā§āĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĄāĻā§āĻŽā§āύā§āĻ āϏā§āĻŦāϝāĻŧāĻāϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāĻŦāĻ āĻāĻĻā§āϰ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āύāĻŋāĻā§āĻĻā§āϰ āĻŽāϤ⧠āĻāϞāĻžāĻĻāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
- āĻāĻĻāĻžāĻšāϰāĻŖ: MongoDB, CouchDB, Amazon DocumentDB.
⧍. Key-Value Storeâ
āĻāĻāĻŋ āϏāĻŦāĻā§āϝāĻŧā§ āϏāϰāϞ NoSQL āĻŽāĻĄā§āϞāĨ¤ āĻāĻāĻžāύ⧠āĻĄā§āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻĄāĻŋāĻāĻļāύāĻžāϰāĻŋāϰ (Dictionary) āĻŽāϤ⧠āϰāĻžāĻāĻž āĻšāϝāĻŧ, āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻ Key āĻāϰ āĻŦāĻŋāĻĒāϰā§āϤ⧠āĻāĻāĻāĻŋ Value āĻĨāĻžāĻā§āĨ¤ āĻā§āϝāĻžāϞā§āĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āĻā§āϏāĻ āĻĨā§āĻā§ āĻļā§āϰ⧠āĻāϰ⧠āĻāĻāĻāĻŋ āĻāϏā§āϤ āĻ
āĻŦāĻā§āĻā§āĻ āĻŦāĻž JSON āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
- āĻāĻĻāĻžāĻšāϰāĻŖ: Redis, Amazon DynamoDB, Memcached, Riak.
ā§Š. Column-family Store (Wide-column)â
āĻāĻāĻŋ āĻĄā§āĻāĻžāĻā§ āϏāĻžāϰāĻŋ (Row) āĻāϰ āĻŦāĻĻāϞ⧠āĻāϞāĻžāĻŽ (Column) āĻšāĻŋāϏā§āĻŦā§ āĻā§āϰā§āĻĒ āĻāϰ⧠āϰāĻžāĻā§āĨ¤ āĻāĻāĻŋ āĻŦāĻŋāĻļāĻžāϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻĄā§āĻāĻžāϰ āĻāĻĒāϰ āĻĻā§āϰā§āϤ āϰāĻžāĻāĻ (Write) āĻ āĻĒāĻžāϰā§āĻļāύ āĻāϰāϤ⧠āĻā§āĻŦ āĻĒāĻžāϰāĻĻāϰā§āĻļā§āĨ¤
- āĻāĻĻāĻžāĻšāϰāĻŖ: Apache Cassandra, HBase, ScyllaDB.
ā§Ē. Graph Databaseâ
āĻā§āϰāĻžāĻĢ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄā§āĻāĻžāϰ āĻā§āϝāĻŧā§āĻ āĻĄā§āĻāĻžāϰ āĻŽāϧā§āϝāĻāĻžāϰ āϏāĻŽā§āĻĒāϰā§āĻ (Relationship) āĻāϰ āĻāĻĒāϰ āĻŦā§āĻļāĻŋ āĻā§āϰ āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻžāύ⧠āĻĄā§āĻāĻžāĻā§ "Node" āĻāĻŦāĻ āϏāĻŽā§āĻĒāϰā§āĻāĻā§ "Edge" āĻšāĻŋāϏā§āĻŦā§ āĻĒā§āϰāĻāĻžāĻļ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- āĻāĻĻāĻžāĻšāϰāĻŖ: Neo4j, Amazon Neptune, ArangoDB.
Which type fits which use case?â
āĻā§āύ āĻĒā§āϰāĻā§āĻā§āĻā§ āĻā§āύ āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ āϤāĻž āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āĻāĻāĻ āĻā§āϏā§āϰ āĻāĻĒāϰ:
| Database Type | Perfect For (Use Cases) | Real-world Example |
|---|---|---|
| Document | Content Management Systems (CMS), E-commerce Catalogs, User Profiles, Blogging platforms | āĻĒā§āϰā§āĻĢāĻžāĻāϞ āĻĄāĻžāĻāĻž āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻžāϰā§āϰ āϏā§āĻļā§āϝāĻžāϞ āϞāĻŋāĻāĻ, āĻāĻĄā§āϰā§āϏ āϏāĻŦ āĻāĻ āĻāĻžā§āĻāĻžā§ JSON āĻĢāϰā§āĻŽā§āĻā§āϰ āĻŽāϤ⧠āϰāĻžāĻāϤ⧠āĻšā§āĨ¤ |
| Key-Value | Session Management, User Preferences, Shopping Carts, In-memory Caching | āĻāĻāĻāĻžāϰ āϞāĻāĻāύ āĻāϰāĻžāϰ āĻĒāϰ āϏā§āĻļāύ āĻāĻāĻĄāĻŋ āĻĻāĻŋā§ā§ āĻĻā§āϰā§āϤ āϤāĻžāϰ āĻĄāĻŋāĻā§āϞāϏ āĻāύāĻž (āĻā§āϝāĻžāĻļāĻŋāĻ)āĨ¤ |
| Column-family | Time-series data, Event logs, IoT Sensor Data, Fraud detection | āĻāĻāĻāĻŋ āĻāϝāĻŧā§āĻŦāϏāĻžāĻāĻā§āϰ āϞāĻžāĻ āϞāĻžāĻ āĻāĻāĻāĻžāϰā§āϰ āĻā§āϞāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽ (Click-stream) āĻšāĻŋāϏā§āĻā§āϰāĻŋ āĻāĻāϏāĻžāĻĨā§ āĻāĻŽāĻŋā§ā§ āϰāĻžāĻāĻžāĨ¤ |
| Graph | Social Networks (Friends connection), Recommendation Engines, Fraud Rings | "āĻā§ āĻāĻžāĻā§ āĻā§āύā§" āĻŦāĻž "āϝāĻŋāύāĻŋ āĻāĻ āϞā§āϝāĻžāĻĒāĻāĻĒ āĻāĻŋāύā§āĻā§āύ, āϤāĻŋāύāĻŋ āĻāϰ āĻāĻŋ āĻāĻŋ āĻŽāĻžāĻāϏ āĻāĻŋāύā§āĻā§āύ"âāĻ āϧāϰāύā§āϰ āĻĄāĻŋāĻĒ āϰāĻŋāϞā§āĻļāύ āĻŦā§āϰ āĻāϰāĻžāĨ¤ |
81. What is a key-value store?â
Key-value store āĻšāϞ⧠NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āϏāϰāϞ āĻāĻŦāĻ āĻĢāĻžāϏā§āĻā§āϏā§āĻ āĻāĻžāĻāĻĒāĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļāĻžāϞ āĻšā§āϝāĻžāĻļ āĻā§āĻŦāĻŋāϞ (Hash Table) āĻŦāĻž āĻĄāĻŋāĻāĻļāύāĻžāϰāĻŋ (Dictionary) āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻ Key (āϝā§āĻŽāύ āĻāĻāĻĄāĻŋ āĻŦāĻž āύāĻžāĻŽ) āĻāĻŦāĻ āϤāĻžāϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻāĻāĻāĻŋ Value āĻĻāĻŋāϝāĻŧā§ āĻāĻ āĻŋāϤ āĻšāϝāĻŧāĨ¤
āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύā§āϰ āĻāĻžāĻā§ 'Value' āĻ āĻāĻļāĻāĻŋ āĻāĻāĻāĻŋ āĻŦā§āϞā§āϝāĻžāĻ-āĻŦāĻā§āϏ (Black Box)āĨ¤ āĻāĻā§āĻāĻŋāύ āĻļā§āϧ⧠'Key' āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĄā§āĻāĻž āϤā§āϞ⧠āĻāύā§, 'Value' āĻāϰ āĻā§āϤāϰā§āϰ āĻĄā§āĻāĻž āύāĻŋāϝāĻŧā§ āϏ⧠āĻā§āύ⧠āĻĢāĻŋāϞā§āĻāĻžāϰāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤
Technical definition: A Key-Value store is a simple database model designed for storing, retrieving, and managing associative arrays where each record is securely identified by a unique key. It optimizes specifically for highly concurrent and extremely fast read/write operations by retrieving data directly via primary keys.
Examples like Redis, DynamoDB?â
-
Redis (Remote Dictionary Server): āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ āϤā§āϝāύā§āϤ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āĻāύ-āĻŽā§āĻŽāϰāĻŋ (In-memory) āĻā§-āĻā§āϝāĻžāϞ⧠āϏā§āĻā§āϰāĨ¤ āĻŽā§āĻŽāϰāĻŋāϤ⧠āĻĄā§āĻāĻž āϰāĻžāĻāĻžāϰ āĻāĻžāϰāĻŖā§ āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻā§āĻŖāĻāϤāĻāĻžāĻŦā§ āĻ āύā§āĻ āĻĢāĻžāϏā§āĻ (āĻŽāĻŋāϞāĻŋāϏā§āĻā§āύā§āĻĄā§āϰ āĻā§āϝāĻŧā§āĻ āĻāĻŽ āϏāĻŽāϝāĻŧā§ āϰā§āϏāĻĒāύā§āϏ āĻĻā§āϝāĻŧ)āĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ Caching, Session store, āĻāĻŦāĻ Rate limiting āĻāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
-
Amazon DynamoDB: āĻāĻāĻŋ AWS āĻāϰ āĻāĻāĻāĻŋ āĻĢā§āϞā§āϞāĻŋ-āĻŽā§āϝāĻžāύā§āĻāĻĄ (Fully managed) āϏāĻžāϰā§āĻāĻžāϰāϞā§āϏ āĻĄāĻžāĻāĻžāĻŦā§āϏāĨ¤ āϝāĻĻāĻŋāĻ āĻāĻāĻŋ āĻĄāĻā§āĻŽā§āύā§āĻā§āϰ āĻŽāϤ⧠āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāϰ āĻā§āϰ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ āĻāĻāĻāĻŋ āĻšāĻžāĻāĻĒāĻžāϏ-āϏā§āĻā§āϞāĻĄ āĻā§-āĻā§āϝāĻžāϞ⧠āϏā§āĻā§āϰāĨ¤ āĻā§āĻŽāĻŋāĻ āϞā§āĻĄāĻžāϰāĻŦā§āϰā§āĻĄ āĻŦāĻž āĻļāĻĒāĻŋāĻ āĻāĻžāϰā§āĻā§āϰ āĻŽāϤ⧠āĻšāĻžāĻ-āĻā§āϰāĻžāĻĢāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻāĻāĻŋ āĻĻāĻžāϰā§āĻŖ āĻāĻžāĻ āĻāϰā§āĨ¤
What are the limitations?â
āĻā§-āĻā§āϝāĻžāϞ⧠āϏā§āĻā§āϰā§āϰ āĻŦā§āĻļ āĻāĻŋāĻā§ āĻŦāĻĄāĻŧ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻāĻā§:
ā§§. Complex Queries āĻāϰāĻž āϝāĻžāϝāĻŧ āύāĻž: āĻāĻĒāύāĻŋ āĻļā§āϧ⧠Key āĻĻāĻŋāϝāĻŧā§ āĻĄā§āĻāĻž āĻā§āĻāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦāϞā§āύ, "āĻāĻāϏāĻŦ āĻāĻāĻāĻžāϰāĻĻā§āϰ āĻĻāĻžāĻ āϝāĻžāĻĻā§āϰ āĻŦā§āϏ ⧍ā§Ģ āĻāϰ āĻŦā§āĻļāĻŋ"âāĻā§-āĻā§āϝāĻžāϞ⧠āϏā§āĻā§āϰ āϤāĻž āĻĒāĻžāϰāĻŦā§ āύāĻž, āĻāĻžāϰāĻŖ āϏ⧠āĻā§āϝāĻžāϞā§āϰ āĻā§āϤāϰā§āϰ āĻ āĻāĻļ āĻĒā§ā§ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤
⧍. No Relationships (No Joins): āĻĻā§āĻāĻŋ āĻāĻŋāύā§āύ āĻĄā§āĻāĻžāϰ āĻŽāϧā§āϝ⧠āĻā§āύ⧠āĻĢāϰā§āύ-āĻā§ (Foreign Key) āĻŦāĻž āϰāĻŋāϞā§āĻļāύāĻļāĻŋāĻĒ āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāĻž āϝāĻžāϝāĻŧāĻŦāĻŋāϧāĻž āύā§āĻāĨ¤ āĻāϝāĻŧā§āύāĻŋāĻ āĻāϰ āĻāĻžāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§āĻā§āϞ⧠(Backend code) āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤
ā§Š. Partial Updates āĻāĻ āĻŋāύ: āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒā§āϰ⧠āĻā§āϝāĻžāϞā§āĻāĻžāĻā§ āĻŽā§āĻŽāϰāĻŋāϤ⧠āĻāύ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āĻāĻŦāĻžāϰ āĻĒā§āϰā§āĻāĻžāĻā§ āϰāĻŋāĻĒā§āϞā§āϏ āĻāϰāϤ⧠āĻšāϝāĻŧ (Update the whole object)āĨ¤ āϝāĻĻāĻŋāĻ Redis-āĻāϰ āĻŽāϤ⧠āĻāĻŋāĻā§ āϏā§āĻā§āϰ āĻĒāĻžāϰā§āĻļāĻŋāϝāĻŧāĻžāϞ āĻāĻĒāĻĄā§āĻ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āϰāĻŋāϞāĻžāĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽāϤ⧠āϏāĻšāĻ āύāϝāĻŧāĨ¤
82. What is a document database?â
Document database āĻšāϞ⧠āĻāĻŽāύ āĻāĻ āϧāϰāĻŖā§āϰ NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏ, āϝāĻž āĻĄā§āĻāĻžāĻā§ āĻā§āĻŦāĻŋāϞā§āϰ āĻŦāĻĻāϞ⧠JSON (āĻŦāĻž BSON/XML) āĻāϰ āĻŽāϤ⧠"āĻĄāĻā§āĻŽā§āύā§āĻ" āĻāĻāĻžāϰ⧠āϏā§āĻ āĻāϰā§āĨ¤ āĻāĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĄāĻā§āĻŽā§āύā§āĻ āĻāĻāĻāĻŋ āϏā§āĻŦāϝāĻŧāĻāϏāĻŽā§āĻĒā§āϰā§āĻŖ āϰā§āĻāϰā§āĻĄ āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāĻ āĻāϰā§, āϝāĻžāϰ āĻā§āϤāϰ⧠āĻ āύā§āϝāĻžāύā§āϝ āϏāĻžāĻŦ-āĻĄāĻā§āĻŽā§āύā§āĻ āĻŦāĻž āĻ ā§āϝāĻžāϰ⧠(Array) āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϏāĻšāĻ āĻāĻĨāĻžāϝāĻŧ, āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻā§āĻĄā§ (āϝā§āĻŽāύ JavaScript āĻ Object āĻŦāĻž Python āĻ Dictionary) āĻĄā§āĻāĻž āϝā§āĻāĻžāĻŦā§ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻž āĻšāϝāĻŧ, āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻ āĻŦāĻŋāĻāϞ āϏā§āĻāĻžāĻŦā§āĻ āĻĄā§āĻāĻž āϏā§āĻ āĻšāϝāĻŧāĨ¤
Technical definition: A document-oriented database is a computer program and data storage system designed for storing, retrieving, and managing document-oriented information directly aligning with object-oriented programming methodologies, typically using JSON-like formats.
Why is MongoDB considered schema-less?â
MongoDB āĻā§ schema-less (āϞā§āĻāϞāĻŋ "Dynamic Schema") āĻŦāϞāĻž āĻšāϝāĻŧ āĻāĻžāϰāĻŖ, RDBMS āĻāϰ āĻŽāϤ⧠āĻĄā§āĻāĻž āĻĸā§āĻāĻžāύā§āϰ āĻāĻā§ āĻāĻĒāύāĻžāĻā§ āĻā§āύ⧠āĻā§āĻŦāĻŋāϞ āĻĄāĻŋāĻāĻžāĻāύ āĻŦāĻž āĻāϞāĻžāĻŽ āĻĄāĻŋāĻā§āϞā§āϝāĻŧāĻžāϰ āĻāϰāϤ⧠āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāĻāĻ "Collection" (āϝāĻž āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŽāϤā§āϞā§āϝ) āĻāϰ āĻŽāϧā§āϝ⧠āĻĨāĻžāĻāĻž āĻāĻŋāύā§āύ āĻāĻŋāύā§āύ āĻĄāĻā§āĻŽā§āύā§āĻā§āϰ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāϞāĻžāĻĻāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ:
āϧāϰāĻž āϝāĻžāĻ āĻāĻāĻāĻŋ users āĻāĻžāϞā§āĻāĻļāύ⧠āĻāĻĒāύāĻŋ āύāĻŋāĻā§āϰ āĻĻā§āĻāĻŋ āĻāĻŋāύā§āύ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āϰ āĻĄāĻā§āĻŽā§āύā§āĻ āϰāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āĻā§āύ⧠āĻāϰāϰ āĻāĻžāĻĄāĻŧāĻžāĻ:
// User 1 (Minimal data)
{
"_id": ObjectId("64a1b2c3d4..."),
"name": "āĻāϰāĻŋāĻŽ",
"email": "karim@email.com"
}
// User 2 (Complex data in the same collection)
{
"_id": ObjectId("64a1b2c3d5..."),
"name": "āϰāĻšāĻŋāĻŽ",
"phone": "017XXXXXXX",
"blood_group": "O+",
"address": {
"city": "Dhaka",
"zip": "1000"
},
"hobbies": ["Cricket", "Reading"]
}
āĻāĻāĻžāύ⧠āĻĒā§āϰāĻĨāĻŽ āĻĄāĻā§āĻŽā§āύā§āĻā§ āĻāĻĄā§āϰā§āϏ āĻŦāĻž āĻšāĻŦāĻŋ āύā§āĻ, āĻāĻŦāĻ āĻāϰ āĻāύā§āϝ āĻā§āύ⧠NULL āĻāϞāĻžāĻŽāĻ āϤā§āϰāĻŋ āĻšāϝāĻŧāύāĻŋāĨ¤ āϝāĻāύ āϝā§āĻāĻžāĻŦā§ āĻā§āĻļāĻŋ āύāϤā§āύ āĻĢāĻŋāϞā§āĻĄ āĻāĻĄ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
How do you handle relationships in document stores?â
āĻĄāĻā§āĻŽā§āύā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāϝāĻŧā§āύ (JOIN) āĻāϰāĻž āĻā§āĻŦ āĻāĻā§āϏāĻĒā§āύā§āϏāĻŋāĻ āĻŦāĻž āϏāĻŦ āϏāĻŽāϝāĻŧ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰ⧠āύāĻžāĨ¤ āϤāĻžāĻ āϰāĻŋāϞā§āĻļāύāĻļāĻŋāĻĒ āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāϤ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĻā§āĻāĻŋ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻĢāϞ⧠āĻāϰāĻž āĻšāϝāĻŧ:
ā§§. Embedding (Denormalization - "One-to-Few"):â
āϝāĻāύ āĻāĻāĻāĻŋ āĻāύā§āĻāĻŋāĻāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻĄā§āĻāĻž āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ āύāĻž, āϤāĻāύ āϰāĻŋāϞā§āĻā§āĻĄ āĻĄā§āĻāĻžāĻā§ āĻŽā§āϞ āĻĄāĻā§āĻŽā§āύā§āĻā§āϰ āĻā§āϤāϰā§āĻ (Embedded array āĻŦāĻž sub-document āĻšāĻŋāϏā§āĻŦā§) āĻĸā§āĻāĻŋāϝāĻŧā§ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤
- āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻŦā§āϞāĻā§āϰ āĻĒā§āϏā§āĻ āĻāĻŦāĻ āϤāĻžāϰ ā§§ā§Ļ-⧍ā§ĻāĻāĻŋ āĻāĻŽā§āύā§āĻāĨ¤
{
"_id": 101,
"title": "NoSQL Guide",
"content": "Deep dive into NoSQL...",
"comments": [
{"user": "āĻāϞā§", "text": "āĻā§āĻŦ āϏā§āύā§āĻĻāϰ āĻĒā§āϏā§āĻ!"},
{"user": "āϰāĻžāύāĻž", "text": "āϧāύā§āϝāĻŦāĻžāĻĻāĨ¤"}
]
}
- āϏā§āĻŦāĻŋāϧāĻž: āĻāĻāĻāĻŋāĻŽāĻžāϤā§āϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϝāĻŧā§āϰāĻŋāϤā§āĻ āĻĒā§āϏā§āĻ āĻāĻŦāĻ āĻāĻŽā§āύā§āĻ āϏāĻŦ āĻāĻāϏāĻžāĻĨā§ āϞā§āĻĄ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ (āĻĻā§āϰā§āϤ Read)āĨ¤
⧍. Referencing (Normalization - "One-to-Many" or "Many-to-Many"):â
āϝāĻāύ āϰāĻŋāϞā§āĻā§āĻĄ āĻĄā§āĻāĻž āĻ
āύā§āĻ āĻŦāĻĄāĻŧ āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻŦāĻž āĻŦāĻž āϰāĻŦāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšāϝāĻŧ, āϤāĻāύ āĻĄā§āĻāĻžāĻā§ āĻāϞāĻžāĻĻāĻž āĻāĻžāϞā§āĻāĻļāύ⧠āϰāĻžāĻāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϤāĻžāϰ _id (āϰā§āĻĢāĻžāϰā§āύā§āϏ) āϏā§āĻ āĻāϰ⧠āϰāĻžāĻāĻž āĻšāϝāĻŧ (Foreign Key āĻāϰ āĻŽāϤā§)āĨ¤
- āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻļāĻžāϰ āĻāĻŦāĻ āϤāĻžāϰ āĻšāĻžāĻāĻžāϰ āĻšāĻžāĻāĻžāϰ āĻŦāĻāĨ¤
// Publisher Document
{
"_id": "pub_1",
"name": "Tech Books BD"
}
// Books Document
{
"_id": "book_1",
"title": "Learn MongoDB",
"publisher_id": "pub_1" // Reference
}
- āϏā§āĻŦāĻŋāϧāĻž: āĻĄā§āĻāĻž āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āĻšāϝāĻŧ āύāĻž āĻāĻŦāĻ āϞāĻžāϰā§āĻ āϏā§āĻā§āϞ āĻĄā§āĻāĻž āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻž āϏāĻšāĻ āĻšāϝāĻŧāĨ¤ (MongoDB āϤ⧠āĻāĻā§āϞ⧠āĻā§ā§āĻž āϞāĻžāĻāĻžāύā§āϰ āĻāύā§āϝ
$lookupāĻāĻā§āϰāĻŋāĻā§āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§)āĨ¤
83. What is a column-family database?â
Column-family database āĻā§āϞ⧠āĻĄā§āĻāĻžāĻā§ āϏāĻžāϰāĻŋ (Row) āĻāϰ āĻŦāĻĻāϞ⧠āĻāϞāĻžāĻŽ (Column) āĻšāĻŋāϏā§āĻŦā§ āϏā§āĻā§āϰ āĻāϰā§āĨ¤ āĻāĻāĻžāύ⧠āĻāϞāĻžāĻŽāĻā§āϞā§āĻā§ "Column Families" āύāĻžāĻŽāĻ āĻā§āϰā§āĻĒā§ āĻāĻžāĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻāĻŋ āĻāĻŽāύāĻāĻžāĻŦā§ āĻĄāĻŋāĻāĻžāĻ āύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āϝā§āύ āĻāĻāĻ āϧāϰāύā§āϰ āĻĄā§āĻāĻž āĻĢāĻŋāĻāĻŋāĻā§āϝāĻžāϞāĻŋ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§āϰ āĻāĻāĻ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻĨāĻžāĻā§, āϝāĻž āĻŦāĻŋāĻļāĻžāϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻĄā§āĻāĻžāϰ āĻāĻĒāϰ āĻ āϤā§āϝāύā§āϤ āĻĻā§āϰā§āϤ āϰāĻŋāĻĄāĻŋāĻ āĻāĻŦāĻ āϰāĻžāĻāĻāĻŋāĻ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āĨ¤
Technical definition: A wide-column store (or column-family database) is a two-dimensional key-value store where rows and columns form the keys, and the resulting multi-dimensional map is partitioned across multiple nodes for extreme scalability and write-throughput.
How is Cassandra different from traditional RDBMS?â
Apache Cassandra āĻāĻāĻāĻŋ āĻŦāĻŋāĻā§āϝāĻžāϤ āĻāϞāĻžāĻŽ āĻĢā§āϝāĻžāĻŽāĻŋāϞāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏāĨ¤ RDBMS āĻāϰ āϏāĻžāĻĨā§ āĻāϰ āĻŦāĻŋāĻļāĻžāϞ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āϰāϝāĻŧā§āĻā§:
| Feature | Traditional RDBMS (e.g., MySQL) | Apache Cassandra |
|---|---|---|
| Architecture | Master-Slave (āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻŽā§āϞ, āĻŦāĻžāĻāĻŋāĻā§āϞ⧠āĻāĻĒāĻŋ)āĨ¤ | Peer-to-Peer (āϏāĻŦ āύā§āĻĄ āϏāĻŽāĻžāύ)āĨ¤ āĻā§āύ⧠Single Point of Failure āύā§āĻāĨ¤ āĻŽāĻžāϏā§āĻāĻžāϰ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāĻžāϰ āĻāϝāĻŧ āύā§āĻāĨ¤ |
| Storage Engine | B-Tree (āĻāĻžāϞ⧠Read āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāϰ āĻāύā§āϝ)āĨ¤ | LSM-Tree (Log-Structured Merge-Tree)āĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ āĻŦāĻŋāĻļāĻžāϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ Write āĻ āĻĒāĻžāϰ ā§āĻļāύā§āϰ āĻāύā§āϝ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻĄāĨ¤ |
| Scaling | Vertical (RAM/CPU āĻŦāĻžā§āĻžāĻ), Horizontal āϏā§āĻā§āϞāĻŋāĻ āĻāĻ āĻŋāύāĨ¤ | Linear Horizontal ScalingāĨ¤ āϝāϤāĻā§āϞ⧠āύāϤā§āύ āύā§āĻĄ/āϏāĻžāϰā§āĻāĻžāϰ āϝā§āĻ āĻāϰāĻŦā§āύ, āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āϤāϤ āĻā§āĻŖ āĻŦāĻžāĻĄāĻŧāĻŦā§āĨ¤ |
| Querying | Complex JOIN, GROUP BY, ORDER BY āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§āĨ¤ | No JoinsāĨ¤ āĻā§āϝāĻŧā§āϰāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ Partition Key āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻšāϝāĻŧāĨ¤ |
| Flexibility | Rigid SchemaāĨ¤ āϏāĻŦ āϰā§-āϤ⧠āϏāĻŽāĻžāύ āĻāϞāĻžāĻŽ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤ | FlexibleāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϰā§-āϤ⧠āĻāϞāĻžāĻĻāĻž āϏāĻāĻā§āϝāĻ āĻāϞāĻžāĻŽ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ |
What is wide column store?â
āĻāĻāĻāĻŋ Wide column store āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻŋāϞ āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϰ⧠(Row) āĻāϰ āĻāύā§āĻĄāĻžāϰ⧠āĻāϝāĻŧā§āĻ āĻĄāĻāύ āĻĨā§āĻā§ āĻļā§āϰ⧠āĻāϰ⧠āĻāϝāĻŧā§āĻ āĻŽāĻŋāϞāĻŋāϝāĻŧāύ (Million) āĻĒāϰā§āϝāύā§āϤ āĻĄāĻžāĻāύāĻžāĻŽāĻŋāĻ āĻāϞāĻžāĻŽ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϏāĻžāϧāĻžāϰāĻŖ āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ ā§§ā§Ļā§Ļā§ĻāĻāĻŋ āĻāϞāĻžāĻŽ āĻŦāĻžāύāĻžāύ āĻāĻŦāĻ āĻ āύā§āĻ āϰ⧠āϤ⧠āϏā§āĻā§āϞ⧠āĻĢāĻžāĻāĻāĻž (NULL) āĻĨāĻžāĻā§, āϤāĻŦā§ āϤāĻž āĻĒā§āϰāĻā§āϰ āϏā§āĻ ā§āϰā§āĻ āϏā§āĻĒā§āϏ āύāώā§āĻ āĻāϰā§āĨ¤ āĻāĻŋāύā§āϤ⧠Wide Column Store āĻ, āϝ⧠āĻāϞāĻžāĻŽā§ āĻĄā§āĻāĻž āύā§āĻ, āϤāĻžāϰ āĻā§āύ⧠āĻ āϏā§āϤāĻŋāϤā§āĻŦāĻ āύā§āĻ (Sparse Data)āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻāĻā§āύā§āĻ āĻā§āϰā§āϝāĻžāĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§ "āĻāĻāĻāĻžāϰ ā§§" āĻāϰ āϰā§-āϤ⧠āĻāĻāĻā§āϰ āĻĄā§āĻā§ ā§§ā§Ļā§ĻāĻāĻŋ āĻĒā§āĻāĻāĻŋāĻāĻŋāĻ āĻāϞāĻžāĻŽ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§, āĻāĻŦāĻžāϰ "āĻāĻāĻāĻžāϰ ⧍" āĻāϰ āϰā§-āϤ⧠āĻŽāĻžāϤā§āϰ ⧍āĻāĻŋ āĻāϞāĻžāĻŽ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ Cassandra āĻŦāĻž HBase āĻāĻā§āϞā§āĻā§ āĻ āϤā§āϝāύā§āϤ āύāĻŋāĻā§āĻāϤāĻāĻžāĻŦā§ āĻāĻŦāĻ āĻāĻŽ āϏā§āĻĒā§āϏ⧠āĻŽā§āϝāĻžāύā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
84. What is a graph database?â
Graph Database āĻšāϞ⧠āĻāĻŽāύ āĻāĻ āĻŦāĻŋāĻļā§āώ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϝāĻž āĻĄā§āĻāĻžāϰ āĻā§āϝāĻŧā§āĻ āĻĄā§āĻāĻžāϰ āĻā§āϤāϰā§āϰ āϏāĻŽā§āĻĒāϰā§āĻ (Relationships) āĻāϰ āĻāĻĒāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦā§āĻļāĻŋ āĻā§āϰ āĻĻā§āϝāĻŧāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϝā§āĻāĻžāύ⧠āĻĢāϰā§āύ-āĻāĻŋ āĻāĻŦāĻ āĻāϝāĻŧā§āύ (Join) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻŽā§āĻĒāϰā§āĻ āĻā§āĻāĻā§, āĻā§āϰāĻžāĻĢ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻāĻžāύ⧠āϏāĻŽā§āĻĒāϰā§āĻāĻā§āϞā§āĻā§ āĻĢāĻžāϰā§āϏā§āĻ-āĻā§āϞāĻžāϏ āϏāĻŋāĻāĻŋāĻā§āύ (First-class citizen) āĻšāĻŋāϏā§āĻŦā§ āĻĢāĻŋāĻāĻŋāĻā§āϝāĻžāϞāĻŋ āϏā§āĻ āĻāϰ⧠āϰāĻžāĻā§āĨ¤
āĻāĻāĻŋ āĻĄā§āĻāĻžāĻā§ āύā§āĻĄ (Nodes - āϝā§āĻŽāύ: āĻāĻāĻāύ āĻŽāĻžāύā§āώ āĻŦ āĻž āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻĄāĻžāĻā§āĻ) āĻāĻŦāĻ āϏā§āĻ āύā§āĻĄāĻā§āϞā§āϰ āĻŽāϧā§āϝāĻāĻžāϰ āϏāĻŽā§āĻĒāϰā§āĻāĻā§ āĻāĻ (Edges - āϝā§āĻŽāύ: "āĻŦāύā§āϧā§āϤā§āĻŦ" āĻŦāĻž "āĻāĻŋāύā§āĻā§") āĻšāĻŋāϏā§āĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āĨ¤
Technical definition: A graph database is a type of NoSQL database that utilizes graph mathematical structures equipped with nodes, edges, and properties to represent and store highly interconnected data. It heavily optimizes relationship traversals (graph hops) without expensive index lookups or table joins.
Examples like Neo4j, Amazon Neptune?â
- Neo4j: āĻāĻāĻŋ āĻŦāϰā§āϤāĻŽāĻžāύ āĻŦāĻŋāĻļā§āĻŦā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āĻāĻŦāĻ āĻŦāĻšā§āϞ āĻŦā§āϝāĻŦāĻšā§āϤ āĻā§āϰāĻžāĻĢ āĻĄāĻžāĻāĻžāĻŦā§āϏāĨ¤ āĻāϤ⧠āĻĄā§āĻāĻž āĻā§āϝāĻŧāĻžāϰāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ Cypher āύāĻžāĻŽāĻ āĻ āϤā§āϝāύā§āϤ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻāĻŦāĻ āϏāĻšāĻā§ āĻŦā§āĻāĻž āϝāĻžāϝāĻŧ āĻāĻŽāύ āĻāĻāĻāĻŋ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- Amazon Neptune: āĻāĻāĻŋ AWS āĻāϰ āĻā§āϞāĻžāĻāĻĄ āύā§āĻāĻŋāĻ āĻā§āϰāĻžāĻĢ āĻĄāĻžāĻāĻžāĻŦā§āϏāĨ¤ āĻāĻāĻŋ Apache TinkerPop (Gremlin) āĻāĻŦāĻ W3C āĻāϰ RDF/SPARQL āϏāĻŽāϰā§āĻĨāύ āĻāϰā§āĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ āĻāύā§āĻāĻžāϰāĻĒā§āϰāĻžāĻāĻ āϏā§āĻā§āϞ⧠āύāϞā§āĻ āĻā§āϰāĻžāĻĢ āĻŦāĻž āϰā§āĻāĻŽā§āύā§āĻĄā§āĻļāύ āĻāĻā§āĻāĻŋāύ āĻŦāĻžāύāĻžāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
What kind of queries are efficient in graph DBs?â
āĻā§āϰāĻžāĻĢ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻ āϏāĻŦ āĻā§āϝāĻŧā§āϰāĻŋāϰ āĻā§āώā§āϤā§āϰ⧠āĻŽā§āϝāĻžāĻāĻŋāĻā§āϰ āĻŽāϤ⧠āĻāĻžāĻ āĻāϰā§, āϝā§āĻāĻžāύ⧠āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻāĻžāϧāĻŋāĻ āĻāĻāĻŋāϞ JOIN āĻāϰāϤ⧠āĻāĻŋāϝāĻŧā§ āϏā§āϞ⧠āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āĻāĻā§āϞā§āĻā§ Deep Traversal āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤
ā§§. āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻŽā§āϝāĻžāĻāĻŋāĻ āĻ āϰā§āĻāĻŽā§āύā§āĻĄā§āĻļāύ (Recommendation Engines):
- "āϰāĻšāĻŋāĻŽ āϝ⧠āĻĢā§āύāĻāĻŋ āĻāĻŋāύā§āĻā§, āϏā§āĻ āĻāĻāĻ āĻĢā§āύ āĻāϰ āϝāĻžāϰāĻž āĻāĻŋāύā§āĻā§, āϤāĻžāϰāĻž āĻĢā§āύā§āϰ āϏāĻžāĻĨā§ āĻā§ āĻā§ āĻāĻā§āϏā§āϏāϰāĻŋāĻ āĻāĻŋāύā§āĻā§?"
- (āĻāĻāĻŋ āĻ-āĻāĻŽāĻžāϰā§āϏ⧠People who bought this also bought... āĻĢāĻŋāĻāĻžāϰ āϤā§āϰāĻŋāϤ⧠āĻāĻžāĻā§ āϞāĻžāĻā§)āĨ¤
⧍. āϏā§āĻļā§āϝāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻāĻŋāĻ (Social Networks):
- "āĻāĻĒāύāĻžāϰ āĻŦāύā§āϧā§āĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻā§ āĻā§ āĻāĻŦāĻžāϰ āĻāĻĒāύāĻžāϰ āĻāϰā§āĻ āĻŦāύā§āϧā§āϰ āϏāĻžāĻĨā§ āĻŽāĻŋāĻāĻā§āϝāĻŧāĻžāϞ āĻĢā§āϰā§āύā§āĻĄ?" (Friend of a Friend āĻŦāĻž FoF query)āĨ¤
- LinkedIn āĻŦāĻž Facebook āĻāĻ āϧāϰāĻŖā§āϰ āĻā§āϰāĻžāĻĢ āĻŽāĻĄā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻ āĻĢā§āϰā§āύā§āĻĄ āϏāĻžāĻā§āĻļāύ āĻĻā§ā§āĨ¤
ā§Š. āĻĢā§āϰāĻĄ āĻĄāĻŋāĻā§āĻāĻļāύ (Fraud Detection):
- āĻŦā§āϝāĻžāĻāĻāĻā§āϞ⧠āĻā§āϰāĻžāĻĢ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĻā§āĻā§ āϝā§âāĻāĻāĻāĻŋ āĻā§āϰā§āĻĄāĻŋāĻ āĻāĻžāϰā§āĻĄ, āϝāĻž āĻĨā§āĻā§ āϏā§āĻā§āϝāĻžāĻŽ āĻšāϝāĻŧā§āĻā§, āϏā§āĻāĻŋ āĻ āύā§āϝ āĻā§āύ āĻā§āύ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ, āĻāĻāĻĒāĻŋ āĻāĻĄā§āϰā§āϏ āĻŦāĻž āĻĢā§āύ āύāĻžāĻŽā§āĻŦāĻžāϰā§āϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤāĨ¤
85. What is CAP theorem?â
CAP Theorem (āϝāĻž Brewer's Theorem āύāĻžāĻŽā§ āĻĒāϰāĻŋāĻāĻŋāϤ) āĻšāϞ⧠āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻĄāĻžāĻāĻžāĻŦā§āϏ (Distributed Database) āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻāĻāĻāĻŋ āĻŽā§āϞāĻŋāĻ āĻāĻŦāĻ āĻ āϤā§āϝāύā§āϤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻĨāĻŋāĻāϰāĻŋāĻŽāĨ¤
āĻāĻāĻŋ āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦāϞ⧠āϝā§, āϝāĻāύ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻŦāĻž āύā§āĻĄā§ (Nodes) āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻĨāĻžāĻā§, āϤāĻāύ āĻāĻāĻ āϏāĻžāĻĨā§ āύāĻŋāĻā§āϰ āϤāĻŋāύāĻāĻŋ āĻŦā§āĻļāĻŋāώā§āĻā§āϝā§āϰ (Properties) āϏāĻŦāĻā§āϞā§āϤ⧠⧧ā§Ļā§Ļ% āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻĻā§āĻā§āĻž āĻāĻžāĻŖāĻŋāϤāĻŋāĻāĻāĻžāĻŦā§ āĻ āϏāĻŽā§āĻāĻŦāĨ¤ āĻāĻžāĻāϞā§āĻ āϝā§āĻā§āύ⧠āĻĻā§āĻāĻŋ āĻŦā§āĻā§ āύāĻŋāϤ⧠āĻšāĻŦā§āĨ¤
CAP āϤāĻŋāύāĻāĻŋ āĻļāĻŦā§āĻĻā§āϰ āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āϰā§āĻĒ:
- C - Consistency (āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻāϤāĻž/āϏāĻ āĻŋāĻāϤāĻž): āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϝā§āĻā§āύ⧠āύā§āĻĄ āĻŦāĻž āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻāĻžāϰā§āϰ āĻāϰāĻž āϞā§āĻā§āϏā§āĻ āĻāĻĒāĻĄā§āĻāĻāĻŋ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§āĻ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāĻŦā§āĨ¤ āĻ āϰā§āĻĨāĻžā§, āϏāĻŦāĻā§āϞ⧠āϏāĻžāϰ⧠āĻāĻžāϰ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻāĻ āĻĄā§āĻāĻž āĻĻā§āĻāĻžāĻŦā§āĨ¤
- A - Availability (āĻĒā§āϰāĻžāĻĒā§āϝāϤāĻž): āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻā§āĻāĻŋāĻ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻāĻāĻāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ āĻĒāĻžāĻ āĻžāϞ⧠āϏ⧠āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻāĻāĻŋ āϰā§āϏāĻĒāύā§āϏ (Failure āĻŽā§āϏā§āĻ āύāϝāĻŧ) āĻĒāĻžāĻŦā§, āĻĄāĻžāĻāĻž āϞā§āĻā§āϏā§āĻ āĻšā§āĻ āĻŦāĻž āĻāĻāĻā§ āĻĒā§āϰā§āύ⧠āĻšā§āĻāĨ¤
- P - Partition Tolerance (āĻŦāĻŋāĻāĻžāĻāύ āϏāĻšāύāĻļā§āϞāϤāĻž): āĻĻā§āĻāĻŋ āύā§āĻĄ āĻŦāĻž āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϏāĻāϝā§āĻ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύ (Network Partition āĻŦāĻž Communication drop) āĻšāϝāĻŧā§ āĻā§āϞā§āĻ āĻĒā§āϰ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻžāĻ āĻāϰāĻž āĻŦāύā§āϧ āĻāϰāĻŦā§ āύāĻžāĨ¤
How do NoSQL databases handle the trade-offs?â
āϝā§āĻšā§āϤ⧠āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϏāĻŋāϏā§āĻā§āĻŽā§ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϤāĻžāϰ āĻāĻŋāĻāĻĄāĻŧā§ āϝāĻžāĻāϝāĻŧāĻž āĻŦāĻž āϰāĻžāĻāĻāĻžāϰ āύāώā§āĻ āĻšāĻāϝāĻŧāĻž (Partition) āĻ āϤā§āϝāύā§āϤ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻāĻāĻŋ āĻāĻāύāĻž, āϤāĻžāĻ "P" (Partition Tolerance) āĻā§ āĻŦāĻžāĻĻ āĻĻā§āϝāĻŧāĻžāϰ āĻā§āύ⧠āϏā§āϝā§āĻ āύā§āĻāĨ¤ āϏāĻŋāϏā§āĻā§āĻŽāĻā§ "P" āϰāĻžāĻāϤā§āĻ āĻšāϝāĻŧāĨ¤
āĻāϰāĻĒāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§ āĻŦāĻžāϧā§āϝ āĻšāϝāĻŧā§ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϤ⧠āĻšāϝāĻŧ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĢā§āĻāϞ āĻāϰāϞ⧠āϤāĻžāϰāĻž āĻā§ āĻāϰāĻŦā§âāϤāĻžāϰāĻž āĻāĻŋ Consistency (C) āϧāϰ⧠āϰāĻžāĻāĻŦā§ āύāĻžāĻāĻŋ Availability (A) āϧāϰ⧠āϰāĻžāĻāĻŦā§?
- āϝāĻĻāĻŋ Consistency (C) āĻŦā§āĻā§ āύā§āϝāĻŧ: āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϏāĻāϝā§āĻ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύ āĻĨāĻžāĻāĻž āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ, āĻĄā§āĻāĻžāϰ āĻ āĻŽāĻŋāϞ āĻā§āĻžāϤ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻĒāĻĄā§āĻ āύā§āϝāĻŧāĻž āĻŦāύā§āϧ āĻāϰ⧠āĻĻā§āĻŦā§āĨ¤ āĻāĻāĻāĻžāϰ āĻāϰāϰ āĻŽā§āϏā§āĻ āĻĒāĻžāĻŦā§ (Unavailable)āĨ¤
- āϝāĻĻāĻŋ Availability (A) āĻŦā§āĻā§ āύā§āϝāĻŧ: āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϏāĻāϝā§āĻ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύ āĻĨāĻžāĻāĻž āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧāĻ āϏāĻŋāϏā§āĻā§āĻŽ āϰā§āϏāĻĒāύā§āϏ āĻāϰāĻŦā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϏāĻŽāϏā§āϝāĻž āĻšāϞā§, āĻāĻāĻāĻžāϰ āĻšāϝāĻŧāϤ⧠āĻĒā§āϰā§āύ⧠āĻĄā§āĻāĻž (Inconsistent data) āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
Examples of CP, AP, and CA systems?â
-
CP Systems (Consistency & Partition Tolerance):
- āĻāĻĻāĻžāĻšāϰāĻŖ: MongoDB, HBase, Redis (Cluster)āĨ¤
- āĻāĻžāĻ: āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĒāĻžāϰā§āĻāĻŋāĻļāύ āĻšāϞā§, āĻāĻ āϏāĻŋāϏā§āĻā§āĻŽāĻā§āϞ⧠āĻ āĻŽāĻŋāϞ āĻā§āĻžāύā§āϰ āĻāύā§āϝ āĻŽāĻžāĻāύāϰāĻŋāĻāĻŋ āύā§āĻĄāĻā§āϞā§āĻā§ āĻļāĻžāĻāĻĄāĻžāĻāύ āĻŦāĻž āϰāĻŋāĻĄ-āĻ āύāϞāĻŋ āĻŽā§āĻĄā§ āύāĻŋā§ā§ āϝāĻžā§, āϝāϤāĻā§āώāĻŖ āύāĻž āĻāĻŦāĻžāϰ āϏāĻ āĻŋāĻ āĻĄā§āĻāĻž āϏāĻŋāĻā§āĻ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻ āϰā§āĻĨāĻžā§ āĻāϰāĻž āĻā§āϞ āĻĄā§āĻāĻž āĻĻā§āϝāĻŧāĻžāϰ āĻā§āϝāĻŧā§ āϏāĻŋāϏā§āĻā§āĻŽāĻ ā§ Unavailable āϰāĻžāĻāĻž āĻļā§āϰā§āϝāĻŧ āĻŽāύ⧠āĻāϰā§āĨ¤
-
AP Systems (Availability & Partition Tolerance):
- āĻāĻĻāĻžāĻšāϰāĻŖ: Apache Cassandra, CouchDB, DynamoDB (Default)āĨ¤
- āĻāĻžāĻ: āĻāϰāĻž āϏāĻŦāϏāĻŽāϝāĻŧ āϰā§āϏāĻĒāύā§āϏ āĻāϰāĻŦā§ āϏāĻŋāϏā§āĻā§āĻŽ āϝāĻžāĻ āĻāĻā§āĻ āύāĻž āĻā§āύāĨ¤ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻŦāĻŋāĻāĻžāĻāύā§āϰ āϏāĻŽāϝāĻŧ āĻāĻāĻāĻŋ āύā§āĻĄ āĻšāϝāĻŧāϤ⧠āĻĒā§āϰā§āύ⧠āĻĄā§āĻāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻžāĻ āĻāĻāύ⧠āĻŦāύā§āϧ āĻšāĻŦā§ āύāĻžāĨ¤ (High Availability)āĨ¤
-
CA Systems (Consistency & Availability):
- āĻāĻĻāĻžāĻšāϰāĻŖ: Traditional RDBMS (MySQL, Oracle) āϝāĻāύ āϏāĻŋāĻā§āĻā§āϞ āϏāĻžāϰā§āĻāĻžāϰ⧠āϰāĻžāύ āĻāϰā§āĨ¤
- āĻāĻžāĻ: āĻāϰāĻž āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϏāĻŋāϏā§āĻā§āĻŽ āύāϝāĻŧ, āϤāĻžāĻ āĻĒāĻžāϰā§āĻāĻŋāĻļāύ āĻšāĻāϝāĻŧāĻžāϰ āĻĒā§āϰāĻļā§āύ āύā§āĻāĨ¤ āϤāĻŦā§ āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻŋāĻ āĻāϰāϞ⧠āĻāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ CP āϤ⧠āĻĒāϰāĻŋāĻŖāϤ āĻšāϝāĻŧāĨ¤
86. What is BASE property in NoSQL?â
āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ (RDBMS) āϝā§āĻāĻžāύ⧠āĻĄā§āĻāĻžāϰ āύāĻŋāĻā§āĻāϤ āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋāϰ āĻāύā§āϝ ACID (Atomicity, Consistency, Isolation, Durability) āĻĒā§āϰāĻĒāĻžāϰā§āĻāĻŋ āĻŽā§āύ⧠āĻāϞā§, āĻ āύā§āĻ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻāĻžāύ⧠āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋāĻ āĻāϰ āϏā§āĻŦāĻŋāϧāĻžāϰā§āĻĨā§ BASE āĻĒā§āϰāĻĒāĻžāϰā§āĻāĻŋ āĻĢāϞ⧠āĻāϰā§āĨ¤
BASE āĻŽāĻĄā§āϞāĻāĻŋ Strict Consistency (āĻāĻ ā§āϰ āϏāĻ āĻŋāĻāϤāĻž) āĻāϰ āĻāĻĒāϰ āĻāĻžāĻĄāĻŧ āĻĻāĻŋāϝāĻŧā§ Availability (āĻĒā§āϰāĻžāĻĒā§āϝāϤāĻž) āĻāϰ āĻāĻĒāϰ āĻŦā§āĻļāĻŋ āĻā§āϰ āĻĻā§āϝāĻŧāĨ¤
B.A. - Basically Available: āϏāĻŋāϏā§āĻā§āĻŽ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻā§āĻāϞā§āϝāĻžāĻŦāϞ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽāϧā§āϝ⧠āϝāĻĻāĻŋ āĻā§āύ⧠āĻāĻāĻāĻŋ āĻŦāĻž āĻāϝāĻŧā§āĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻā§āϰā§āϝāĻžāĻļāĻ āĻāϰā§, āĻĒā§āϰ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻžāĻāύ āĻšāĻŦā§ āύāĻžāĨ¤ āĻāĻāĻāĻžāϰ āϏāĻŦāϏāĻŽāϝāĻŧ āĻā§āύ⧠āύāĻž āĻā§āύ⧠āĻāĻāĻāĻŋ āϰā§āϏāĻĒāύā§āϏ āĻĒāĻžāĻŦā§āĻāĨ¤
S - Soft State: āϝā§āĻšā§āϤ⧠Strict Consistency āύā§āĻ, āϤāĻžāĻ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϏāĻžāĻŽāĻā§āϰāĻŋāĻ āϏā§āĻā§āĻ (State) āϏā§āĻĨāĻŋāϰ āĻĨāĻžāĻā§ āύāĻžāĨ¤ āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āĻā§āύ⧠āύāϤā§āύ āĻĄā§āĻāĻž āĻāύāĻĒā§āĻ āύāĻž āĻĻāĻŋāϞā§āĻ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āύā§āĻĄāĻā§āϞ⧠āύāĻŋāĻā§āĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāĻāĻā§āĻļāύā§āϰ āĻāĻžāĻ āĻāĻžāϞāĻžāϤ⧠āĻĨāĻžāĻā§, āϝāĻžāϰ āĻĢāϞ⧠āϏāĻŽāϝāĻŧā§āϰ āϏāĻžāĻĨā§ āĻĄā§āĻāĻžāϰ āĻāĻŋāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
E - Eventual Consistency: āĻāĻāĻŋ āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻĻā§āϝāĻŧ āϝā§, āϏāĻžāĻŽāϝāĻŧāĻŋāĻāĻāĻžāĻŦā§ āĻĄā§āĻāĻžāϝāĻŧ āĻ āĻŽāĻŋāϞ āĻĨāĻžāĻāϞā§āĻ, āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ (Eventually) āϏāĻŦāĻā§āϞ⧠āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāύāϏāĻŋāϏā§āĻā§āύā§āĻ āĻšāĻŦā§āĨ¤
Compare BASE with ACID?â
| Feature | ACID Properties (SQL) | BASE Properties (NoSQL) |
|---|---|---|
| Core Philosophy | Data Integrity above all (āϏāĻ āĻŋāĻāϤāĻž āϏāĻŦāĻžāϰ āĻāĻā§)āĨ¤ | High Availability and Scale (āϏāĻžāϰā§āĻāĻŋāϏ āĻāĻžāϞ⧠āϰāĻžāĻāĻž āϏāĻŦāĻžāϰ āĻāĻā§)āĨ¤ |
| Consistency | Strong ConsistencyāĨ¤ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ āĻļā§āώ āĻšāĻā§āĻž āĻŽāĻžāϤā§āϰāĻ āϏāĻŦāĻžāĻ āύāϤā§āύ āĻĄā§āĻāĻž āĻĻā§āĻāĻŦā§āĨ¤ | Eventual ConsistencyāĨ¤ āĻāĻŋāĻā§ āϏāĻŽāϝāĻŧ āĻĒāϰ āϏāĻŦāĻžāĻ āύāϤā§āύ āĻĄā§āĻāĻž āĻĻā§āĻāĻŦā§āĨ¤ |
| Locking Mechanism | āĻĄā§āĻāĻž āĻāĻĄāĻŋāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻĒā§āϏāĻŋāĻŽāĻŋāϏā§āĻāĻŋāĻ āĻŦāĻž āĻ āĻĒāĻāĻŋāĻŽāĻŋāϏā§āĻāĻŋāĻ āϞāĻ āĻāϰ⧠āϝāĻžāϤ⧠āĻ āύā§āϝāϰāĻž āĻāĻĄāĻŋāĻ āĻāϰāϤ⧠āύāĻž āĻĒāĻžāϰā§āĨ¤ | āϏāĻžāϧāĻžāϰāĻŖāϤ āĻā§āύ⧠āϞāĻāĻŋāĻ āĻĨāĻžāĻā§ āύāĻž (Optimistic / Conflict resolution)āĨ¤ |
| Primary Focus | āĻĢāĻŋāύā§āϝāĻžāύā§āϏāĻŋāϝāĻŧāĻžāϞ āĻŦāĻž āĻŦā§āϝāĻžāĻāĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ, āϝā§āĻāĻžāύ⧠⧧ āĻāĻžāĻāĻžāϰ āĻšāĻŋāϏāĻžāĻŦā§āĻ āĻā§āϞ āĻšāĻāϝāĻŧāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤ | āϏā§āĻļā§āϝāĻžāϞ āĻŽāĻŋāĻĄāĻŋā§āĻž, āĻā§āϝāĻžāĻļāĻŋāĻ, āϞāĻāĻŋāĻ, āϝā§āĻāĻžāύ⧠⧧-⧍ āϏā§āĻā§āύā§āĻĄ āϞā§āĻā§ āĻĄā§āĻāĻž āĻĻā§āĻāĻžāϞā§āĻ āϏāĻŽāϏā§āϝāĻž āύā§āĻāĨ¤ |
What is "basically available"?â
Basically Available āĻŽāĻžāύ⧠āĻšāϞ⧠āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻāĻāĻļāĻŋāĻ āĻĢā§āĻāϞāĻŋāϝāĻŧāϰā§āϰ āϏāĻŽāϝāĻŧāĻ (Partial Failures) āĻāĻžāĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāĻāϝāĻŧāĻžāϰ āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻĻā§āϝāĻŧāĨ¤
āϧāϰā§āύ, āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠ā§ĢāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āύā§āĻĄ āĻāĻā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āĻā§āĻāĻāĻā§āύ āϝāĻž ā§Š āύāĻŽā§āĻŦāϰ āύā§āĻĄā§ āĻāĻā§, āĻāĻŋāύā§āĻ¤ā§ ā§Š āύāĻŽā§āĻŦāϰ āύā§āĻĄāĻāĻŋ āĻšāĻ āĻžā§ āĻĄāĻžāĻāύ āĻšāϝāĻŧā§ āĻā§āϞāĨ¤ āĻ āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ "Basically Available" āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻāύ āύāĻž āĻĻā§āĻāĻŋāϝāĻŧā§, āĻ āύā§āϝāĻžāύā§āϝ āύā§āĻĄ āĻĨā§āĻā§ āĻā§āϝāĻžāĻļ āĻāϰāĻž āĻŦāĻž āϰā§āĻĒā§āϞāĻŋāĻāĻž (Replica) āĻāϰāĻž āĻĄā§āĻāĻž āĻĻā§āĻāĻžāύā§āϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦā§āĨ¤ āĻāĻāĻŋ "ā§§ā§Ļā§Ļ% āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋāϝā§āĻā§āϤ" āύāϝāĻŧ, āϤāĻŦā§ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻāĻžāĻ āĻāϰāĻžāϰ āϏāϰā§āĻŦā§āĻā§āĻ āĻā§āώā§āĻāĻž āĻāϰā§āĨ¤
87. What is eventual consistency?â
Eventual Consistency āĻšāϞ⧠āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻāϰ āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āĻāύāϏāĻŋāϏā§āĻā§āύā§āϏāĻŋ āĻŽāĻĄā§āϞāĨ¤ āĻāĻāĻŋ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝ⧠āϝāĻĻāĻŋ āĻā§āύ⧠āĻĄā§āĻāĻž āĻāĻāĻā§āĻŽā§ āύāϤā§āύ āĻāϰ⧠āĻā§āύ⧠āĻāĻĒāĻĄā§āĻ āύāĻž āĻāϏā§, āϤāĻŦā§ "āĻā§āĻĄāĻŧāĻžāύā§āϤ āĻĒāϰā§āϝāĻžāϝāĻŧā§" (Eventually) āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻŦāĻā§āϞ⧠āĻāĻĒāĻŋāϤ⧠(Nodes) āĻāĻ āĻāĻāĻ āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ āĻšā§ā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ āϏāĻŦ āύā§āĻĄ āĻ āĻāĻŋāύā§āύ āĻĄā§āĻāĻž āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻŦā§āĨ¤
āϏāĻšāĻ āĻāĻĨāĻžāϝāĻŧ, āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻĢāĻžāĻāϞā§āϰ āĻāĻŦāĻŋ āĻāĻĒāĻĄā§āĻ āĻāϰ⧠āϏā§āĻ āĻāϰā§āύ, āϏā§āĻ āĻĄā§āĻāĻž āĻĒā§āϰāĻĨāĻŽā§ āĻšāϝāĻŧāϤ⧠āϏāĻŋāĻā§āĻāĻžāĻĒā§āϰā§āϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āύā§āĻĄā§ āĻāĻĒāĻĄā§āĻ āĻšāϞā§āĨ¤ āĻ āĻŋāĻ āĻāĻ āϏā§āĻā§āύā§āĻĄā§āĻ āϝāĻĻāĻŋ āĻā§āĻ āĻāĻŽā§āϰāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻāĻĒāύāĻžāϰ āĻāĻŦāĻŋ āĻĻā§āĻā§, āϏ⧠āĻšāϝāĻŧāϤ⧠āĻāĻā§āϰ āĻāĻŦāĻŋāĻāĻŋāĻ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻā§āĻŦ āĻĻā§āϰā§āϤ āϏāĻŋāĻā§āĻāĻžāĻĒā§āϰā§āϰ āĻĄā§āĻāĻž āĻāĻŽā§āϰāĻŋāĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĒāĻžāĻ āĻŋāϝāĻŧā§ āĻĻā§āĻŦā§āĨ¤ āĻāĻŋāĻā§ āϏāĻŽāϝāĻŧ āĻĒāϰ āĻāĻŽā§āϰāĻŋāĻāĻžāϰ āύā§āĻĄāĻāĻŋāĻ āĻāĻĒāĻĄā§āĻ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤ āĻāĻ āϏāĻžāĻŽāϝāĻŧāĻŋāĻ āĻ āĻŽāĻŋāϞ (Delay) āĻŽā§āύ⧠āύā§āϝāĻŧāĻžāĻāĻžāĻ āĻšāϞ⧠Eventual ConsistencyāĨ¤
Which NoSQL databases use this model?â
āĻ āύā§āĻ āĻŦāĻŋāĻā§āϝāĻžāϤ NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻ āĻŽāĻĄā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻžāϰāĻŖ āĻāĻāĻŋ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻ āύā§āĻ āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ:
- Apache Cassandra: (āĻāĻāĻŋ AP āϏāĻŋāϏā§āĻā§āĻŽ, Eventual Consistency āĻāϰ āĻāĻāĻāĻŋ āĻĻāĻžāϰā§āĻŖ āĻāĻĻāĻžāĻšāϰāĻŖ)āĨ¤
- Amazon DynamoDB: (āĻāĻāĻŋ āĻĄāĻŋāĻĢāϞā§āĻ āĻšāĻŋāϏā§āĻŦā§ Eventual Consistency āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϤāĻŦā§ āĻāĻžāĻāϞ⧠Strong Consistency āĻāύā§āĻŦāϞ āĻāϰāĻž āϝāĻžāϝāĻŧ)āĨ¤
- CouchDB
- Riak
How long does "eventually" take?â
"Eventually" āĻšāϤ⧠āĻ āĻŋāĻ āĻāϤāĻā§āώāĻŖ āϞāĻžāĻāĻŦā§ āϤāĻžāϰ āĻā§āύ⧠āĻĢāĻŋāĻā§āϏāĻĄ āĻāĻžāĻāĻŽāĻĢā§āϰā§āĻŽ āύā§āĻāĨ¤ āĻāĻāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖāĻāĻžāĻŦā§ āύāĻŋāĻā§āϰ āĻŦāĻŋāώāϝāĻŧāĻā§āϞā§āϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰā§:
- Network Latency: āϏāĻžāϰā§āĻāĻžāϰāĻā§āϞā§āϰ āĻŽāϧā§āϝāĻāĻžāϰ āĻā§āĻā§āϞāĻŋāĻ āĻĻā§āϰāϤā§āĻŦ āĻāĻŦāĻ āĻāύā§āĻāĻžāϰāύā§āĻā§āϰ āϏā§āĻĒāĻŋāĻĄāĨ¤
- Server Load: āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒā§āϰāϏā§āϏāϰā§āϰ āĻāĻžāĻā§āϰ āĻāĻžāĻĒāĨ¤
- Replication Configuration: āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύ āĻā§āĻāĻžāĻŦā§ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤
āϤāĻŦā§ āĻāϧā§āύāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§, āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻāĻŋ āĻāϝāĻŧā§āĻ āĻŽāĻŋāϞāĻŋ-āϏā§āĻā§āύā§āĻĄ (Milli-seconds) āĻāϰ āĻŽāϧā§āϝā§āĻ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āĻŦāĻĄāĻŧāĻā§āϰ āĻāϝāĻŧā§āĻ āϏā§āĻā§āύā§āĻĄ āϞāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻŦāĻžāϏā§āϤāĻŦ āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋāĻāĻŦā§ āĻā§āύ⧠āĻāĻŋāĻĄāĻŋāĻāϤ⧠āĻāĻĒāύāĻŋ āĻāĻŽā§āύā§āĻ āĻāϰāϞ⧠āĻāĻĒāύāĻŋ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§āĻ āĻĻā§āĻāϤ⧠āĻĒāĻžāύ, āĻāĻŋāύā§āϤ⧠āĻ āύā§āϝ āĻĄāĻŋāĻāĻžāĻāϏ āĻŦāĻž āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻĨā§āĻā§ āϰāĻŋāĻĢā§āϰā§āĻļ āĻāϰāϞ⧠āĻāĻŽā§āύā§āĻāĻāĻŋ āĻāϏāϤ⧠āĻāĻāĻā§ āϏāĻŽāϝāĻŧ āϞāĻžāĻā§āĨ¤ āĻāĻžāϰāĻŖ āϏā§āĻ āĻāĻŽā§āύā§āĻāĻāĻŋ āĻĒā§āĻĨāĻŋāĻŦā§āϰ āϏāĻŦāĻā§āϞ⧠āϏāĻžāϰā§āĻāĻžāϰ⧠āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāĻāĻ āĻšāϤ⧠āĻāĻāĻā§ "āϏāĻŽāϝāĻŧ" (Eventually) āύāĻŋāĻā§āĻā§āĨ¤
88. What is sharding in NoSQL?â
Sharding āĻšāϞ⧠āĻĄā§āĻāĻžāĻŦā§āϏ āϏā§āĻā§āϞāĻŋāĻāϝāĻŧā§āϰ āĻāĻāĻāĻŋ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰāĻžāϞ āĻāύāϏā§āĻĒā§āĻ (āϝāĻž Horizontal Partitioning āύāĻžāĻŽā§āĻ āĻĒāϰāĻŋāĻāĻŋāϤ), āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻŦāĻŋāĻļāĻžāϞ āĻĄā§āĻāĻžāϏā§āĻāĻā§ āĻā§āĻ āĻā§āĻ āĻ āύā§āĻāĻā§āϞ⧠āĻā§āĻāϰā§āϤ⧠āĻāĻžāĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻ āĻā§āĻ āĻā§āĻāϰā§āĻā§āϞā§āĻā§ Shard āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤
āĻāϰāĻĒāϰ āĻāĻ Shard āĻā§āϞā§āĻā§ āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϞ āϏāĻžāϰā§āĻāĻžāϰ⧠āύāĻž āϰā§āĻā§, āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰā§āϰ (Nodes) āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ āĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻŦāĻž āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻāϰ⧠āϰāĻžāĻāĻž āĻšāϝāĻŧāĨ¤ āĻāϰ āĻĢāϞ⧠āĻĄā§āĻāĻž āϏā§āĻā§āϰ āĻāϰāĻžāϰ āĻā§āώāĻŽāϤāĻž āĻāĻŦāĻ āĻā§āϝāĻŧā§āϰāĻŋ āĻĒā§āϰā§āϏā§āϏāĻŋāĻ āĻā§āώāĻŽāϤāĻž āϰā§āĻāĻŋāĻāĻāĻžāĻŦā§ (Linearly) āĻŦāĻžāĻĄāĻŧāϤ⧠āĻĨāĻžāĻā§āĨ¤
Technical definition: Sharding is a database architecture pattern related to horizontal partitioning that separates one very large global database into smaller, faster, more easily managed functional units (shards), each residing on a separate physical server instance to distribute load.
How does MongoDB implement auto-sharding?â
MongoDB āϤ⧠Sharding āĻĒā§āϰāϏā§āϏāĻāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻŦāĻž Auto-shardingāĨ¤ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞ āĻļāĻžāϰā§āĻĄāĻŋāĻ āĻāϰ āĻŦāĻŋāĻĒāϰā§āϤā§, āĻĄā§āĻāĻžāĻŦā§āϏ āύāĻŋāĻā§āĻ āĻ āĻŋāĻ āĻāϰ⧠āϰāĻŋāϝāĻŧā§āϞ āĻāĻžāĻāĻŽā§ āĻā§āύ āĻĄā§āĻāĻž āĻā§āύ āϏāĻžāϰā§āĻāĻžāϰ⧠(Shard) āϝāĻžāĻŦā§, āĻāĻŦāĻ āϏ⧠āύāĻŋāĻā§āĻ āĻĄā§āĻāĻž āĻŦā§āϝāĻžāϞā§āύā§āϏ āĻāϰā§āĨ¤ āĻāĻāĻŋ ā§ŠāĻāĻŋ āĻŽā§āϞ āĻāĻĒāĻžāĻĻāĻžāύā§āϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻāĻžāĻ āĻāϰā§:
- Shards (Data Nodes): āϝā§āĻāĻžāύ⧠āĻāϏāϞ āĻĄā§āĻāĻžāĻā§āϞ⧠āĻā§āĻāϰ⧠āĻā§āĻāϰ⧠āĻšāϝāĻŧā§ āĻāĻŽāĻž āĻĨāĻžāĻā§ (āĻāĻā§āϞ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ āύāĻŋāĻā§āĻĻā§āϰ āĻŽāϧā§āϝ⧠āϰā§āĻĒā§āϞāĻŋāĻāĻž āϏā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻĨāĻžāĻā§)āĨ¤
- Config Servers: āĻāĻā§āϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ "āĻŽā§āϝāĻžāĻĒ" āĻŦāĻž āϰā§āϞāϏ āϧāϰ⧠āϰāĻžāĻā§āĨ¤ āĻā§āύ āĻĄā§āĻāĻž āĻŦāĻž āŽāލā¯āޤ Shard āĻ āĻāĻā§, āϤāĻžāϰ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻāĻāĻžāύ⧠āĻĨāĻžāĻā§āĨ¤
- Mongos (Query Router): āĻāĻāĻŋ āĻā§āϰāĻžāĻĢāĻŋāĻ āĻĒā§āϞāĻŋāĻļā§āϰ āĻŽāϤ⧠āĻāĻžāĻ āĻāϰā§āĨ¤ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻŦāĻž āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāϰāĻžāϏāϰāĻŋ Shard āĻ āύāĻ āĻāϰ⧠āύāĻž, āύāĻ āĻāϰ⧠Mongos āĻāĨ¤
āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§?
- āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāĻāĻāĻŋ āĻā§āϝāĻŧā§āϰāĻŋ (āϝā§āĻŽāύ: "āĻāĻāĻāĻžāϰ āĻāĻāĻĄāĻŋ ā§Ģ āĻā§āĻāĻāĻāĻŋ")
mongosāĻ āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤ mongosāĻāύāĻĢāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāĻžāĻā§ āĻŽā§āϝāĻžāĻĒ āĻāĻžāύāϤ⧠āĻāĻžāϝāĻŧ (āĻāĻāĻĄāĻŋ ā§Ģ āĻā§āύ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻā§?)āĨ¤- āĻāύāĻĢāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻŦāϞ⧠āĻĻā§āϝāĻŧ "āĻāĻāĻŋ Shard 2 āĻ āĻāĻā§"āĨ¤
mongosāϤāĻāύ Shard 2 āĻĨā§āĻā§ āĻĄāĻžāĻāĻž āĻāύ⧠āĻā§āϞāĻžāϝāĻŧā§āύā§āĻāĻā§ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻā§āύ⧠Shard āĻ āĻĄāĻžāĻāĻž āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ, āϤāĻŦā§ ë°ąāĻā§āϰāĻžāĻāύā§āĻĄā§ MongoDB āĻāϰ āĻŦā§āϝāĻžāϞā§āύā§āϏāĻžāϰ (Balancer) āĻĄā§āĻāĻžāϰ "Chunk" āĻā§āϞ⧠āĻ āύā§āϝ āĻāĻžāϞāĻŋ Shard āĻ āĻĒāĻžāĻ āĻŋāϝāĻŧā§ āϞā§āĻĄ āĻŦā§āϝāĻžāϞā§āύā§āϏ āĻāϰā§āĨ¤
What is shard key selection strategy?â
Shard Key āĻšāϞ⧠āϏā§āĻ āĻĢāĻŋāϞā§āĻĄ āĻŦāĻž āĻāϞāĻžāĻŽ āϝāĻžāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻ āĻŋāĻ āĻāϰ⧠āĻĄā§āĻāĻžāĻā§ āĻā§āĻāĻžāĻŦā§ āĻā§āĻāϰ⧠āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻāĻāĻāĻŋ āĻā§āϞ Shard Key āĻĒā§āϰ⧠āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āϧā§āĻŦāĻāϏ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰ⧠(āϝāĻžāĻā§ Hotspotting āĻŦāϞā§)āĨ¤ āϏāĻ āĻŋāĻ Shard Key āĻŦāĻžāĻāĻžāĻ āĻāϰāĻžāϰ āĻŽā§āϞāϤ ā§ŠāĻāĻŋ āϏā§āĻā§āϰā§āϝāĻžāĻā§āĻāĻŋ āĻāĻā§:
- Hashed Sharding: Shard Key āĻāϰ āĻā§āϝāĻžāϞā§āĻā§ āĻšā§āϝāĻžāĻļ (Hash āĻĢāĻžāĻāĻļāύ) āĻāϰ⧠āϤāĻžāϰāĻĒāϰ āĻĄā§āĻāĻž āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- āϏā§āĻŦāĻŋāϧāĻž: āĻāĻāĻŋ āĻĄā§āĻāĻžāĻā§ āϏāĻŦāĻā§āϞ⧠āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻĻāĻŽ āϏāĻŽāĻžāύāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰ⧠āĻĻā§āϝāĻŧ (Even distribution)āĨ¤
- āĻ āϏā§āĻŦāĻŋāϧāĻž: Range query (āϝā§āĻŽāύ "ID ā§§ āĻĨā§āĻā§ ā§§ā§Ļā§Ļ āĻĄāĻžāĻāĻž āĻĻāĻžāĻ") āĻā§āĻŦ āϏā§āϞ⧠āĻšāϝāĻŧ, āĻāĻžāϰāĻŖ āĻĄāĻžāĻāĻž āϏāĻŦ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻĄāĻŧāĻžāύ⧠āĻĨāĻžāĻā§āĨ¤
- Ranged Sharding: Shard Key āĻāϰ āĻā§āϝāĻžāϞā§āϰ āϰā§āĻā§āĻ āĻ āύā§āϝāĻžāϝāĻŧā§ āĻĄā§āĻāĻž āĻāĻžāĻ āĻšāϝāĻŧāĨ¤ (āϝā§āĻŽāύ A-M āύāĻžāĻŽā§āϰ āĻŽāĻžāύā§āώ Shard 1 āĻ, N-Z āύāĻžāĻŽā§āϰ āĻŽāĻžāύā§āώ Shard 2 āĻ)āĨ¤
- āϏā§āĻŦāĻŋāϧāĻž: Range query āĻāϰ āĻāύā§āϝ āĻāĻāĻŋ āϏāĻŦāĻā§āϝāĻŧā§ āĻĢāĻžāϏā§āĻāĨ¤
- āĻ āϏā§āĻŦāĻŋāϧāĻž: āĻĄā§āĻāĻž āĻāύ-āĻāĻā§āύāϞāĻŋ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ (āϧāϰāĻŋ A-M āύāĻžāĻŽā§āϰ āĻŽāĻžāύā§āώ āĻŦā§āĻļāĻŋ, āϤāĻāύ Shard 1 āĻ āĻāĻāĻžāϰāϞā§āĻĄ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§)āĨ¤
- Choosing the Right Key (āĻŽā§āϞāĻŋāĻ āύāĻŋāϝāĻŧāĻŽ): Shard key āĻāĻŽāύ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤ āϝāĻžāϰ āĻĒā§āϰāĻā§āϰ āĻāϞāĻžāĻĻāĻž āĻāϞāĻžāĻĻāĻž āĻā§āϝāĻžāϞ⧠āĻāĻā§ (High cardinality) āĻāĻŦāĻ āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻā§āϝāĻŧā§āϰāĻŋāϤā§āĻ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻ Key āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
89. What is replication in NoSQL?â
Replication āĻšāϞ⧠āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āĻāĻāĻ āĻĄā§āĻāĻžāĻā§ āĻšā§āĻŦāĻšā§ āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ⧠(Nodes) āĻāĻĒāĻŋ (Copy) āĻŦāĻž āĻā§āϞā§āύ āĻāϰ⧠āϰāĻžāĻāĻžāϰ āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĨ¤
Sharding āĻāϰ āĻŽā§āϞ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻšāϞ⧠"āϏā§āĻā§āϞāĻŋāĻ āĻŦāĻž āĻā§āϝāĻžāĻĒāĻžāϏāĻŋāĻāĻŋ āĻŦāĻžāĻĄāĻŧāĻžāύā§", āĻ āύā§āϝāĻĻāĻŋāĻā§ Replication āĻāϰ āĻŽā§āϞ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻšāϞ⧠High Availability (āĻĒā§āϰāĻžāĻĒā§āϝāϤāĻž) āĻāĻŦāĻ Fault Tolerance (āĻā§āϰā§āϝāĻžāĻļ āϏāĻžāĻŽāϞāĻžāύā§āϰ āĻā§āώāĻŽāϤāĻž) āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻžāĨ¤ āϝāĻĻāĻŋ āĻā§āύ⧠āĻāĻžāϰāĻŖā§ āĻāĻĒāύāĻžāϰ āĻŽā§āĻāύ āϏāĻžāϰā§āĻāĻžāϰ āĻĒā§āĻĄāĻŧā§ āϝāĻžāϝāĻŧ āĻŦāĻž āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻ āĻā§āϰā§āϝāĻžāĻļ āĻāϰā§, āϤāĻŦā§ āĻ āύā§āϝ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĨāĻžāĻāĻž āĻāĻĒāĻŋ āĻĨā§āĻā§ āĻŽā§āĻšā§āϰā§āϤā§āĻ āĻĄā§āĻāĻž āϰāĻŋāĻāĻāĻžāϰ āĻŦāĻž āĻāĻā§āϏā§āϏ āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āĻšāϝāĻŧāĨ¤
Difference between master-slave and master-master?â
āĻĄāĻžāĻāĻžāĻŦā§āϏ āύā§āĻĄ āĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻā§āĻāĻžāĻŦā§ āĻāĻĄāĻŧāĻžāĻŦā§, āϤāĻžāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§ āĻĒā§āϰāϧāĻžāύāϤ āĻĻā§āĻāĻŋ āĻāĻžāĻā§ āĻāĻžāĻ āĻāϰāĻž āϝāĻžāϝāĻŧ:
| Feature | Master-Slave (Primary-Secondary) | Master-Master (Peer-to-Peer / Multi-Leader) |
|---|---|---|
| Write Operations | āĻļā§āϧā§āĻŽāĻž āϤā§āϰ āĻāĻāĻāĻŋ āĻŽāĻžāϤā§āϰ āύā§āĻĄā§ (Master) āϰāĻžāĻāĻ (Insert/Update) āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ | āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āϝā§āĻā§āύ⧠āύā§āĻĄā§ āϰāĻžāĻāĻ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ āϏāĻŦāĻžāĻ āĻāĻāĻžāϧāĻžāϰ⧠MasterāĨ¤ |
| Read Operations | Slave āύā§āĻĄāĻā§āϞ⧠āĻĨā§āĻā§ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻļā§āϧ⧠āĻĄā§āĻāĻž āϰāĻŋāĻĄ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ (āϰāĻŋāĻĄ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ)āĨ¤ | āϝā§āĻā§āύ⧠āύā§āĻĄ āĻĨā§āĻā§ āϰāĻŋāĻĄ āĻ āϰāĻžāĻāĻ āĻĻā§āĻāĻŋāĻ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ |
| Data Flow | One-wayāĨ¤ Master āĻ āĻĄā§āĻāĻž āĻĸā§āĻā§, āϤāĻžāϰāĻĒāϰ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āϤāĻž Slave āĻā§āϞā§āϤ⧠āĻāĻĒāĻŋ āĻšāϝāĻŧāĨ¤ | Two-way āĻŦāĻž Multi-wayāĨ¤ āĻĄāĻžāĻāĻž āύā§āĻĄāĻā§āϞ⧠āύāĻŋāĻā§āĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āϏāĻŋāĻā§āĻ āĻāϰā§āĨ¤ |
| Conflict Resolution | āϝā§āĻšā§āϤ⧠āĻāĻāĻāύāĻ āϰāĻžāĻāĻ āĻāϰā§, āϤāĻžāĻ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āĻŦāĻž āĻĄā§āĻāĻžāϰ āϏāĻžāĻāĻāϰā§āώāĻŋāĻ āĻ āĻŦāϏā§āĻĨāĻž āϤā§āϰāĻŋ āĻšāϝāĻŧā§āĻŦāĻŋāĻāĻž āϤā§āϰāĻŋ āĻšāϝāĻŧ āύāĻžāĨ¤ | āĻāĻāĻ āĻĄā§āĻāĻž āϝāĻĻāĻŋ āĻĻā§āĻāύ āĻāĻāĻāĻžāϰ āĻĻā§āĻāĻŋ āĻāĻŋāύā§āύ āύā§āĻĄā§ āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āĻāĻĒāĻĄā§āĻ āĻāϰā§, āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻšāϝāĻŧāĨ¤ āϤāĻāύ āĻāĻžāϰā§āĻļāύ āĻāύā§āĻā§āϰā§āϞ āĻŦāĻž āϞāĻžāϏā§āĻ-āϰāĻžāĻāĻ-āĻāĻāύāϏ (LWW) āϞāĻāĻŋāĻ āĻĻāĻŋāϝāĻŧā§ āĻāĻžāĻŽā§āϞāĻž āĻŽā§āĻāĻžāϤ⧠āĻšāϝāĻŧāĨ¤ |
| Best Used For | Read-heavy āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĨ¤ | Write-heavy āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻŦāĻ ā˛ā§āϞā§āĻŦāĻžāϞ āĻĄā§āĻāĻž āϏā§āύā§āĻāĻžāϰ āϏā§āĻāĻāĻĒāĨ¤ |
| Examples | MongoDB, MySQL, PostgreSQL | Apache Cassandra, Amazon DynamoDB, CouchDB |
How does MongoDB replica set work?â
MongoDB āϤ⧠āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻāĻŋāĻā§ Replica Set āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤ āĻāĻāĻŋ Master-Slave āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰā§āϰ āĻāĻāĻāĻŋ āĻāύā§āύāϤ āϰā§āĻĒ āϝāĻžāϰ āĻ āĻā§āĻŽā§āĻāĻŋāĻ āϰāĻŋāĻāĻāĻžāϰāĻŋ āĻā§āώāĻŽāϤāĻž āĻāĻā§āĨ¤
- āĻāĻāĻāĻŋ āŽāŽŋāŽĒā¯āŽĒāĻŋāĻā§āϞ Replica Set āĻ āĻāĻāĻāĻŋ Primary (Master) āύā§āĻĄ āĻāĻŦāĻ āĻāĻāĻžāϧāĻŋāĻ Secondary (Slave) āύā§āĻĄ āĻĨāĻžāĻā§āĨ¤
- āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āϏāĻŦ āϰāĻžāĻāĻ (Write) āĻ āĻĒāĻžāϰā§āĻļāύ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ Primary āύā§āĻĄā§āĻ āĻāϏā§āĨ¤
- Primary āύā§āĻĄ āϤāĻžāϰ āĻāĻžāĻāĻā§āϞā§āϰ āĻāĻāĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻŦāĻž āϞāĻ āϤā§āϰāĻŋ āĻāϰā§, āϝāĻžāĻā§ āĻŦāϞāĻž āĻšāϝāĻŧ Oplog (Operations Log)āĨ¤
- Secondary āύā§āĻĄāĻā§āϞ⧠āϏāĻŦāϏāĻŽāϝāĻŧ Primary āĻāϰ Oplog āĻā§āĻ āĻāϰāϤ⧠āĻĨāĻžāĻā§ āĻāĻŦāĻ āύāϤā§āύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞ⧠āύāĻŋāĻā§āĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻžāύāĻŋāϝāĻŧā§ āĻĄā§āĻāĻž āϏāĻŋāĻā§āĻ āĻŦāĻž āĻāĻĒāĻĄā§āĻ āĻāϰ⧠āύā§āϝāĻŧāĨ¤
- Automatic Failover: āϝāĻĻāĻŋ āĻā§āύ⧠āĻāĻžāϰāĻŖā§ Primary āύā§āĻĄ āĻĄāĻžāĻāύ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ, āϤāĻŦā§ āĻŦāĻžāĻāĻŋ Secondary āύā§āĻĄāĻā§āϞ⧠āύāĻŋāĻā§āĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻāϝāĻŧā§āĻ āϏā§āĻā§āύā§āĻĄā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻā§āĻāĻžāĻā§āĻāĻŋāϰ (Automatic Election) āĻāϝāĻŧā§āĻāύ āĻāϰā§āĨ¤ āϝ⧠āύā§āĻĄā§āϰ āĻāĻžāĻā§ āϏāĻŦāĻā§āϝāĻŧā§ āϞā§āĻā§āϏā§āĻ āĻĄā§āĻāĻž āĻāĻā§, āϏ⧠āύāϤā§āύ Primary āĻšāĻŋāϏā§āĻŦā§ āύāĻŋāϰā§āĻŦāĻžāĻāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻā§āĻāĻŋāĻ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤
90. What is MapReduce?â
MapReduce āĻšāϞ⧠āĻŦāĻŋāĻļāĻžāϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ (Petabytes) āĻĄā§āĻāĻž āĻ āϤā§āϝāύā§āϤ āĻĻā§āϰā§āϤ āĻĒā§āϰāϏā§āϏ āĻāĻŦāĻ āĻāύāĻžāϞāĻžāĻāϏāĻŋāϏ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āĻŽāĻĄā§āϞāĨ¤ āĻāĻāĻŋ āĻļā§āϰā§āϤ⧠Google āĻāĻĻā§āĻāĻžāĻŦāύ āĻāϰā§āĻāĻŋāϞ āĻāĻŦāĻ āĻĒāϰāĻŦāϰā§āϤā§āϤ⧠āĻšāĻžāĻĄā§āĻĒ (Hadoop) āĻ āĻ āύā§āϝāĻžāύā§āϝ NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§āϞā§āϤ⧠āĻŦā§āϝāĻžāĻĒāĻāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
āĻāĻāĻŋ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻĄā§āĻāĻžāĻā§ āĻĒā§āϰāϏā§āϏ āĻāϰāϤ⧠āĻŽā§āϞāϤ āĻĻā§āĻāĻŋ āϧāĻžāĻĒā§ āĻāĻžāĻ āĻāϰā§:
- Map Phase (āĻŽā§āϝāĻžāĻĒāĻŋāĻ): āĻŦāĻŋāĻļāĻžāϞ āĻĄā§āĻāĻžāϏā§āĻāĻā§ āĻ āύā§āĻāĻā§āϞ⧠āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āĻāĻžāĻ āĻāϰ⧠āĻĻā§āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āϤāĻžāϰ āĻāĻžāĻā§āϰ āĻĄā§āĻāĻž āĻĨā§āĻā§ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻāĻŋāύāĻŋāϏ āĻŦā§āϰ āĻāϰ⧠(Filter) āĻāĻŦāĻ āϤāĻžāĻā§ āĻāĻŋ-āĻā§āϝāĻžāϞ⧠(Key-Value) āĻĒā§āϝāĻŧāĻžāϰ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰā§āĨ¤
- Reduce Phase (āϰāĻŋāĻĄāĻŋāĻāϏāĻŋāĻ): Map āĻĢā§āĻ āĻĨā§āĻā§ āĻĒā§āϰāĻžāĻĒā§āϤ āĻāĻŋ-āĻā§āϝāĻžāϞ⧠āĻĄā§āĻāĻžāĻā§āϞā§āĻā§ āĻāĻāϏāĻžāĻĨā§ āϝā§āĻ āĻāϰā§, āĻā§āĻŖ āĻāϰ⧠āĻŦāĻž āĻāĻā§āϰāĻŋāĻā§āĻ (āĻā§āϰā§āĻĒāĻŋāĻ) āĻāϰ⧠āĻāĻāĻāĻŋ āĻā§āĻĄāĻŧāĻžāύā§āϤ āϏāĻžāĻŽāĻžāϰāĻŋ āĻĢāϞāĻžāĻĢāϞ āϤā§āϰāĻŋ āĻāϰā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ: āϧāϰā§āύ āĻāĻĒāύāĻŋ āϞāĻā§āώ āϞāĻā§āώ āĻāϰā§āĻāĻŋāĻā§āϞ⧠āĻā§āύ āĻļāĻŦā§āĻĻ āĻāϤāĻŦāĻžāϰ āĻāĻā§ āϤāĻž āĻā§āύāϤ⧠āĻāĻžāύāĨ¤
- Map āĻĢāĻžāĻāĻļāύ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāϰā§āĻāĻŋāĻā§āϞā§āϰ āĻļāĻŦā§āĻĻāĻā§āϞā§āĻā§ āϞāĻžāĻāύ āĻŦāĻžāĻ āϞāĻžāĻāύ
("āĻļāĻŦā§āĻĻ", 1)āĻšāĻŋāϏā§āĻŦā§ āĻāϞāĻžāĻĻāĻž āĻāϰāĻŦā§āĨ¤ - Reduce āĻĢāĻžāĻāĻļāύ āϏā§āĻ āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻ āĻļāĻŦā§āĻĻāĻā§āϞā§āϰ āϏāĻŦāĻāϞā§
1āĻā§ āϝā§āĻ āĻāϰ⧠āĻā§āĻāĻžāϞ āύāĻžāĻŽā§āĻŦāĻžāϰ āĻāĻāĻāĻĒā§āĻ āĻĻā§āĻŦā§āĨ¤
When would you prefer aggregation pipeline instead?â
MongoDB-āϤ⧠āĻāĻāϏāĻŽāϝāĻŧ MapReduce āĻŦā§āĻļ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āĻĨāĻžāĻāϞā§āĻ, āĻŦāϰā§āϤāĻŽāĻžāύ⧠Aggregation Pipeline (āĻāĻā§āϰāĻŋāĻā§āĻļāύ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ) āϏāĻŦāĻāĻžāĻāϤ⧠āĻŦā§āĻļāĻŋ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ āĻāĻŦāĻ MapReduce āĻā§ āĻĒāϰāĻŋāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻā§āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻāϰ āĻāĻžāϰāĻŖāĻā§āϞ⧠āĻšāϞā§:
- āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ (Efficiency): Aggregation pipeline āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύ⧠C++ āĻĻāĻŋāϝāĻŧā§ āϞā§āĻāĻž, āϤāĻžāĻ āĻāĻāĻŋ āĻ āϤā§āϝāύā§āϤ āĻĢāĻžāϏā§āĻāĨ¤ āĻ āύā§āϝāĻĻāĻŋāĻā§ MapReduce āϏāĻžāϧāĻžāϰāĻŖāϤ JavaScript āĻāύā§āĻāĻžāϰāĻĒā§āϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻžāĻ āĻāϰāϤā§, āϝāĻž āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ⧠āĻ āύā§āĻ āϏā§āϞā§āĨ¤
- āĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝāϤāĻž (Usability/Simplicity): Aggregation pipeline āĻ
$match,$group,$project,$sortāύāĻžāĻŽāĻ āϏā§āĻā§āĻāĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϞā§āĻā§āϰ (Lego) āĻŦā§āϞāĻā§āϰ āĻŽāϤ⧠āĻāĻāĻāĻŋāϰ āĻĒāϰ āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āĻĒā§āϰāϏā§āϏāĻŋāĻ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āϤā§āϰāĻŋ āĻāϰāĻž āϝāĻžāϝāĻŧ, āϝāĻž āĻŦā§āĻāĻž āĻāĻŦāĻ āĻĄāĻŋāĻŦāĻžāĻ āĻāϰāĻž āĻā§āĻĄāĻŋāĻāϝāĻŧā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻ āύā§āĻ āϏāĻšāĻāĨ¤ - āĻāĻāύ āĻĒā§āϰā§āĻĢāĻžāϰ āĻāϰāĻŦā§āύ? āϝāĻāύ āĻāĻĒāύāĻžāĻā§ āĻā§āĻŦ āϏā§āĻā§āϰā§āĻ-āĻĢāϰāĻāϝāĻŧāĻžāϰā§āĻĄ āĻĢāĻŋāϞā§āĻāĻžāϰāĻŋāĻ, āĻā§āϰā§āĻĒāĻŋāĻ āĻŦāĻž āĻĄā§āĻāĻž āĻŽā§āϝāĻžāύāĻŋāĻĒā§āϞā§āĻļāύ āĻāϰāϤ⧠āĻšāĻŦā§, āϤāĻāύ Aggregation Pipeline āĻ āĻšāϞ⧠āĻŦā§āϏā§āĻ āĻāϝāĻŧā§āϏāĨ¤
Is MapReduce still relevant today?â
NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ (āϝā§āĻŽāύ MongoDB) āύāĻŋāĻāϏā§āĻŦ āĻāĻā§āϏāĻŋāϏā§āĻā§āĻŽā§ MapReduce āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻāύ āĻĒā§āϰāĻžāϝāĻŧ āύā§āĻ āĻŦāϞāϞā§āĻ āĻāϞ⧠(MongoDB 5.0 āĻ āĻāĻāĻŋ āĻĄā§āĻĒā§āϰāĻŋāĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§)āĨ¤ āĻāϧā§āύāĻŋāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§āϞā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻāĻā§āĻāĻŋāύ āϏā§āĻ āĻāĻžāϝāĻŧāĻāĻž āĻĻāĻāϞ āĻāϰ⧠āύāĻŋāϝāĻŧā§āĻā§āĨ¤
āϤāĻŦā§, āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŦāĻžāĻāϰ⧠āĻŦāĻŋāĻ-āĻĄā§āĻāĻž āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻā§ (Big Data Ecosystem) āĻāϰ āĻāύāϏā§āĻĒā§āĻ āĻāĻāĻ āĻ āϤā§āϝāύā§āϤ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻāĨ¤
- Apache HadoopFramework (HDFS) āĻŦāĻž āĻā§āϞāĻžāĻāĻĄ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻāϝāĻŧā§, āϝā§āĻāĻžāύ⧠PetaBytes āϏā§āĻā§āϞ⧠āĻĄā§āĻāĻž āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āύāĻž āĻĨā§āĻā§ āĻĢā§āϞā§āϝāĻžāĻ āĻĢāĻžāĻāϞ āĻŦāĻž āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āĻāĻĄāĻŧāĻžāύ⧠āĻĨāĻžāĻā§āĨ¤
- āϝā§āĻāĻžāύ⧠āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āĻā§āϰā§āĻĒāĻŋāĻāϝāĻŧā§āϰ āĻŦāĻžāĻāϰ⧠āĻāĻžāϏā§āĻāĻŽ āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻ āϞāĻāĻŋāĻ (Custom logic/algorithms) āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ, āϏā§āĻāĻžāύ⧠MapReduce-āĻāϰ āĻāύāϏā§āĻĒā§āĻ āĻŦāĻž āĻāϰ āĻāϤā§āϤāϰāϏā§āϰāĻŋ Apache Spark āĻŦā§āϝāĻžāĻĒāĻāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻā§āĻā§āĨ¤