冷热数据分离思路

分库:

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)
}

分表:

举个简单的例子,按数据的新旧分表

eg:比如我现在有一个订单表,日均写入几万几十万数据进去,可以这样处理,存储数据的时候存储双份,order表存一份数据,order_history表同样也存一份数据,然后呢,order表弄一个定时任务,每天定期删除30天以上的数据(一般半夜删数据),一天无非几万条数据,性能影响几乎没有,不过量多的话,删除就要小心点,不然很容易就锁表,可以查一下一个月前的数据的区间范围(表的主键id范围),然后呢按区间删除,几千几千的删除(可以自行调节,保证 IOPS跟CUP别跑满就行),这样就能保证不会锁表;order_history表不做任何删除操作,只插入新的数据,保留最原始的数据。

说一下表的查询,一个月以内的数据直接在order表查询就行,一个月以上的旧数据在history表查,order_history表的查询可以配合搜索引擎进行处理(比如阿里云的opensearch),每次查出对应的主键id(节省opensearch的流量,要钱的!),然后再去order_history根据主键查数据,这里底层封装好就行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的冷热分离是一种将热数据和冷数据分开存储的策略。热数据指的是那些经常被访问的数据,而冷数据则是那些不经常被访问的数据。 根据引用的说明,如果每次访问都需要去移动链表,会对性能造成下降。因此,MySQL针对热数据区的数据转移也有相关的规则。 根据引用的描述,冷数据是指那些久远的历史数据,可以将其存放到冷数据数据中心池子中,而线上的MySQL只需要保留最近一段时间的数据。 通过冷热分离的策略,可以将热数据存放在高性能的存储介质中,提高数据的访问效率。同时,冷数据可以存放在较低成本的存储介质中,以节省成本和资源。这种策略还可以减少线上MySQL数据库的负载,提高数据库的整体性能和响应速度。 在冷热分离的过程中,为了不改变现有项目使用数据的方式,降低数据库使用者的门槛,需要兼容MySQL单表的使用协议,确保对线上数据库和离线数据数据中心的兼容性。 总结起来,MySQL的冷热分离是一种将热数据和冷数据分开存储的策略,通过将热数据存放在高性能介质中,冷数据存放在低成本介质中,来提高数据库的性能和资源利用效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [什么是数据库的 “缓存池” ?(万字长文)](https://blog.csdn.net/bjweimengshu/article/details/113361587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [惊了! MySQL 热冷数据分离设计还能这样!](https://blog.csdn.net/uxiAD7442KMy1X86DtM3/article/details/110729642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值