如今Nosql 可谓炙手可热,各大社交网站facebook,twitter等也纷纷用上了nosql的产品,这几天借着团队分享的春风,也大概学习了下,还非常粗浅
1.主流的Nosql 数据存储系统
facebook、twitter和digg使用的cassandra
日本前两位的社交网站使用的 Tokyo Cabinet、Tokoy Tyrant (TT)
提供更加丰富的查询的mongoDB
2. Nosql 能做什么,有什么特性
通过数据分区复制来达到高可靠性(High Availability)和高可伸缩性(High Scalability)
以文件的形式同样可以满足海量数据存储(Huge Storage),cassandra在数据达到
各个节点是对称的,没有中心节点,这样就保证了不会出现单点故障(有中心点就存在中心点down掉的可能,这时候所有的应用就不可用了)
3. Nosql 不能做什么
关联查询,以cassandra的hector为例,必须通过自己生成的ID来做分布操作,查询时也是分两步查询
我们可以先生成一个uuid 用于关联
guid = post.first.to_guid
我们可以用如下类似外键的方式来做关联
multiblog.insert(:Comments, guid,
{UUID.new => 'I like this cat. - Evan'})
multiblog.insert(:Comments, guid,
{UUID.new => 'I am cuter. - Buttons'})
模糊查询
group by 操作
order by操作
4. 基于如上的一些缺点,Nosql并不能完全代替了关系数据库,他在复杂业务面前显得脆弱无比,只能用于一些简单的业务。当然应该有方法解决如上一些难题,比如order by应该可以用通过程序来排序,但是这肯定不是最好的方法,效率也不高, Nosql不能满足如上业务的根本问题在于存储结构过于简单,如果它也可以和搜索引擎的索引一样,能够建立8种文件的存储结构,肯定也是可以满足 like查询, order by操作的。这又和海量存储有矛盾,当一个value被存储成非常复杂的结构时,字节数会变的异常的大。
5. 培训中一些问题的总结和理解
(1) 做了一个hector的小例子,查询时报运行出错,而在linux客户端运行是正常返回查询结果的。
分析:说明连接的机器是没有问题,问题在集群配置上
解决方法:只启动了一台机器,却把副本数设置成了2,导致客户端java程序查询时会出错。
storage-conf.xml里面replicationFactor设置为1,重启,ok了
(2) 什么是CAP原理
这里是网上找的一个解释,CAP原理中,有三个要素:
- 一致性(Consistency)
- 可用性(Availability)
- 分区容忍性(Partition tolerance)
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数web应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
Nosql正式牺牲了这种一致性,而保证了其它两个方面,试验中可以看到,数据存储速度不是那么块,通常两秒钟以后才能得到数据。
(3). 当有5台机器,配置了2个副本,两个副本如何存储
采用一致性hash 算法(consistent Hashing),先求出服务器节点的hash值,并将其映射到0~2^32的圆上,然后用同样的方法求出存储数据的键的hash值,并映射到圆上,然后从数据映射的位置开始顺时针查找,将数据存储在找到的第一个节点上,如果超过了2^32仍然找不到,这样就保存在第一个节点上。
这样添加了一个节点后,只有添加节点的逆时针第一台机器上的数据需要迁移。迁移量小。
(4). cassandra删除数据如何操作
Thrift是其自带的api,hector只是对其进行封装,删除是有相应Api的,只是不能保证数据立刻同步,但最终会一致的,前面已经说了它牺牲了一致性。
(5). Cassandra在数据最很大时,数据库文件可以分开吗?
这本身就是不存在一个表的概念,你可以将相同的数据结构定义为两个CF,对于没有定义两个,当文件太大的时候是否会分出来,节省读入内存的文件占用,需要研究。
(6). Cassandra负载是由客户端来处理吗?如果不是,那么客户端是如何知道从哪里取数据?
应该是由客户端路由的,需要进一步研究
接下来的重点是看代码,弄清楚原理,考虑是否可以对cansandra存储结构进行修改,是否可以解决如上的缺点
分享到:
相关推荐
NoSQL学习笔记,分析常用NoSQL技术优劣,进行对比,并深入分析了Memcached数据缓冲技术。
整理了一些有关NoSQL的学习笔记,非常系统。希望能够对学习NoSQL的朋友有所帮助
《大数据挑战与NoSQL数据库技术》... 《大数据挑战与NoSQL数据库技术》对大数据时代面临的挑战,以及NoSQL数据库的基本知识做了清晰的阐述,有助于读者整理思路,了解需求,并更有针对性、有选择地深入学习相关知识。
Redis全套学习笔记,分享的是整理的《Redis 全套学习笔记.pdf》,图文并茂,特别详细,基本上涵盖了 Redis 所有知识点。redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,...
mongodb个人心得,nosql个人总结学习笔记
关于MongDB的学习笔记,参考了网上的资料整理的,希望对大家有用,如果文档有什么问题的话,希望大家指摘。
个人笔记整理(带目录),共8个章节: 一.Hbase快速入门 二.Apache HBase配置 三.Hbase数据存储 四.HBase协处理器与二级索引 五.PHOENIX操作HBASE 六.HBase设计与优化 七.HBase与Spark集成 八.Trafodion操作HBase 共146...
由于本人目前允许上传的资源太小,所以无法上传整个的技术学习笔记(JAVA 五年的工作经验和学习笔记),待以后有机会会分享给大家。 技术体系包括: J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)...
Mongodb,分布式文档存储数据库,由C++...MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。
一站式SpringBoot for NoSQL开发教程学习手册。 含SpringBoot2.0 +: 雷迪斯 高速缓存 MongoDB 弹性搜索 卡桑德拉 CouchBase 索尔 Neo4j 宝石火 共9种常用NoSQL数据库操作,工具类,演示代码。用于整理日常常用...
主要介绍了MongoDB系列教程(一):NoSQL起源,本文讲解了为什么出现NoSQL、NoSQL历史、SQL和NoSql的区别、NoSQL数据库类型等内容,需要的朋友可以参考下
比较好的Nosql选择,适合初学者,比较实惠。
模块5:优化引擎,抽象成语法树后,就会对该命令进行一系列的对用户来说透明的优化措施——查询语句可能重新构造;目标表的读取顺序; 模块6:缓存以及缓冲引擎,对于select语句,解析sql语句之前。mysqld先检查查询...
之前整理的redis的一些相关知识,从安装到配置,主要是介绍各数据类型和命令
常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-...
一、前言 最近开始学习非关系型数据库... MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。
常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-...
MongoDB是当前NoSQL数据库产品中最热门的一种。它在许多场景下可用于代替传统的关系型数据库或者键/值存储方式,MongoDB使用C++开发
常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-...
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的...