当前位置:首页 » NoSQL在线教程 » MySQL和NoSQL组合

MySQL和NoSQL组合

NoSQL架构实践—MySQL和NoSQL组合

MySQL和NoSQL组合

MySQL中只存储需要查询的小字段,NoSQL存储所有数据。

图 3 -MySQLNoSQL组合

//写入数据的示例伪代码 


//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的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架构的系统目前正出现相关的瓶颈,希望本文可以为你带来帮助。