码迷,mamicode.com
首页 > 数据库 > 详细

冷热数据库分离思路

时间:2018-09-14 18:22:31      阅读:1143      评论:0      收藏:0      [点我收藏+]

标签:技术分享   tool   查询条件   数据同步   span   说明   优先   ict   相同   

1、数据库分库而不是分表,分表需要考虑后期的查询问题,此外还需要注意分表的算法(哈希算法)。

2、热数据只占全部数据的一部分,因此每次优先查询热库,以下情况才查询冷库

   -  当查询条件未命中(结果集为空)时,查询冷库。 
   -  当查询条件部分命中时,查询冷库。

3、为了区分部分命中和全部命中,可以在热库中建一张R表存放每次查询冷库的查询条件和查询结果数量和查询结果的主键,每次查询热库时,对比相同查询条件的查询结果数量是否一致。一致,则本次查询结束。不一致,则需要到冷库中进行查询。

4、更优方案:不一致的情况,只到冷库中查询未查到的数据。此时R表需要存放的不仅是查询结果数量,还有查询结果的所有主键。

5、举例说明:100条中80条还是热数据 20条变成了冷数据,其实应该只是对冷数据库发起这20条数据的请求。此时需要将R表数据拿出来比对,只查一部分冷数据。

6、热库=>冷库 : 查询和使用热数据时,将一段时间不再使用的热数据移到冷库。

7、冷库=>热库 :查询冷库时,将本次查询的结果移到热库,附上最新查询日期。

8、数据同步(每次查询进行或达到一定量级进行)

9、关于命中的处理:制定查询条件字典 如 where a=? and b=? 这个条件的字典为 

  

public static IDictionary<int,int> QueryKeyValues=new IDictionary<int,int>{
 (0,1),(1,2),(3,3)
}

 

  先进行查询条件的字典命中处理=> 假设此时的查询方法为 queryFunction(int a,int b) 

  queryFunction(int a,int b) {}

技术分享图片
public object QueryFunction(int a,int b) {
    
   1.若 <a,b> 存在于 QueryKeyValues中则到R表中找出查询条件为<a,b>的IdString都有哪些 以此将Id分开存取
   2.获得IdString后 比对需要到冷库查询的List<string> singleId
   3.循环执行单条语句查询逻辑 SingleColdDBQuery(List<string> singleId)
}
技术分享图片

 

冷热数据库分离思路

标签:技术分享   tool   查询条件   数据同步   span   说明   优先   ict   相同   

原文地址:https://www.cnblogs.com/lyc94620/p/9648058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!