加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于NoSql的学习

发布时间:2020-12-13 13:41:20 所属栏目:百科 来源:网络整理
导读:1.主流的Nosql 数据存储系统 facebook、twitter和digg使用的cassandra 日本前两位的社交网站使用的 Tokyo Cabinet、Tokoy Tyrant (TT) 提供更加丰富的查询的mongoDB 2. Nosql 能做什么,有什么特性 通过数据分区复制来达到高可靠性(High Availability)和高

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来做分布操作,查询时也是分两步查询

Java代码

  • 我们可以先生成一个uuid 用于关联
  • guid = post.first.to_guid
  • 我们可以用如下类似外键的方式来做关联
  • multiblog.insert(:Comments,guid,
  • {UUID.new=>'I like this cat. - Evan'})
  • multiblog.insert(:Comments,
  • {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存储结构进行修改,是否可以解决如上的缺点

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读