精华内容
下载资源
问答
  • nosql应用场景

    千次阅读 2015-08-17 18:03:24
    NoSql,主要指非关系的、分布式的数据库设计模式。也有许多专家将NoSql解读为Not Only SQL,表示NoSQL只是关系数据库的补充,而不是替代方案。一般而言,NoSQL数据库产品都放弃了关系型数据库的两大重要基础:以关系...

          关系数据库根据范式将表到最小冗余,再通SQL查询出数据。NoSQL数据库产品都放弃了关系型数据库的两大重要基础:以关系代数为基础的结构化查询语句(SQL)和事务一致性保证(ACID)。而强化了其他一些大型网站更关注的特性:高可用性和可伸缩性。

            NoSql准确点翻译成Not Only SQL    ,并非表之间没有关系。比如可以通过Id和索引来读取多个表中的数据,然后手动将他们关联在一起。相对对于SQL来讲,关联性相对更自由,限制也较少。但是它为非关系而生,不适用于需要大量关联的数据。

    1、High performance - 对数据库高并发读写的需求

    web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。


    2、对海量数据的高效率存储和访问

    对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。


    3、高可用性和可伸缩性
    在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?


    在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如:

    1、数据库事务一致性需求
    很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。
    2、数据库的写实时性和读实时性需求
    对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性。
    3、对复杂的SQL查询,特别是多表关联查询的需求
    任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
    因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。
    NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。
    当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而 NoSQL 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。


    MongoDB

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是 类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语 言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。






     

    展开全文
  • NoSQL的使用场景

    2020-01-31 13:05:33
    NoSQL=Not Only SQL 常见的NoSQL解决方案: 1)K-V存储:解决关系数据库无法存储数据结构的问题,以Redis为代表;... 使用场景:在常见的电商网站设计中,可以使用关系型数据库存储商品库存信息、订单基...

    NoSQL=Not Only SQL

    常见的NoSQL解决方案:

    1)K-V存储:解决关系数据库无法存储数据结构的问题,以Redis为代表;

    2)文档数据库:解决关系数据库强shema约束的问题,以MongoDB为代表;

              目前绝大多数文档数据库存储的数据格式是JSON或BSON;

         使用场景:在常见的电商网站设计中,可以使用关系型数据库存储商品库存信息、订单基础信息,而使用文档数据库来存储商品详细信息。(因为不同的商品属性差异很大)

    3)列式数据库:解决关系数据库大数据场景下的I/O问题,以HBase为代表;

         列式存储具有更高的存储压缩比,能够节省更多的存储空间,行式存储压综率在3:1到5:1左右,而列式存储压缩纺一般在8:1到30:1左右。

     使用场景 :一般将列式存储应用在离线的大数据分析和统计场景中,因为这种场景主要是针对部分列进行操作,且数据写入后就无须再更新删除。

    4)全文搜索引擎:解决关系数据库全文搜索性能问题,以Elasticsearch为代表;

    展开全文
  • 今天小编就为大家分享一篇关于sql与各个nosql数据库使用场景的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • NoSQL数据库试用场景

    2014-03-27 14:49:34
     适合应用场景:写操作远多于读操作(如日志记录),节点规模变化比较快的应用场景 二 CouchDB  适合CMS,电话本,地址簿等应用 三 MongoDB  适用于动态查询支持,需要使用索引的分布式应用,需要对大数据库有性能...

    一 Cassandra

       适合应用场景:写操作远多于读操作(如日志记录),节点规模变化比较快的应用场景

    二 CouchDB

      适合CMS,电话本,地址簿等应用

    三 MongoDB

      适用于动态查询支持,需要使用索引的分布式应用,需要对大数据库有性能要求,优酷的在线评论业务已部分迁移到mongodb

    四 Redis

     适用于数据变化快且数据库大小可预见(适合内存容量)的应用,股票价格,数据分析,实时数据收集,实时通信,新浪微博是全球Redis最大用户

    五 MemBase

    适用于需要低时延数据访问,支持高并发以及高可用性的应用程序

    六 Neo4j

    适用于图形一类数据,例如,社会关系,公共交通网络,地图及网络拓扑



    展开全文
  • Nosql的实际应用场景

    万次阅读 2015-03-30 17:20:45
    Nosql 实际应用场景

    怎么样把NoSQL引入到我们的系统架构设计中,需要根据我们系统的业务场景来分析,什么样类型的数据适合存储在NoSQL数据库中,什么样类型的数据必须使用关系数据库存储。明确引入的NoSQL数据库带给系统的作用,它能解决什么问题,以及可能带来的新的问题。下面我们分析几种常见的NoSQL架构。
    (一)NoSQL作为镜像
    这里写图片描述
    不改变原有的以MySQL作为存储的架构,使用NoSQL作为辅助镜像存储,用NoSQL的优势辅助提升性能。

    图 1 -NoSQL为镜像(代码完成模式 )

    //写入数据的示例伪代码  
    
        //data为我们要存储的数据对象  
        data.title=”title”;  
        data.name=”name”;  
        data.time=”2009-12-01 10:10:01”;  
        data.from=”1”;  
        id=DB.Insert(data);//写入MySQL数据库  
        NoSQL.Add(id,data);//以写入MySQL产生的自增id为主键写入NoSQL数据库  
    如果有数据一致性要求,可以像如下的方式使用
    
     //写入数据的示例伪代码  
        //data为我们要存储的数据对象  
        bool status=false;  
        DB.startTransaction();//开始事务  
        id=DB.Insert(data);//写入MySQL数据库  
        if(id>0){  
            status=NoSQL.Add(id,data);//以写入MySQL产生的自增id为主键写入NoSQL数据库  
        }  
        if(id>0 && status==true){  
            DB.commit();//提交事务  
        }else{  
            DB.rollback();//不成功,进行回滚  
        }  

    上面的代码看起来可能觉得有点麻烦,但是只需要在DB类或者ORM层做一个统一的封装,就能实现重用了,其他代码都不用做任何的修改。
    这种架构在原有基于MySQL数据库的架构上增加了一层辅助的NoSQL存储,代码量不大,技术难度小,却在可扩展性和性能上起到了非常大的作用。只需要程序在写入MySQL数据库后,同时写入到NoSQL数据库,让MySQL和NoSQL拥有相同的镜像数据,在某些可以根据主键查询的地方,使用高效的NoSQL数据库查询,这样就节省了MySQL的查询,用NoSQL的高性能来抵挡这些查询。

    图 2 -NoSQL为镜像(同步模式)
    这里写图片描述
    这种不通过程序代码,而是通过MySQL把数据同步到NoSQL中,这种模式是上面一种的变体,是一种对写入透明但是具有更高技术难度一种模式。这种模式适用于现有的比较复杂的老系统,通过修改代码不易实现,可能引起新的问题。同时也适用于需要把数据同步到多种类型的存储中。
    MySQL到NoSQL同步的实现可以使用MySQL UDF函数,MySQL binlog的解析来实现。可以利用现有的开源项目来实现,比如:
    MySQL memcached UDFs:从通过UDF操作Memcached协议。
    国内张宴开源的mysql-udf-http:通过UDF操作http协议。
    有了这两个MySQL UDF函数库,我们就能通过MySQL透明的处理Memcached或者Http协议,这样只要有兼容Memcached或者Http协议的NoSQL数据库,那么我们就能通过MySQL去操作以进行同步数据。再结合lib_mysqludf_json,通过UDF和MySQL触发器功能的结合,就可以实现数据的自动同步。
    (二)MySQL和NoSQL组合

    这里写图片描述
    MySQL中只存储需要查询的小字段,NoSQL存储所有数据。

    图 3 -MySQL和NoSQL组合

    
        //写入数据的示例伪代码  
    
        //data为我们要存储的数据对象  
        data.title=”title”;  
        data.name=”name”;  
        data.time=2009-12-01 10:10:01”;  
        data.from=1”;  
        bool status=false;  
        DB.startTransaction();//开始事务  
        id=DB.Insert(“INSERT INTO table (from) VALUES(data.from)”);//写入MySQL数据库,只写from需要where查询的字段  
        if(id>0){  
            status=NoSQL.Add(id,data);//以写入MySQL产生的自增id为主键写入NoSQL数据库  
        }  
        if(id>0 && status==true){  
            DB.commit();//提交事务  
        }else{  
            DB.rollback();//不成功,进行回滚  
        }  

    把需要查询的字段,一般都是数字,时间等类型的小字段存储于MySQL中,根据查询建立相应的索引,其他不需要的字段,包括大文本字段都存储在NoSQL中。在查询的时候,我们先从MySQL中查询出数据的主键,然后从NoSQL中直接取出对应的数据即可。
    这种架构模式把MySQL和NoSQL的作用进行了融合,各司其职,让MySQL专门负责处理擅长的关系存储,NoSQL作为数据的存储。简单的说,就是在mysql中存储1对多/多对多的映射关系,然后根据关系查询出主键,再查nosql。或者在nosql直接维护映射关系,实现范围查询。它有以下优点:
    * 节省MySQL的IO开销。由于MySQL只存储需要查询的小字段,不再负责存储大文本字段,这样就可以节省MySQL存储的空间开销,从而节省MySQL的磁盘IO。我们曾经通过这种优化,把MySQL一个40G的表缩减到几百M。
    * 提高MySQl Query Cache缓存命中率。我们知道query cache缓存失效是表级的,在MySQL表一旦被更新就会失效,经过这种字段的分离,更新的字段如果不是存储在MySQL中,那么对query cache就没有任何影响。而NoSQL的Cache往往都是行级别的,只对更新的记录的缓存失效。
    * 提升MySQL主从同步效率。由于MySQL存储空间的减小,同步的数据记录也减小了,而部分数据的更新落在NoSQL而不是MySQL,这样也减少了MySQL数据需要同步的次数。
    * 提高MySQL数据备份和恢复的速度。由于MySQL数据库存储的数据的减小,很容易看到数据备份和恢复的速度也将极大的提高。
    比以前更容易扩展。NoSQL天生就容易扩展。经过这种优化,MySQL性能也得到提高。
    比如手机凤凰网就是这种架构 http://www.cnblogs.com/sunli/archive/2010/12/20/imcp.html
    总结:上述以NoSQL为辅的架构还是以MySQL架构的思想为中心,只是在以前的架构上辅助增加了NoSQL来提高其性能和可扩展性。这种架构实现起来比较容易,却能取得不错的效果。如果正想在项目中引入NoSQL,或者你的以MySQL架构的系统目前正出现相关的瓶颈,希望本文可以为你带来帮助。

    第一种镜像方式,一份数据在RDBMS和NoSQL中都有存储,主要是使用NoSQL中的高效查询,例如当缓存用的那种key-value,查询时显然性能要高很多。第二种组合使用方式,RDBMS存储映射关系,NoSQL存储数据,以发挥两者的优势。

    接下来我们继续深入下去,换另外一个角度,“以NoSQL为主”来架构系统。
    (三)纯NoSQL架构
    只使用NoSQL作为数据存储。
    

    这里写图片描述
    图 4-纯NoSQL架构

    在一些数据结构、查询关系非常简单的系统中,我们可以只使用NoSQL即可以解决存储问题。这样不但可以提高性能,还非常易于扩展。手机凤凰网的前端展示系统就使用了这种方案。
    在一些数据库结构经常变化,数据结构不定的系统中,就非常适合使用NoSQL来存储。比如监控系统中的监控信息的存储,可能每种类型的监控信息都不太一样。这样可以避免经常对MySQL进行表结构调整,增加字段带来的性能问题。
    这种架构的缺点就是数据直接存储在NoSQL中,不能做关系数据库的复杂查询,如果由于需求变更,需要进行某些查询,可能无法满足,所以采用这种架构的时候需要确认未来是否会进行复杂关系查询以及如何应对。
    非常幸运的是,有些NoSQL数据库已经具有部分关系数据库的关系查询特性,他们的功能介于key-value和关系数据库之间,却具有key-value数据库的性能,基本能满足绝大部分web 2.0网站的查询需求。比如:MongoDB就带有关系查询的功能,能解决常用的关系查询,所以也是一种非常不错的选择。下面是一些MongoDB的资料:
    * 视觉中国的NoSQL之路:从MySQL到MongoDB
    * Choosing a non-relational database; why we migrated from MySQL to MongoDB
    * 最近的一次Mongo Beijing 开发者聚会也有一部分资料。
    虽然Foursquare的MongoDB宕机事件使人们对MongoDB的自动Shard提出了质疑,但是毫无疑问,MongoDB在NoSQL中,是一个优秀的数据库,其单机性能和功能确实是非常吸引人的。由于上面的例子有详细的介绍,本文就不做MongoDB的使用介绍。
    Tokyo Tyrant数据库带有一个名为table的存储类型,可以对存储的数据进行关系查询和检索。一个table库类似于MySQL中的一个表。下面我们看一个小演示。我们要存储一批用户信息,用户信息包含用户名(name),年龄(age),email,最后访问时间(lastvisit),地区(area)。下面为写入的演示代码:

    [php] view plaincopy

     <?php  
        $tt = new TokyoTyrantTable ( "127.0.0.1", 1978 );  
        $tt->vanish ();//清空  
        $id = $tt->genUid ();//获取一个自增id  
        //put方法提供数据写入。 put ( string $key , array $columns );  
        $tt->put ( $id, array ("id" => $id, "name" => "zhangsan", "age" => 27, "email" => "zhangsan@gmail.com", "lastvisit" =>strtotime ( "2011-3-5 12:30:00" ), "area" => "北京" ) );  
        $id = $tt->genUid ();  
        $tt->put ( $id, array ("id" => $id, "name" => "lisi", "age" => 25, "email" => "lisi@126.com", "lastvisit" => strtotime( "2011-3-3 14:40:44" ), "area" => "北京" ) );  
        $id = $tt->genUid ();  
        $tt->put ( $id, array ("id" => $id, "name" => "laowang", "age" => 37, "email" => "laowang@yahoo.com", "lastvisit" =>strtotime ( "2011-3-5 08:30:12" ), "area" => "成都" ) );  
        $id = $tt->genUid ();  
        $tt->put ( $id, array ("id" => $id, "name" => "tom", "age" => 21, "email" => "tom@hotmail.com", "lastvisit" =>strtotime ( "2010-12-10 13:12:13" ), "area" => "天津" ) );  
        $id = $tt->genUid ();  
        $tt->put ( $id, array ("id" => $id, "name" => "jack", "age" => 21, "email" => "jack@gmail.com", "lastvisit" =>strtotime ( "2011-02-24 20:12:55" ), "area" => "天津" ) );  
        //循环打印数据库的所有数据库  
        $it = $tt->getIterator ();  
        foreach ( $it as $k => $v ) {  
        print_r ( $v );  
        }  
        ?>  
    比如我们需要查询年龄为21岁的所有用户:
    
    
        <?php   
        $tt = new TokyoTyrantTable ( "127.0.0.1", 1978 );   
        $query = $tt->getQuery ();   
        //查询年龄为21岁的用户   
        $query->addCond ( “age”, TokyoTyrant::RDBQC_NUMEQ, “21” );   
        print_r ( $query->search () );   
        ?>  
    查询所有在2011年3月5日之后登陆的用户:
    
        <?php  
        $tt = new TokyoTyrantTable ( "127.0.0.1", 1978 );  
        $query = $tt->getQuery ();  
        $query->addCond ( “lastvisit”, TokyoTyrant::RDBQC_NUMGE, strtotime ( "2011-3-5 00:00:00" ) );  
        print_r ( $query->search () );  
        ?>  

    从上面的示例代码可以看出,使用起来是非常简单的,甚至比SQL语句还要简单。Tokyo Tyrant的表类型存储还提供了给字段建立普通索引和倒排全文索引,大大增强了其检索功能和检索的性能。
    所以,完全用NoSQL来构建部分系统,是完全可能的。配合部分带有关系查询功能的NoSQL,在开发上比MySQL数据库更加快速和高效。
    (四)以NoSQL为数据源的架构
    数据直接写入NoSQL,再通过NoSQL同步协议复制到其他存储。根据应用的逻辑来决定去相应的存储获取数据。

    这里写图片描述
    图 5 -以NoSQL为数据源的架构

    纯NoSQL的架构虽然结构简单,易于开发,但是在应付需求的变更、稳定性和可靠性上,总是给开发人员一种风险难于控制的感觉。为了降低风险,系统的功能不局限在NoSQL的简单功能上,我们可以使用以NoSQL为数据源的架构。
    在这种架构中,应用程序只负责把数据直接写入到NoSQL数据库就OK,然后通过NoSQL的复制协议,把NoSQL数据的每次写入,更新,删除操作都复制到MySQL数据库中。同 时,也可以通过复制协议把数据同步复制到全文检索实现强大的检索功能。在海量数据下面,我们也可以根据不同的规则,把数据同步复制到设计好的分表分库的 MySQL中。这种架构:
    * 非常灵活。可以非常方便的在线上系统运行过程中进行数据的调整,比如调整分库分表的规则、要添加一种新的存储类型等等。
    * 操作简单。只需要写入NoSQL数据库源,应用程序就不用管了。需要增加存储类型或者调整存储规则的时候,只需要增加同步的数据存储,调整同步规则即可,无需更改应用程序的代码。
    * 性能高。数据的写入和更新直接操作NoSQL,实现了写的高性能。而通过同步协议,把数据复制到各种适合查询类型的存储中(按照业务逻辑区分不同的存储),能实现查询的高性能,不像以前MySQL一种数据库就全包了。或者就一个表负责跟这个表相关的所有的查询,现在可以把一个表的数据复制到各种存储,让各种存储用自己的长处来对外服务。
    * 易扩展。开发人员只需要关心写入NoSQL数据库。数据的扩展可以方便的在后端由复制协议根据规则来完成。
    这种架构需要考虑数据复制的延迟问题,这跟使用MySQL的master-salve模式的延迟问题是一样的,解决方法也一样。包括:

    1. 严格不能延迟的,读取操作路由到主库进行。

      1. 使用部分复制,提高复制速度。(复制部分表)–限于MySQL。
      2. 采用异步复制,复制到从库的时候,是复制到缓冲区的,提高复制速度。
      3. 结合写缓冲。

      在这种以NoSQL为数据源的架构中,最核心的就是NoSQL数据库的复制功能的实现。而当前的几乎所有的NoSQL都没有提供比较易于使用的复制接口来完成这种架构,对NoSQL进行复制协议的二次开发,需要更高的技术水平,所以这种架构看起来很好,但是却不是非常容易实现的。我的开源项目PHPBuffer中有个实现TokyoTyrant复制的例子,虽然是PHP版本的,但是很容易就可以翻译成其他语言。通过这个例子的代码,可以实现从Tokyo Tyrant实时的复制数据到其他系统中。
      总结:以NoSQL为主的架构应该算是对NoSQL的一种深度应用,整个系统的架构以及代码都不是很复杂,但是却需要一定的NoSQL使用经验才行。

      第三种纯NoSQL架构是把NoSQL当普通的数据库来用,存储和查询在一起,即包含NoSQL的优点,也包含NoSQL的缺点。适用于数据不是非常地结构化,查询关系简单的应用系统。第四种以NoSQL为数据源的构架相当于把NoSQL作为数据库集群的前端,简化系统的数据存储和读写,提高性能和系统的扩展性,后台数据到各个RDBMS的复制可以异步进行。

      (五)以NoSQL作为缓存的架构

      由于NoSQL数据库天生具有高性能、易扩展的特点,所以我们常常结合关系数据库,存储一些高性能的、海量的数据。从另外一个角度看,根据NoSQL的高性能特点,它同样适合用于缓存数据。用NoSQL缓存数据可以分为内存模式和磁盘持久化模式。

      1、内存模式
      说起内存模式缓存,我们自然就会想起大名鼎鼎的Memcached。在互联网发展过程中,Memcached曾经解救了数据库的大部分压力,做出了巨大的贡献,直到今天,它依然是缓存服务器的首选。Memcached的常见使用方式类似下面的代码:

    这里写图片描述
    Memcached提供了相当高的读写性能,一般情况下,都足够应付应用的性能要求。但是基于内存的Memcached缓存的总数据大小受限于内存的大小。
    当前如日中天、讨论得异常火热的NoSQL数据库Redis又为我们提供了功能更加强大的内存存储功能。跟Memcached比,Redis的一个key的可以存储多种数据结构Strings、Hashes、Lists、Sets、Sorted sets。Redis不但功能强大,而且它的性能完全超越大名鼎鼎的Memcached。Redis支持List、hashes等多种数据结构的功能,提供了更加易于使用的api和操作性能,比如对缓存的list数据的修改。
    同样,其他一些NoSQL数据库也提供了内存存储的功能,所以也适合用来做内存缓存。比如Tokyo Tyrant就提供了内存hash数据库、内存tree数据库功能,内存tree数据可根据key的顺序进行遍历。你可以通过使用其提供的兼容Memcached协议或自定义的协议来使用。
    2、持久化模式
    虽然基于内存的缓存服务器具有高性能,低延迟的特点,但是内存成本高、内存数据易失却不容忽视。几十GB内存的服务器,在很多公司看来,还比较奢侈。所以,我们应该根据应用的特点,尽量的提高内存的利用率,降低成本。
    大部分互联网应用的特点都是数据访问有热点,也就是说,只有一部分数据是被频繁访问的。如果全部都cache到内存中,无疑是对内存的浪费。
    这时,我们可以利用NoSQL来做数据的缓存。其实NoSQL数据库内部也是通过内存缓存来提高性能的,通过一些比较好的算法,把热点数据进行内存cache,非热点数据存储到磁盘以节省内存占用。由于其数据库结构的简单,从磁盘获取一次数据也比从数据库一次耗时的查询划算很多。用NoSQL数据库做缓存服务器不但具有不错的性能。而且还能够Cache比内存大的数据。
    使用NoSQL来做缓存,由于其不受内存大小的限制,我们可以把一些不常访问、不怎么更新的数据也缓存起来。比如论坛、新闻的老数据、数据列表的靠后的页面,虽然用户访问不多,但是搜索引擎爬虫会访问,也可能导致系统负载上升。
    如果NoSQL持久化缓存也使用类似基于内存的memcached设置过期时间的方式,那么持久化缓存就失去了意义。所以用NoSQL做缓存的过期策略最好不使用时间过期,而是数据是否被更新过,如果数据没有更新,那么就永久不过期。下面我们用代码(php)演示一种实现这种策略的方法:
    场景:新闻站点的评论系统。用户对新闻页面的url进行评论,然后根据url进行查询展示。

    这里写图片描述
    这里写图片描述
    这里写图片描述

    我把上面代码演示的缓存使用方式称为基于版本的缓存。这种方式同样适用于基于内存的Memcached。它能实现缓存数据的实时性,让用户感觉不到延迟。只要用户一发表评论,该新闻的评论缓存就会失效。用户很少去评论一些过时的新闻,那么缓存就一直存在于NoSQL中,避免了爬虫访问过时新闻的评论数据而冲击数据库。
    总结:目前国内的新浪微博已经在大量的使用Redis缓存数据,赶集网也在大量的使用Redis。Redis作为一些List,Hashes等数据结构的缓存,非常适合。
    把NoSQL当持久化Cache使用的模式,在很多大数据量、有热点、查询非热点数据比较消耗资源的场景下比较有用。
    NoSQL架构实践总结
    到这里,关于NoSQL架构实践的三篇文章就结束了。NoSQL架构并不局限于我介绍的三种模式,他们之间也可以进行组合,应该根据你具体的应用场景灵活使用。不管是什么模式,都是为了解决我们的问题而出现的,所以在系统架构的时候,要问下自己,我为什么要用NoSQL;在对NoSQL架构模式选型的时候,要问下自己,我为什么要这么用NoSQL。
    参考链接:
    关于Redis的一些介绍: http://blog.nosqlfan.com/tags/redis
    分布式缓存还是NoSQL(英文): http://goo.gl/VLECa
    NoSQL微群: http://q.t.sina.com.cn/127870
    我的微博: http://t.sina.com.cn/sunli1223
    关于作者
    孙立,目前为去哪儿网(qunar.com)高级系统架构师。曾就职于凤凰网、ku6和搜狐。多年互联网从业经验和程序开发,对分布式搜索引擎的开发,高并发,大数据量网站系统架构优化,高可用性,可伸缩性,分布式系统缓存,数据库分表分库(sharding)等有丰富的经验,并且对运维监控和自动化运维控制有经验。是开源项目phplock,phpbuffer的作者。近期开发了一个NOSQL数据库存储INetDB,是NoSQL数据库爱好者。

    本文整理自:http://www.cnblogs.com/sunli/category/250681.html
    

    源文件:http://blog.csdn.net/zhoudaxia/article/details/8942131 为了方便自己浏览,所以复制过来了。

    展开全文
  • 对比传统关系型数据库,NoSQL有着更为复杂的分类——键值、面向文档、列存储以及图数据库。这里就带你一览NoSQL各种类型的适用场景及一些知名公司的方案选择。 在过...
  • 一、NoSQL入门及应用场景 NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。 常见 Nosql 数据库: Redis memcache HBase ...
  • redis学习-当下NoSQL应用场景简介

    千次阅读 2020-12-06 19:29:22
    SQL和NoSQL双剑合璧 Alibaba中文站商品信息如何存放 看看阿里巴巴中文网站首页以女装/女包包为例 架构发展历程: 1.演变过程 2.第5代 3.第5代架构使命 和我们相关的,多数据源类型的存储问题 看看阿里巴巴中文...
  • 什么是NoSQL NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称,它具有非关系型、分布式、不提供ACID的数据库设计模式等特征。 NoSQL用于...
  • NoSQL 数据库的使用场景

    千次阅读 2013-07-26 23:59:36
    这里就带你一览NoSQL各种类型的适用场景及一些知名公司的方案选择。在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,比如SQL Server、Oracle或者是MySQL。...
  • NoSQL数据库应用场景

    2017-01-10 11:41:00
    ...http://www.csdn.net/article/2013-07-24/2816330-how-to-choose-nosql-db http://www.jb51.net/article/51599.htm 转载于:https://my.oschina.net/cccyb/blog/821943
  • NoSQL以及其应用场景

    千次阅读 2014-04-17 19:27:35
    今天主要想了想在项目(音乐网站)中如何使用我们的有没有必要使用Nosql,突然发现原来只是粗浅的认为:就要用NoSQL,因为NoSQL听起来是高新技术,然后我就要用。而不考虑适合不适合。今天上午看了本 noSql数据库...
  • nosql应用场景——用redis打造山寨twitter 使用关系型数据库时,需要产生一些表、索引等等,但是使用k/v键值数据库我们没有表,我们怎么设计? 我们需要确定一些key来表达对象、以及需要思考用什么类型数据 ...
  • 关系型数据库与NoSQL数据库场景说明

    千次阅读 2016-05-19 15:24:02
    相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。 NoSQL数据库 NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把...
  • NoSQL

    千次阅读 2020-03-18 13:03:05
    NoSQL适用场景 对数据高并发的读写 对数据高可扩展性的 速度够快,能够快速的存取数据 1.取最新N个数据的操作 例如典型的取网站的最新文章、某一电商的最新订单。 2.排行榜应用,取TOP N操作...
  • NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?NoSQL,No SQL?使用 NoSQL 提升写入性能NoSQL 数据库是怎么解决这个问题的呢?总结 对于存储服务来说,我们一般会从两个方面对它做改造: 提升它的读写性能,...
  • 常见NoSQL系统使用场景分析

    千次阅读 2011-11-29 11:15:35
    •Cassandra •特性:分布式与复制的权衡\根据列和键范围进行查询\BigTable类似的功能:... •应用场景:银行,金融行业。数据分析。 ------------------------------------------------------------------------------
  • 主流NoSQL及应用场景详解

    千次阅读 2020-10-12 22:28:00
    点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取来源:r6d.cn/r4P7 对比传统关系型数据库,NoSQL有着更为复杂的分类——键值、面向文档...
  • . 键值数据库 适用案例 现在讲几个适合使用键值数据库的情况 1 存触会话信息 通常来说每一次网络会话都是唯一的所以分配给它们的 session id 值也各 不相同如果应用程序原来要把 session id 存在磁盘上或关系型...
  • 这些模型的分类方法来自于Emil Eifrem 和 NoSQL databases。 文档数据库 源起:受Lotus Notes启发。数据模型:包含了key-value的文档集合例子:CouchDB, MongoDB优点:数据模型自然,编程友好,快速开发,web...
  • Nosql

    2021-09-06 18:15:13
    适用场景 数据库 MongoDB Redis 简介 NoSQL【Non-relational】泛指非关系型的数据库,可用于解决大数据应用难题。 NoSQL的一大优点是易拓展。NoSQL数据库的一个共同特点是去掉了关系数据库的关系型特性,因此...
  • NOSQL

    2021-09-14 14:05:32
    1、什么是NOSQLNoSQL(Not Only Sql),指的是非关系型的数据库。传统的关系型数据库是以表结构来存储数据的,包括了行和列。... 典型应用场景 数据模型 优点 缺点 键值(key-value)
  • 该脑图是介绍NoSQL数据库的使用模型及使用场景,请贡献给大家下载!
  • NoSQL类型介绍及适用场景

    千次阅读 2017-01-12 19:15:48
    于是就有了以Google、Facebook、Amazon这些试图处理更多传输所引领的NoSQL纪元。 NoSQL纪元 当下已经存在很多的NoSQL数据库,比如 MongoDB 、 Redis 、Riak、 Hbase 、Cassandra等等。每一个都拥有以下...
  • Redis—B站学习—redis当下nosql使用场景简介 一、当下是mysql和nosql一起使用 二、阿里巴巴中文站商品信息如何存放的 看看阿里巴巴中文网站首页 架构发展历程 第五代架构的演变 第五代架构使命 和我们相关...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,069
精华内容 24,427
关键字:

nosql场景