MongoDB 最佳實踐及2.8版本特性與功能

主要流程
web

  1. MongoDB 2.8 版本特性與功能redis

  2. MongoDB 在趕集網的應用算法

  3. MongoDB 最佳實踐mongodb

MongoDB 2.8 版本特性與功能

TJ MongoDB 開發者數據庫

TJ 強調 MongoDB 沒有實際意義上的鎖,只有 Latch,門栓。api

2.6 庫級鎖 Latch,沒有 Lock,寫內存的一剎那鎖住內存安全

2.8 無鎖的 MVCC 併發,WIREDTIGER,snapshot isolation數據結構

  • 2.6 MMAP 內存映射,庫級鎖多線程

  • 2.8 MMAP 集合級鎖架構

  • 2.8 WIREDTIGER 無鎖

  • WIREDTIGER 存儲模式

    • LSM(HBASE, Cassandra) - Log Structured Merge

    • B-TREE

  • LSM

    • 數據寫內存,異步寫硬盤

    • 讀性能有問題,性能通常

高併發寫應用場景

  • 壓縮算法

    • SNAPPY - 默認壓縮方式,速度快,壓縮率OK,32k cache 壓縮

    • ZLIB - 壓縮率高,佔用 CPU 高,隨時壓縮,湊夠 32k 落盤

更大的複製集羣數: 12 - 50

  • 2.6 Logging 控制

  • 2.8 Logging 可控制

  • 更新的工具集

    • Go 語言重寫

    • 多線程

    • 支持輸入校驗

  • 加強的導入導出性能

  • 運維 OpsManager

    • 監控,備份,集羣管理

MongoDB 最佳實踐

京東 DBA

  1. 複製集

  2. 分片架構

  3. 監控和備份

  • MS 不支持讀寫分離,不支持 HA,已放棄 MS 架構

  • 都是副本級架構

  • 部署奇數個節點

  • Arbiter

  • primary 和 Secondary 通常放在2個機櫃裏, 機器是雙電, 多機房

  • write concern 的配置,會致使丟數據,默認的配置安全級低?

  • replicate set architecture

    • 官方不建議開啓讀寫分離

    • read preference primary

  • sharding architecture

  • monitor

    • zabbix + server status + rs status

  • backup

    • 全量備份

    • 延遲備份

    • 增量備份和增量恢復

  • 使用

    • 商品信息,大字段,不少不固定的屬性(NoSQL)

    • 比價系統

    • 關注系統

    • 日誌類,手機短信 (TokuMX壓縮,數據量比較大,不穩定,半夜重啓,正在測試 2.8 的壓縮性能)

    • 用戶訪問日誌 (TokuMX)

MongoDB 在趕集網的應用

趕集網 DBA

  1. 選型失敗的案例

  2. 選型成功的案例

  3. 服務化與運維

  • 失敗案例

    • 不支持 join,數據庫支持反範式

    • 過多內聯數據,索引龐大,性能太低

    • 過多聚合及計算功能,數據庫不堪重負

    • 基於地理位置, mongodb 二級索引

    • schema free,無傳統 DB DDL 負擔

    • document 豐富的數據結構類型

    • mongodb 1.8 全局鎖,讀寫超時很是嚴重

    • 直到 2.0 DB 級鎖,纔有單庫單表設計

    • 技術選型過於激進,調研及測評不夠充分

    • 發帖過濾,實時性要求高

    • 編輯審覈,條件很是複雜

    • 時間段集中,高峯期大量讀寫

    • 發佈審覈

    • 失敗緣由

    • 社區系統

    • 失敗緣由

  • 成功案例

    • 以前用 MySQL,13年末所有切到 MongoDB

    • 提供登陸,註冊,收藏功能

    • 第三方登陸,綁定,手機註冊認證,綁定

    • pv 瀏覽技術

    • redis: 浪費內存,數據持久化慢

    • ssdb: 解決內存問題,但仍需客戶端實現分片

    • mongodb: 自動分片,弱跨機房應用

    • other?

    • 用戶中心

    • mongodb 2.7.7,32 replicate sets,128 shards

    • 18 臺 2U,64G,普通磁盤,raid 0

    • 線上 13 億,

  • Proxy vs DBrouter

    • tddl

    • cobar, atlas

  • 服務高可用

    • 服務端 netscaler 硬件負載均衡

    • 優先選本機 mongos,失敗後請求 LVS

  • 運維3板斧

    • 歸檔: 隔離冷數據,提升內存利用率

    • SSD: scale up,提高單機性能

    • 分片: scale out,mongo 提早分片,橫向擴展

  • 跨機房問題

    • 慎用 IP,儘可能用內網 DNS

    • 特別是 config,遷移時須要重啓集羣

    • MongoDB 無跨機房 replset mirror 的概念

  • 硬件差別問題

    • 主從複製延遲,slaveok出現數據不一致

    • api 分級,個別功能調用 getlasterr 確保關鍵業務寫入成功

    • 調整 votes 和 priority,使高性能主庫搶佔

  • 磁盤與內存

    • mongodb 使用磁盤很是豪放,按期瘦身

    • 小步快跑,內存髒頁均勻刷入磁盤,減小IO衝擊

  • 官方jira,別人採的坑

活動相關資料:

MongoDB功能預覽:http://pan.baidu.com/s/1k2UfW

MongoDB在趕集網的應用:http://pan.baidu.com/s/1bngxgLp

MongoDB在京東的使用:http://pan.baidu.com/s/1qWkawv6

相關文章
相關標籤/搜索