Configuring Read Preferences
1. Setting Read Preference
| Mode | Behavior |
|---|---|
| primary (default) | Always primary |
| primaryPreferred | Primary, else secondary |
| secondary | Only secondary |
| secondaryPreferred | Secondary, else primary |
| nearest | Lowest latency member |
2. Using primaryPreferred Mode
| Use Case | Detail |
|---|---|
| Read availability | Falls back to secondary if primary down |
| Consistency | Reads usually fresh; stale during failover |
3. Using secondaryPreferred Mode
| Use Case | Detail |
|---|---|
| Offload reads | Reduce primary load |
| Caveat | Secondary lag → stale reads |
4. Using nearest Mode
| Aspect | Detail |
|---|---|
| Selection | Lowest ping within latency window (15ms default) |
| Geo-distributed apps | Reads from same region |
5. Using Read Preference Tags
| Aspect | Detail |
|---|---|
| Form | readPreference=secondary&readPreferenceTags=region:us-east |
| Multiple sets | Tried in order |
| Setup | Tags configured per member in rs.conf() |
6. Setting maxStalenessSeconds
| Aspect | Detail |
|---|---|
| Purpose | Limit acceptable lag (90s minimum) |
| Effect | Skip members lagging more than threshold |
| Not with primary | Only secondary modes |
7. Understanding Read Preference Behavior
| Stage | Detail |
|---|---|
| Server selection | Topology check + mode filter + tags + staleness |
| Latency window | fastest + localThresholdMS (default 15ms) |
| Random pick | Among eligible servers |
8. Using Read Preference with Transactions
| Rule | Detail |
|---|---|
| All reads | Must target primary (or "primary" RP) |
| Driver enforces | Override RP in txn options if needed |
9. Configuring Read Preference in Connection String
| Option | Example |
|---|---|
| readPreference | secondaryPreferred |
| readPreferenceTags | region:us-east,role:analytics |
| maxStalenessSeconds | 90 |
10. Handling Read Preference Failover
| Scenario | Behavior |
|---|---|
| Primary lost | primaryPreferred/secondaryPreferred fall back |
| All members down | ServerSelectionTimeoutError after timeout |
| Retry | Retryable reads (default on) re-select server |