MongoDB功能预览:http://pan.baidu.com/s/1k2UfW

MongoDB在赶集网的应用:http://pan.baidu.com/s/1bngxgLp

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

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,别人采的坑

主要流程

  1. MongoDB 2.8 版本特性与功能

  2. MongoDB 在赶集网的应用

  3. MongoDB 最佳实践

MongoDB 2.8 版本特性与功能

TJ MongoDB 开发者

TJ 强调 MongoDB 没有实际意义上的锁,只有 Latch,门栓。

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 最佳实践的更多相关文章

  1. MongoDB最佳实践中文手册

    背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...

  2. Redis+MongoDB 最佳实践 做到读写分离 -摘自网络

    方案1. (被否定) 加上Redis,做到MongoDB的读写分离,单一进程从MongoDB及时把任务同步到Redis中. 看起来很完美,但是上线后出现了各种各样的问题,列举一下: 1.Redis队列 ...

  3. MongoDB入门实践

    MongoDB入门实践 简单介绍MongoDB,包括MongoDB的使用场景.和MySQL的对比.安装部署.Java客户端访问及总结 MongoDB? 我们遵循需求驱动技术的原则,通过一个场景来引入M ...

  4. MongoDB开发最佳实践

    MongoDB开发最佳实践 连接到MongoDB · 关于驱动程序:总是选择与所用之MongoDB相兼容的驱动程序.这可以很容易地从驱动兼容对照表中查到: · 如果使用第三方框架(如Spring Da ...

  5. 快速web开发中的前后端框架选型最佳实践

    这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...

  6. 《开源安全运维平台OSSIM最佳实践》

    <开源安全运维平台OSSIM最佳实践> 经多年潜心研究开源技术,历时三年创作的<开源安全运维平台OSSIM最佳实践>一书即将出版.该书用80多万字记录了,作者10多年的IT行业 ...

  7. fir.im Weekly - 2016 年 Android 最佳实践列表

    2016 年已经过去一半,你在年初制定的成长计划都实现了吗? 学海无涯,技术成长不是一簇而就的事情.本期 fir.im Weekly 推荐 王下邀月熊_Chevalier的 我的编程之路--知识管理与 ...

  8. MySQL性能优化的21个最佳实践

    http://www.searchdatabase.com.cn/showcontent_38045.htm MySQL性能优化的21个最佳实践 1. 为查询缓存优化你的查询 大多数的MySQL服务器 ...

  9. MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则

    做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...

随机推荐

  1. 后台代码对iBatis配置文件中具体的sql语句的调用实现(被封装的增删改查)

    using IBatisNet.Common.Exceptions; using IBatisNet.DataAccess; using IBatisNet.DataAccess.DaoSession ...

  2. HDU 4004

    http://acm.hdu.edu.cn/showproblem.php?pid=4004 题意:青蛙过长L的河,只能落在石头上,石头数量是n,给出n个坐标,至多跳m次,求在可以过河的条件下,青蛙跳 ...

  3. 阿里云Centos中二级域名绑定二级目录的方法

    对于一些目录,我们往往需要对其指定二级域名,那么具体如何操作呢?下面,我将用亲身实践来说明一下. 由于第一次接触centos,我不得不借助于网络资源.然后得知要开启mod_rewrite这个模块,具体 ...

  4. Sqlserver 角色那些事

    固定服务器角色 描述 sysadmin 可以在SQLServer 中执行任何活动. serveradmin 可以设置服务器范围的配置选项,关闭服务器. setupadmin 可以管理链接服务器和启动过 ...

  5. Apache与Nginx服务器对比

      apache NginX 占用资源和内存 多 轻量级,同样起Web服务,占内存和资源更少   阻塞型 抗并发,异步非阻塞的,高并发下,可保持低资源低消耗低性能   可用的模块超多 可自定义模块,编 ...

  6. JAVA基础总结一:

    一.数据类型及变量名和注释 1. Java 中的数据类型分为两大类: 1) 原生数据类型 (Primitive Data Type) :8个(byte.char.short.int.long.floa ...

  7. ZOJ 1005 Jugs

    原题链接 题目大意:有一大一小两个杯子,相互倒水,直到其中一个杯子里剩下特定体积的水.描述这个过程. 解法:因为两个杯子的容积互质,所以只要用小杯子不断往大杯子倒水,大杯子灌满后就清空,大杯子里迟早会 ...

  8. linux 网络协议分析---3

    本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 网络接口层 ...

  9. leetcode 101 Symmetric Tree ----- java

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  10. 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB

    众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一 ...