• 选择NOSQL的三大理由
  • 李键 发表于 2015/6/17 18:38:00 | 分类标签: NOSQL 大数据 高并发
  • 【使用NoSQL数据库的理由】
    1. High performance - 对数据库高并发读写的需求
    2. Huge Storage - 对海量数据的高效率存储和访问的需求
    3. High Scalability & High Availability - 对数据库的高可扩展性和高可用性的需求

    【讨论话题】
    1. 在开发项目做技术选型时,我(们)是如何选择NoSQL的?
    2. 我(们)目前已经使用了哪些NoSQL数据库?遇到了哪些令人难忘的困难和麻烦?
    3. 根据我的经验判断,哪个NoSQL是未来的希望之星?

    1.在做NoSQL技术选型的时候,谈谈个人的想法。

    首先要选择比较成熟的方案,例如MongoDB Redis 这些耳熟能详的,大互联网公司都在用,更有保障性,开源社区支持也非常完善。原因:国内大部分的互联网公司,还不具备对某个Nosql数据库进行二次开发或者扩展的能力,也不具备这个条件,更不可能短期内公司团队自己开发。使用比较广泛的NoSql,功能和社区技术支持相对完善,拥有更多的学习资料,公司技术团队更容易学习和掌握。


    其次是要合适自身业务场景和基础架构的。每个Nosql产品都会有其自身的优缺点,选择的时候也需要考虑很多问题:假设 MongoDB 是不能进行持久化存储的,而且在命中率不高的情况下必须去读写后端的关系型数据库,这点能否接受吗?假设Redis 数据库的稳定版本仅仅支持跑在Cent OS 5.5以上,而你公司的服务器全部是windows的,这个我想你多半会放弃Redis了。再比如:Memecahed 默认是不支持数据冗余的,也就是说发生单点故障的情况下,就无法保证数据完整性。这点我们的系统能接受吗?我们是否有能力将其扩展,让他支持数据冗余,防止单点故障呢?

    2.关于使用了哪些,遇到了哪些问题。


    要说最早使用的NoSql产品,要属Memcached。严格来讲,Memcached只是一套基于K/V存储的分布式缓存系统,并算不上Nosql产品(这得看对nosql的定义了,业内也有很多争议)。至于后来衍生出来的memcachedb(一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是 不需要严格事务约束,能够被持久化保存的应用场景),Membase等,应该算的上真正意义上的Nosql了。

    在使用Memcached作为辅助存储的时候,遇到过一些很棘手的问题。例如:命中率不高,被迫读取后端的数据库。维护和扩容的成本比较高,后期才启用监控和邮件报警机制。还有很要命的一点就是,当时公司全部使用的是windows服务器授权,windows平台缺乏良好的Nosql支持(或许是团队自身技术有限),导致在性能和高可用方面都大打折扣。为了解决单点故障问题,不惜牺牲了一定的性能。因为当时比较高效、成熟的冗余方案,只能支持Linux服务器,而我们短期内也无法开发出比较完善的方案。


    后期在业余项目中,使用了更“高级”的Redis,同样遇到过一些困难。首先就是快速熟悉,掌握Redis,这就考验个人学习能力了。在使用过程中,做读写分离的时候(Master/Slave主从复制,和使用Mysql一样的思路),复制过程中,遇到性能瓶颈。经过研究发现,由于Redis使用单线程服务,如果Master快照文件比较大,这样以来传输则需要花费较长时间,还有就是,Master/Slave服务器最好在同一局域网内,避免网络延时。还有就是比较常见的“单点故障”的问题,虽然说主从复制的方式,也可以解决单点故障,但总觉得这不算是高可用的最佳手段。之前在Memcachedb中可以使用 Proxy的方式,实现数据冗余,来避免“单点故障”。Redis中同样也有解决的思路,这里不做太多介绍,有需要的朋友自己去找相关资料研究。


    还有点值得说的就是,凡是涉及到“持久化存储到硬盘”的,就必读会有磁盘I/O操作,当然就会有一定的性能牺牲。好在Nosql抛开了传统关系型数据库中的默认事务支持和一系列的复杂的检查等。

    3.如果真要我选择,我觉得Redis将会是未来nosql之星。出于之前对于Memcached的使用喜好,感觉Redis更像一个加强版的Memcached。


    但是在网络I/O模型,内存管理,可持久化,存储方式(list,set,sorted set,hash等众多数据结构)等方面都有改进,这里就不一一介绍了。

    时间有限,说了这么多  希望对大家有帮助  也建议朋友们多去尝试  多去学习 不要做新技术的门外汉(这里不是鼓励大家去“赶时髦”) 

    以上纯属个人浅见,如有错误或者遗漏之处,请指出,也希望大家一起留言讨论。

     

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:李键
  • 加入时间:2013/5/16 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