NoSQL误用和常见陷阱分析

标签: 技术荟萃 | 发表时间:2013-01-24 15:25 | 作者:黄言之
出处:http://blog.sina.com.cn/netreview

1 、被误用的NoSQL:非常容易出现的错误使用方法

(1)循环网络调用:循环获取不好主要原因在网络访问环节的开销增大很多;涉及网络请求时要尽量批量获取。

实例1:

clip_image002

实例2:

clip_image004

(2)不压缩大数据

压缩问题一般分为:不压缩、外部Client压缩、NoSQL存储压缩

NoSQL内部压缩,可以减小存储,提升IO性能,不能提升网络IO性能。CPU消耗不可扩展。

外部压缩,可以减小存储,提升IO性能,并能够提升网络IO性能。CPU消耗可扩展。

clip_image006

压缩可以选用常用的gzip。很大的文件用NoSQL也没意义了,不如存文件的。

(3)跨语言交互:序列化、压缩时是否有对应的方法,尽量选择多种语言都支持的,如JSon、Protobuf、Thrift等格式。

clip_image008

2 、NoSQL 陷阱

(1)官方数据很美好,很少有提及缺点的:使用时更应该关注的是缺点。

clip_image010

(2)场景错误

A、Redis做持久存储:不是很好用,下面三方面问题处理的都不是很好。

  • 单点、复制问题
  • 数据超过内存性能急剧下降
  • 扩容问题

B、Redis做Cache存储:比较适合这种场景。

  • 性能极高
  • 数据结构丰富
  • 可以持久化、避免雪崩现象

(3)细节描述不清楚:不少都是小公司开发的,不规范。

如Ttserver宣称的兼容memcached协议,实际上不支持memcached的flag参数(如标记压缩、序列化),早期版本increment与memcached不一致,Status命令也不一致。

(4)缓存重建:代价大,注意雪崩现象

NoSQL都宣称性能很好,但要注意系统重启后,大部分请求到磁盘,整个系统的性能可能出现抖动,出现连锁雪崩反应。

(5)32bit问题:存储数据不能超过限定大小,数据文件会出现无法读写,整个数据就坏掉了,即使换64位也来不及,非常危险。如32bit系统下,Ttserver-2GB,存储的文件不能超过2G大小;Mongodb现在是2.5GB。

(6)版本升级问题:大部分NoSQL升级比较随意,尤其是个人开发为主,以自己兴趣爱好驱动了。版本升级可能带来兼容问题,可能导致使用场景变化。

避免方法:要多了解NoSQL细节;要有一定的testCase;用一个最好精通。

NoSQL的大部分系统的代码都比较简单,可以直接研究它的代码,可以适当改写其中的代码。

3 、NoSQL 与MySQL

(1)不要犹豫改用MySQL还是NoSQL,在你还没有掌握NoSQL前,最好先在小项目中尝试。

(2)选择NoSQL需要考虑:

  • 数据的安全性-是否久经考验,如订单存储,一般选择关系型数据库
  • 事务性的保障:
  • 数据的重要性:是否允许丢失后rebuild
  • 是否有DBA运维:
  • 未来的业务需求变化

(3)性能之争:差别在哪里?

普通磁盘的IOPS(几百个),和寻道时间、延迟时间有关。

而顺序读和顺序写吞吐上百MB/S。

如果是SSD会怎样呢?

在普通磁盘上NoSQL的优化点:

  • 随机写变顺序写:如Apend操作,索引中更新位置;定期清理无用的数据;一般分文件存储,方便做文件合并和清理。
  • 内存索引-热数据cache:索引一般在内存中,热点数据一般都会cache
  • 读写算法优化(场景化):关系数据库功能强大,通用,所以算法复杂;而NoSQL可以针对场景做特定优化。
  • 网络协议优化:一般都是get、put等

4 、NoSQL 无处不在

很早就已经在接触NoSQL。如Memcached缓存(没有持久化)、SVN使用的BDB。

5 、为什么要构建自己的NoSQL

  • 考察清楚场景和需求
  • 现有产品满足需求成本高
  • 针对特殊场景,也许比想象的简单
  • 可掌控

实例1:IP查询,采用Java中的TreeMap

clip_image012

实例2:通过MySQL构建,封装好接口就可以

clip_image014

6 、NoSQL 运维

运维NoSQL并不容易,同样需要DBA,如:

  • 文档齐全吗?
  • 网上交流多嘛?
  • 周边工具齐全吗?如备份、恢复
  • 出现意外问题你能搞定吗?很难求助到人

