nosql数据库选型
http://blogread.cn/it/article/6654
今天在书店里翻完了一遍《七天七数据库》。这本书简单介绍了postgreSQL,riak,mongodb,HBase,riak,Neo4j,redis七个数据,并着重谈了数据库的特性差异和在部署维护时候的特点,并对不同需求下的数据库选型做了很多建议,感觉受益非浅。
我的几个项目,都遇到了mysql 向nosql过渡的问题,应该如何选型,我终于有了初步的方案。
社区网站的关系数据:neo4j
原来大量使用关联表的方式来存储,schema怎么看都觉得恶心,一共只有三列,两列是双重主键。现在有了对neo4j这样的图数据库,天生就是为了解决这样的问题而生的。原来网站里,人对小站的关注关系,图片和相册的关系,图博和标签的关系,这些现在都可以用neo4j来存储。不光是简单存储关系,还可以存储关系的hash信息,几乎1:1直接还原了设计思想。neo4j现在主要的问题是分布式能力不足,虽说官方宣称可以存储上百亿的关系,但是整个系统里留这么一个单点,总是让人不放心。好在这个社区网站的规模还远远没有大到上亿的级别,neo4j足以应付。并且用neo4j可以在编程模式上有很大的帮助,性能上也有很大提升。
社区网站的内容数据:mongodb
社区网站有用户、站点、相册、图片、博客等模型,这些模型都有丰富的元数据,其中不乏很多字段会出现空值,原来用mysql,会造成空间浪费,但是如果用nosql就可以避免空间浪费。这些模型大多数情况都是主键查询,nosql能够发挥很大的性能优势。目前的规模并不大,对性能没有特别的要求,但是由于业务逻辑非常复杂,经常会出现复杂查询,cassandra和riak对索引虽然有支持,但是非常非常有限,完全不能满足业务的需要。mongodb对索引的支持非常好,对各种查询条件的支持几乎能兼容mysql绝大多数的功能。我们希望能够简单快速地实现复杂查询,满足业务快速迭代的需要。因此,mongodb最适合最为社区主要模型的存储数据库。
原来的redis主要就是用来缓存常用模型的,而mongodb其实也有内存缓存,之前有过相关的测试,证明如果mongodb能够载入所有的数据到内存中,性能和redis相差无几。如果使用mongodb,那么redis这一层其实基本上是多余的。那么我们就只需要mongodb+neo4j就能完整实现整个应用了。
微博数据的本地缓存:cassandra
本来我考虑是用mongodb,因为mongo的数据类型是JSON,和微博的返回结果完全一致,可以在不考虑任何数据结构的情况下,将查询结果直接存进mongodb。但是mongodb有两个比较大的问题,一是他是强一致性的,而实际上我们对一致性的要求并不高,甚至希望用弱一致性(W=0,R=1)来保证高可用;二是他的写性能并不如cassandra,由于cassandra采用了多层SSTable的方式,使得它能够在多次对同一个内容进行写操作时,merge多个SSTable成一个SSTable,即使反复update同一份数据也不会降低性能,非常适合SSD。
这个业务的特点是,写比读还多,并且同一份数据经常反复写。所以看来还是cassandra更加合适一点。
高并发api接口服务数据库:cassandra/riak
需求是读取和写入的并发都非常大,每天动态访问量上亿,尤其是读取。排除HBase,因为太笨重,排除mongodb,因为它仍然是主从结构,我非常不喜欢投票选主的模式,数据分片方面支持有限。其实可选择的只剩下riak和cassandra了。riak支持任意格式的数据,比较适合全手动地存储。cassandra是面向列的,能够帮助我们更多地完成一些业务逻辑。riak完整实现了向量时钟,而cassandra通过时间戳维护一致性。不过对cassandra和riak的索引机制还不够了解,无法确定索引的方便程度和可维护性。暂时还是偏向于cassandra。
nosql数据库选型的更多相关文章
- 几款主流 NoSql 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- NoSql 数据库
几款主流 NoSql 数据库的对比 posted @ 2016-05-11 21:36 vajoy 阅读(915) 评论(3) 编辑 收藏 最近小组准备启动一个 node 开源项目,从前端亲和力. ...
- 开源软件:NoSql数据库 - 图数据库 Cassandra
转载原文:http://www.cnblogs.com/loveis715/p/5299495.html Cassandra简介 在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了 ...
- Expo大作战(十六)--expo结合firebase 一个nosql数据库(本章令我惊讶但又失望!)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 几款主流 NoSql 数据库的对比(转)
转自:http://www.cnblogs.com/vajoy/p/5471308.html 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoS ...
- Linux实战教学笔记44:NoSQL数据库开篇之应用指南
第1章 NoSQL数据库 1.1 NoSQL概述 自关系型数据库诞生40年以来,从理论产生发展到现实产品,例如:大家最常见的MySQL和Oracle,逐渐在数据库领域里上升到了霸主地位,形成每年高达数 ...
- 主流 NoSQL 数据库对比
HBase HBase 是 Apache Hadoop 中的一个子项目,属于 bigtable 的开源版本,所实现的语言为Java(故依赖 Java SDK).HBase 依托于 Hadoop 的 H ...
- 《滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路》
SSD:采用闪存: 读的速度很快:写入数据时,因为需要通过加压的方式对存储单元进行电子填充,所以速度略慢:擦除速度最慢,擦除块的时间在ms级.在使用SSD的时,需要考虑到SSD的读写不平衡的特性. 滴 ...
随机推荐
- [转]Android中dp,px,sp概念梳理以及如何做到屏幕适配
http://blog.csdn.net/jiangwei0910410003/article/details/40509571 今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI ...
- POJ1330Nearest Common Ancestors——近期公共祖先(离线Tarjan)
http://poj.org/problem? id=1330 给一个有根树,一个查询节点(u,v)的近期公共祖先 836K 16MS #include<iostream> #includ ...
- eclipse 上安装systemgui
http://wiki.eclipse.org/Linux_Tools_Project/PluginInstallHelp http://wiki.eclipse.org/Linux_Tools_Pr ...
- 高级性能调试手段(oprofile+gprofile)+内核追踪手段:LTT
http://blog.csdn.net/wlsfling/article/details/5876134http://www.lenky.info/archives/2012/03/1371http ...
- Unix网络编程代码 第13章 守护进程和inetd超级服务器
1. 概述 守护进程是在后台运行且不与任何控制终端关联的进程.unix系统通常有很多守护进程在后台运行,执行不同的管理任务. 守护进程没有控制终端通常源于它们由系统初始化脚本启动.然而守护进程也 ...
- MVVM之View和ViewModel的关联
概要: 将所有的VM在加载到Application的Static Resource中,然后在View中用标签指定. 实现: 1)采用特性指定要添加到StaticResource中的对象 public ...
- 什么是html,什么是php
学了这么长时间的网站建设,好像对这两个概念说以来还是语无伦次的,所以就来写一写了.html是什么呢,官方解释:超文本标记语言,超文本就是指页面可以包含图片,连接等非文字元素.超文本标记语言也是一种规范 ...
- Win7设置承载网络 分类: 网络 2014-10-30 09:08 105人阅读 评论(0) 收藏
Win7设置承载网络 (1)最重要的第一步,要知道自己的网卡是否支持承载网络,如果不支持就悲剧地一票否决了,支持的话才能开始以后各步骤的设置. netsh wlan show drivers (2)设 ...
- Datum Form Goole Android
1. <TurboChargeYourUI-How to make your AndroidUI fast and efficient> 2. <The World of List ...
- jdbc - 连接数据库的url
MySql: driver:com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/database_name SQL Server 2008: ...