NoSQL 误用和常见陷阱分析(孙立)


孙立 @qunar.com weibo.com@sunli1223 误用和常见陷阱分析 大纲 被误用的NoSQL NoSQL陷阱 NoSQL与MySQL NoSQL无处不在 NoSQL运维 被误用的NoSQL 非常容易出现的错误使用方法 循环网络调用 •  Memcached的循环和批量GET对比 Map result=new HashMap(); for (int i = 0,len=keys.length; i < len; i++) { //循环获取memcached数据 result.put(keys[i], memcacheGet(keys[i]));      } //使用批量get协议  Map objMap = client.get(Arrays.asList(keys)); 5倍性能的影响 10个key消耗10ms 10个key消耗2ms 循环网络调用 •  Redis的循环和批量GET对比 Map result=new HashMap(); for (int i = 0,len=keys.length; i < len; i++) { //循环获取memcached数据 result.put(keys[i], jredis.get(keys[i]));      } //循环从redis get数据  jredis.mget(keys); 100个key消耗10ms 100个key消耗5ms 2倍性能的影响 不压缩大数据 •  压缩的分类 不压缩 NoSQ存储 压缩 外部 client压 缩 不压缩大数据 •  内部压缩和外部压缩 内部压缩 web web web NoSQL内部压缩,可以减小存储,提 升IO性能,不能提升网络IO性能 Web-外部压缩 Web-外部压缩 Web-外部压缩 外部压缩,可以减小存储,提升IO性能, 并且能够提升网络IO性能 不压缩大数据 •  压缩对比 内部压缩 web web web Web-外部压缩 Web-外部压缩 Web-外部压缩 无压缩的原始数据 压缩后的数据 (1000*1024*1024/8)/(10*1024)=12800 qps (1000*1024*1024/8)/(4*1024)=32000 qps 1000Mb网卡单条数据10KB的理论qps CPU消耗可扩展 CPU消耗不可扩展 跨语言交互 NoSQL serialize PHP Other 能unserialize? NoSQL 某压缩算法 JAVA Other 能解压吗? NoSQL陷阱 NoSQL是一个新兴的话题,大量的NoSQL产品 也都是新出来的,难免出现各式各样的陷阱。 不能避免陷阱,但是得掉进去可以爬出来。 官方数据很美好 •  官方数据 •  很少有提及缺点的 Tokyo Cabinet 的官方数据。实际测试 你会发现,数据增加后,速度会骤减 场景错误 •  Redis做持久存储 – 单点、复制问题 – 数据超过内存性能急剧下降 – 扩容问题 •  Redis做Cache存储 – 性能极高 – 数据结构丰富 – 可以持久化、避免雪崩现象 细节描述不清楚 •  Ttserver=>兼容memcached协议 不支持memcached的flag参数 早期版本increment与memcached不一致 Stats命令不一致 缓存重建 •  系统重启后,大部分请求到磁盘 •  整个系统的性能可能出现抖动 •  出现连锁雪崩反应 NoSQL陷阱 -32bit问题 •  Ttserver -2GB(32bit) •  Mongodb-2.5GB (32 bit) Ttserver在 32bit下 , 到达 2g数据大小 将出现无法启动的现象 版本升级问题 •  版本升级带来兼容问题(官方未声明的) •  版本升级可能导致适用场景变化 NoSQL与MySQL 不要犹豫该用MySQL还是NoSQL,在你还没有掌握 NoSQL前,最好先在小项目尝试下。 选择 NoSQL需要考虑 •  数据的安全性-是否久经考验 •  事务性的保障 •  数据的重要性 •  是否有DBA运维 •  未来的业务需求变化 性能之争 —差别在哪里 ? •  普通磁盘的IOPS(几百个) •  寻道时间、延迟时间 •  顺序读和顺序写吞吐上百MB/S 随机写变顺序写 内存索引-热数据cache 读写算法优化(场景化) 网络协议优化 NoSQL在普通 磁盘的优化 如果是SSD? NoSQL无处不在 不管你信不信,你很可能早已在接触NoSQL了。 Memcached缓存 SVN使用的BDB 比如: 为什么要构建自己的 NoSQL •  考察清楚场景和需求 •  现有产品满足需求成本高 •  针对特殊场景,也许比想象的简单 •  可掌控 构建自己的 NoSQL •  IP查询 TreeMap 可轻松完成 构建自己的 NoSQL •  通过MySQL构建 GET SET DELETE MySQL 接口封 装 MySQL MySQL 这样也是NoSQL NoSQL运维 并不像官方宣称的那样,NoSQL无需DBA运维 运维 NoSQL并不容易 •  文档齐全吗? •  网上交流多嘛? •  周边工具齐全吗? •  出现意外问题你能搞定吗? 出现意外问题,很难求助到人 监控 -运维之本 •  IO •  CPU •  延迟 •  QPS •  抖动 •  数据量 除了操作系统最基本的监控,还应该监控 备份很重要 •  避免单点 •  定期数据库备份 •  开发前做好切换准备(能切换到其他产品) 谢谢!
还剩28页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

pcemf4

贡献于2013-09-24

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf