`
dingjob
  • 浏览: 183200 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Nosql 学习笔记(一)

阅读更多

如今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存储结构进行修改,是否可以解决如上的缺点

 

分享到:
评论
6 楼 forchenyun 2010-08-01  
期待深入的解析
5 楼 miaojihao 2010-07-31  
都挺先进的啊.......
4 楼 J-catTeam 2010-07-30  
mathgl 写道
J-catTeam 写道
twitter已经弃用cassandra了。NoSql的应用场景很重要

似乎又用回mysql了...

是的,官方给出的原因是使用还不成熟,和使用中出现很多问题
在一定的场景下·cassandra的读操作不是很理想
3 楼 mathgl 2010-07-30  
J-catTeam 写道
twitter已经弃用cassandra了。NoSql的应用场景很重要

似乎又用回mysql了...
2 楼 J-catTeam 2010-07-29  
twitter已经弃用cassandra了。NoSql的应用场景很重要
1 楼 ymkyve 2010-07-29  
  nosql 的确实可以应用中加以尝试

     job哥可以结合某个具体案例来谈谈,呵呵,不经意间上主页了

相关推荐

    NoSQL整理笔记资料共享

    在NoSQL的学习笔记中,我们首先接触到的是CAP理论,它是NoSQL数据库设计的基础。CAP理论指出,在分布式系统中,无法同时保证一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。...

    Redis全套学习笔记-带章节目录-114页.pdf

    Redis全套学习笔记 Redis是一种基于内存的NoSQL数据库,具有高性能、可扩展性和灵活性等特点。以下是Redis的详细知识点: 安装和启动 * 安装Redis可以通过下载软件包或使用yum、apt-get等安装工具进行安装。 * ...

    Redis学习笔记.pdf

    综上所述,Redis作为NoSQL数据库中的一个重要成员,在应对大数据和高并发场景中具有明显的优势,成为当前许多互联网应用的首选。随着技术的不断发展,Redis也在不断地更新和完善其功能,以适应日益增长的业务需求。

    大数据-大数据挑战与NoSQL数据库技术

    《大数据挑战与NoSQL数据库技术》... 《大数据挑战与NoSQL数据库技术》对大数据时代面临的挑战,以及NoSQL数据库的基本知识做了清晰的阐述,有助于读者整理思路,了解需求,并更有针对性、有选择地深入学习相关知识。

    redis学习笔记.docx

    Redis学习笔记 Redis是基于键值对存储的NoSQL数据库,可以用来存储和检索数据。下面是Redis的基础知识点: 基础命令 * set key value:保存一个数据,重复set相同的key只会保存最新的value * get key:获取一个...

    大数据技术学习笔记1

    大数据技术学习笔记1 是一份关于大数据技术的学习笔记,涵盖了大数据技术的基本概念、Hadoop 生态系统、MapReduce 算法、Spark 框架、分布式计算平台等多个方面。 Hadoop 生态系统 Hadoop 是一个基于 Java 的开源...

    redis的学习笔记 redis.pdf

    在本次学习笔记中,主要介绍了String类型的命令。String是最基本的类型,可以存储任何形式的数据,如二进制数据、数字或字符串。在String类型中,可以使用set命令设置值,使用get命令获取值,append命令用于追加字符...

    大数据学习笔记

    大数据学习笔记 本资源摘要信息涵盖了大数据领域中的多个方面,包括Hadoop、HBase、Sqoop、Spark和Hive等技术栈。下面将对这些技术栈进行详细的解释和分析。 一、HDFS架构详尽分析 HDFS(Hadoop Distributed File...

    redis学习笔记Redis.md

    ### Redis 学习笔记知识点概览 #### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only SQL)泛指非关系型数据库,它们通常不使用传统的表格关系来存储数据。 - **特性**: NoSQL ...

    redis学习笔记

    ### Redis 学习笔记知识点概览 #### 一、Redis 简介及特性 - **Redis**(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统,它支持多种数据结构,如字符串(strings)、散列(hashes)、列表...

    Mongodb学习笔记.docx

    本文档是 MongoDB 学习笔记,涵盖了 NoSQL、Cache、运行平台等多个方面的知识点。 一、NoSQL 数据库 MongoDB MongoDB 是一个强大、灵活、可扩展性好的文档数据存储器,可以完成大部分关系数据库所具备的功能。它...

    MySQL学习笔记

    ### MySQL学习笔记知识点详解 #### 一、数据库概述 数据库是指按照特定的数据结构来组织、存储和管理数据的集合体。随着信息技术的进步和社会需求的增长,数据库已经从最初的简单存储发展成为用户所需的各种复杂...

    javaEE学习笔记

    本学习笔记涵盖了JavaEE的核心技术,帮助学习者深入理解和掌握javaweb的各项技能。 1. **Servlet与JSP** - **Servlet**:Servlet是Java编写的服务器端程序,主要用于扩展服务器的功能。在JavaEE中,Servlet处理...

    大数据技术原理学习笔记.docx

    本笔记基于林子雨老师在MOOC上的《大数据技术原理》课程,旨在为IT从业者和大学生提供一个全面了解大数据的基础框架。 首先,我们要认识到大数据的发展背景。随着互联网的普及,以及物联网、社交媒体、移动设备等...

    spark学习笔记

    本学习笔记集中介绍了Spark SQL在spark-shell中的操作方法,以及如何使用Spark进行数据清洗和转换成DataFrame的操作。 首先,Spark SQL是Spark用于处理结构化数据的一个组件,它提供了SQL接口,可以执行SQL查询。...

    胡伟煌 Linux学习笔记

    胡伟煌 Linux学习笔记 本文档是胡伟煌 Linux学习笔记的知识点总结,涵盖了Linux文件系统、Linux介绍、Linux文件权限、Shell...本文档涵盖了Linux学习笔记的多个方面的知识点,旨在为读者提供一个系统化的学习资源。

    Hadoop学习笔记

    这个“Hadoop学习笔记”涵盖了Hadoop生态系统中的核心组件,包括HDFS(Hadoop分布式文件系统)、HBase(一个分布式、列式存储的数据库)、Hive(数据仓库工具)以及Spark(一个快速、通用且可扩展的数据处理引擎)。...

    开发学习笔记供大家学习参考

    【开发学习笔记】是一份非常宝贵的资源,旨在帮助学习者深入理解和掌握IT开发领域的各种知识。这份笔记集合了作者在学习过程中的心得、体会以及实践经验,对于初学者和有一定经验的开发者来说,都是不可多得的参考...

Global site tag (gtag.js) - Google Analytics