Read Concern و Write Concern (Read & Write Concern)
Read Concern و Write Concern: سطح Consistency 📊
Read Concern و Write Concern برای کنترل level of consistency در replica sets استفاده میشوند. این به شما امکان میدهد تعیین کنید چه زمانی یک read یا write "موفق" در نظر گرفته میشود.
Write Concern:
Write Concern مشخص میکند که چه زمانی یک write operation "موفق" در نظر گرفته میشود:
// Write Concern ساده
db.users.insertOne(
{{ name: "Ali" }},
{{ writeConcern: {{ w: 1 }} }} // فقط primary باید تایید کند
)
// Write Concern با majority
db.users.insertOne(
{{ name: "Ali" }},
{{ writeConcern: {{ w: "majority" }} }} // اکثریت replica set باید تایید کند
)
// Write Concern با timeout
db.users.insertOne(
{{ name: "Ali" }},
{{ writeConcern: {{ w: "majority", wtimeout: 5000 }} }} // 5 ثانیه timeout
)
// Write Concern با journal
db.users.insertOne(
{{ name: "Ali" }},
{{ writeConcern: {{ w: 1, j: true }} }} // باید به journal نوشته شود
)
Read Concern:
Read Concern مشخص میکند که چه level از consistency برای read operations میخواهید:
// Read Concern local (پیشفرض)
db.users.find().readConcern("local") // دادههای local را میخواند
// Read Concern majority
db.users.find().readConcern("majority") // فقط دادههایی که در majority هستند
// Read Concern linearizable
db.users.find().readConcern("linearizable") // بالاترین level consistency
// Read Concern snapshot (برای transactions)
db.users.find().readConcern("snapshot")
مثال عملی:
// برای دادههای مهم (مثل financial)
db.accounts.insertOne(
{{ accountId: "123", balance: 1000 }},
{{ writeConcern: {{ w: "majority", j: true }} }}
)
// برای دادههای کماهمیت (مثل logs)
db.logs.insertOne(
{{ message: "User logged in" }},
{{ writeConcern: {{ w: 1 }} }}
)
💡 نکته: Write Concern "majority" و Read Concern "majority" برای دادههای مهم استفاده میشوند اما کمی کندتر هستند. برای دادههای کماهمیت، میتوانید از level پایینتر استفاده کنید.
✅ یاد گرفتید: Read/Write Concern برای کنترل consistency و durability در replica sets استفاده میشوند!
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.