NoSQL架构实践(一)以NoSQL为辅

经常有朋友遇到困惑,看到NoSQL的介绍,觉得很好,但是却不知道如何正式用到自己的项目中。很大的原因就是思维固定在MySQL中了,他们问得最多的问题就是用了NoSQL,我如何做关系查询。那么接下来,我们看下怎么样在我们的系统中使用NoSQL。

怎么样把NoSQL引入到我们的系统架构设计中,需要根据我们系统的业务场景来分析,什么样类型的数据适合存储在NoSQL数据库中,什么样类型的数据必须使用关系数据库存储。明确引入的NoSQL数据库带给系统的作用,它能解决什么问题,以及可能带来的新的问题。下面我们分析几种常见的NoSQL架构。

(一)NoSQL作为镜像

    不改变原有的以MySQL作为存储的架构,使用NoSQL作为辅助镜像存储,用NoSQL的优势辅助提升性能。

 

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

  1. //写入数据的示例伪代码   
  2. //data为我们要存储的数据对象   
  3. data.title=”title”;   
  4. data.name=”name”;   
  5. data.time=”2009-12-01 10:10:01”;   
  6. data.from=”1”;   
  7. id=DB.Insert(data);  
  8. //写入MySQL数据库   
  9. NoSQL.Add(id,data);  
  10. //以写入MySQL产生的自增id为主键写入NoSQL数据库 

如果有数据一致性要求,可以像如下的方式使用

  1. //写入数据的示例伪代码   
  2. //data为我们要存储的数据对象   
  3. bool status=false; DB.startTransaction();  
  4. //开始事务   
  5. id=DB.Insert(data);  
  6. //写入MySQL数据库   
  7. if(id>0){  
  8.      status=NoSQL.Add(id,data);  
  9. //以写入MySQL产生的自增id为主键写入NoSQL数据库  
  10. }   
  11. if(id>0 && status==true){  
  12.      DB.commit();  
  13. //提交事务  
  14. }else{  
  15.      DB.rollback();  
  16. //不成功,进行回滚  

上面的代码看起来可能觉得有点麻烦,但是只需要在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组合

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

把需要查询的字段,一般都是数字,时间等类型的小字段存储于MySQL中,根据查询建立相应的索引,其他不需要的字段,包括大文本字段都存储在NoSQL中。在查询的时候,我们先从MySQL中查询出数据的主键,然后从NoSQL中直接取出对应的数据即可。

这种架构模式把MySQL和NoSQL的作用进行了融合,各司其职,让MySQL专门负责处理擅长的关系存储,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性能也得到提高。

总结

以NoSQL为辅的架构还是以MySQL架构的思想为中心,只是在以前的架构上辅助增加了NoSQL来提高其性能和可扩展性。这种架构实现起来比较容易,却能取得不错的效果。如果正想在项目中引入NoSQL,或者你的以MySQL架构的系统目前正出现相关的瓶颈,希望本文可以为你带来帮助。

 

【编辑推荐】

  1. NoSQL理论研究:内存是新的硬盘,硬盘是新的磁带
  2. 关于NoSQL数据库你应该知道的10件事
  3. NoSQL就业形势分析:Cassandra和MongoDB***
  4. 用NoSQL来替代MySQL在Digg中的原因
  5. 详解NoSQL数据库使用实例

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/290399.html<

(0)
管理的头像管理
上一篇2025-05-19 05:07
下一篇 2025-05-19 05:08

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注