`
v5qqbrowser
  • 浏览: 356720 次
文章分类
社区版块
存档分类
最新评论

关于NoSQL的选型和使用

 
阅读更多

【内容简介】
NoSQL,指的是非关系型的数据库。随着互联网Web 2.0网站的兴起,传统的关系数据库在应付Web 2.0网站时,特别是超大规模和高并发的SNS类型的Web 2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

就像AK47是非洲人的身份证一样,NoSQL技能如今已成为Web开发软件工程师的必备技能之一。

【使用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等众多数据结构)等方面都有改进,这里就不一一介绍了。


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

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

分享到:
评论

相关推荐

    技术选型:NoSQL产品选型

    技术选型:NoSQL产品选型

    NOSQL数据库选型及使用经验

    将介绍NOSQL数据库的基本原理、主要类型和选型方案,结合Surdoc云存储产品在测试和验证多种NOSQL数据库中的经验,从实践的角度给出了几种NOSQL数据库的优缺点,以及实际的应用案例。

    NoSQL研究及选型报告

    该报告介绍了NoSQL的相关概念和实现技术,并选取三个NoSQL数据库(MongoDB、HBase、Redis)进行技术预研,从数据库的安装、部署、备份恢复、集群扩展、性能、客户端等方面进行比较,结合银行自身业务特点,分析每个...

    NOSQL内存数据库选型报告x.docx

    NOSQL内存数据库选型报告x

    当下流行NOSQL的选型

    MongoDB、ElasitcSearch、Redis、HBase是现今最火的四款NoSQL数据库产品。在实际的开发中,这四种数据库有什么区别?我到底该选哪个?想必这是很多互联网开发都遇到过的难题。下面就给大家总结下这四种数据库产品的...

    NoSQL 介绍

    NoSQL 概念,原理,如何选型,常用NoSQL数据库

    数据库产品如何选型

     oracle,mysql,nosql选型  一.是否满足业务场景,各DB系统软件功能对比  1.功能对比  oracle功能是大而全并且非常完善,无论是锁定机制还是事物支持,无论是内置函数还是外部可扩展功能,无论OLTP和OLAP都...

    数据中台之结构化大数据存储设计.docx

    而对于存储组件的选型是一件非常有挑战的事,存储组件包含数据库(又分为SQL和NoSQL两类,NoSQL下又根据各类数据模型细分为多类)、对象存储、文件存储和高速缓存等不同类别。带来存储选型复杂度的主要原因是架构师...

    mongdb 开发规范精讲 精华部分

    随着MongoDB的普及和使用量的快 速增长,为了规范使用,便于管理和获取更高的性能,整理此文档。我们从 数据库设计规范、集合设计 规范、索引设计规范、文档设计规范、API使用规范、连接规范等方面进行阐述和要求。 ...

    redis开发规范 精讲 精华部分

    Redis是一个单进程、基于内存、弱事务(单个命令可以保证原子性,多命令无法保证)的NoSql存储系 统,适用于高QPS、低延迟、弱持久化的场景,适宜用作缓存。 从经验出发: 在qps>5000、容量、存储高频数据时考虑redis...

    高性能网站构建实战

    第五篇为数据缓存篇(NoSQL),包括第10章、第11章和第12章,分别介绍了Memcached,以及两种当前非常流行的NoSQL数据库软件Redis和MongoDBC。第六篇为文件服务篇,包括第13章和第14章,介绍了MFS和Hadoop。第七篇...

    技术选型:分布式开源数据库比较

    分布式开源数据库比较

    基于spring boot的爬虫系统,优秀毕业设计,计算机必看!

    一. 简介 通过 spring boot 搭建的爬虫系统 ...> 方式二: maven打成jar包后,将使用命令 `java -jar spider-1.0.0-SNAPSHOT.war &` 启动spider-1.0.0-SNAPSHOT.war > 方式三: 部署在tomcat中直接运行

    百度云盘 pdf《大数据架构和算法实现之路:电商系统的技术实战》百度云盘-带标签目录

    第 5 章方案设计和技术选型: NoSQL 和搜索的整合· .. 195 5.1 问题分析 …… IX 5.2 HBase 简介……….. ... .. .…...... . …. 196 5.3 结合 HBase 和搜索引擎………….. 203 5.4 案例实践….... . . . ....

    Java-web旅游项目实战案例(四个)IDEA项目源码

    4 技术选型 4.1 Web层 a) Servlet:前端控制器 b) html:视图 c) Filter:过滤器 d) BeanUtils:数据封装 e) Jackson:json序列化工具 4.2 Service层 f) Javamail:java发送邮件工具 g) Redis:nosql内存数据库 h) ...

    mongdb使用手册

    MongoDB是DBA新引进的一个NOSQL型数据库,其架构为:MongoDB+PCServer+Linux+本地盘/存储卡。 该文档主要是制定MongoDB的数据库架构规范,供后续的架构设计与选型提供参考。

    Java旅游项目

    中国旅游网项目——三层架构 目录 1 技术选型 2 数据库 ...技术选型 1.1 Web层 a) Servlet:前端控制器 ... 这个项目是网站项目,要求面向普通客户,需要响应速度快,因此不采用jsp...g) Redis:nosql内存数据库 h) Jedis:j

    大数据技术体系.pdf

    Mahout、Spark MLLib 数据同步:Sqoop任务调度:Oozie 以上这些⼯具,是和⼤数据有关的⼀些框架技术,可以看到每⼀个类型中都有多种技术可以实现,所以在做技术选型的时候,需要根据⾃⼰ 的业务实际情况选择最适合⾃...

    某职业技术学院校庆校友录小程序20210617.rar

    采用微信小程序云开发技术,无需搭建服务器,使用腾讯平台提供的 API 进行核心业务开发,即可实现快速上线和迭代, NoSQL数据库+云函数+云存储 小程序在微信里打开,无须下载app,也无须再访问传统的PC站点,...

    Designing Data-Intensive Applications.pdf

    设计数据敏感型应用,对多种存储组件进行分析,可以用于存储组件的技术选型,深入理解各种存储组件的优劣:Data-intensive applications are pushing the boundaries of what is possible by making use of these ...

Global site tag (gtag.js) - Google Analytics