监控:是DBA、系统运维的根本。除了操作系统最近本的监控,还需要监控:

IO、CPU、延迟、QPS、抖动、数据量。

有些NoSQL产品还没有监控接口,这也是NoSQL产品成熟与否的一个特性。

备份很重要:避免单点,定期数据库备份、开发前做好切换准备(能切换到其他产品)。

 

资料来源:(孙立的讲座PPT)

http://www.infoq.com/cn/presentations/sl-nosql-misuse-common-pitfalls


  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [nosql 常见 陷阱] 推荐:

NoSQL误用和常见陷阱分析

- - 互联网旁观者
1 、被误用的NoSQL:非常容易出现的错误使用方法. (1)循环网络调用:循环获取不好主要原因在网络访问环节的开销增大很多;涉及网络请求时要尽量批量获取. 压缩问题一般分为:不压缩、外部Client压缩、NoSQL存储压缩. NoSQL内部压缩,可以减小存储,提升IO性能,不能提升网络IO性能.

Java常见疑惑和陷阱(PPT)

- water - BlogJava-首页技术区
本来是打算小范围内讨论的,话题也比较小,后来听说人多了,临时拼凑些材料. 话题过大后重点就放在讲解上,其实这里面讲解的东东还是挺多的. 以后有时间会将并发完整整理一次. xylz 2010-12-03 16:13 发表评论.

[转][转]LINUX共享内存使用常见陷阱与分析

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://www.dcshi.com/?p=79. 所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式. 是针对其他通信机制运行效率较低而设计的. 往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥. 其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去.

Oracle MySQL Or NoSQL续

- - Sky.Jian 朝阳的天空
接前面一篇,这里再将之前在“中国系统架构师大会”5周年的时候发布的纪念册“IT架构实录”上的一篇文章发出来,也算是前面博文中PPT的一个文字版解读吧. Oracle,MySQL 还是 NoSQL. 随着阿里系的“去IOE”运动在社区的宣传声越来越大,国内正在掀起一股“去xxx”的技术潮. 不仅仅是互联网企业,包括运营商以及金融机构都已经开始加入到这个潮流之中.

NoSQL开篇——为什么要使用NoSQL

- Foxiang - 博客园新闻频道
  NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面. 今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于NoSQL方面的经验和体会.   非常荣幸能受邀在InfoQ开辟这样一个关于NoSQL的专栏,InfoQ是我非常尊重的一家技术媒体,同时我也希望借助InfoQ,在国内推动NoSQL的发展,希望跟我一样有兴趣的朋友加入进来.

8种nosql对比

- - 谁主沉浮
虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破. 这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是 NoSQL数据库之间的不同,远超过两 SQL数据库之间的差别. 这意味着软件架构师更应该在项目开始时就选择好一个适合的 NoSQL数据库.

好人陷阱

- Kenneth - 励志人生(LzTopic)
一个我喜欢的故事,再讲一次———. 某地发生凶案,迅速抓到杀人嫌犯,证人、证言一应俱全,就是他干的,他无论如何喊冤都没人听. 侥幸逃离的真凶也良心难受,于是他去向一个神父忏悔,说出来后,果然好多了. 可这神父受不了了,他只好去向另一个神父忏悔,以缓解自己承受的压力,每个知道这个邪恶秘密的神父都去找另一个神父忏悔,最后,全国的神父都知道了这个秘密.

Oracle 发布 NoSQL 数据库

- 冷月 - 博客园新闻频道
  Oracle 作为全球最大的关系型数据库提供商,在其产品链条中,也加入了 NoSQL 数据库这一环,而且这个新的数据库名字很霸气,就叫 NoSQL Database,想起了当年新浪微博更换 weibo.com 域名之时的一个笑话:. 原来有三家人做面包,张三家的面包叫三张牌面包,李四家的牌子叫李四牌面包,王五家出品的是王五牌面包,而突然有一天,张三家的面包改名了,叫面包牌面包.

NoSQL 数据建模技术

- - 博客 - 伯乐在线
全文译自墙外文章“ NoSQL Data Modeling Techniques”,译得不好,还请见谅. 这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉. 我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西. 总体来说,我觉得NoSQL更适合做Cache.

Nosql Redis ttserver Flare memcache比较

- - 小彰
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速. 而传统的关系数据库在应付 web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:. 1、High performance - 对数据库高并发读写的需求.