冷热分离一直是数据库和存储领域离不开的话题,特别是大数据的年代,数量和存储成本的矛盾需要冷热分离来解决。对于生产系统,不同数据库的特点不同,冷热分离机制和算法也不同。本篇文章讲一下内存数据库的冷热分离。

内存数据库最显著的特点是吞吐高、延迟低,但是内存数据库往往会对接一个外部存储,比如Redis的外存版本。这样就要求冷热分离算法的cost必须很低,才不会影响内存数据库的性能,或者说把影响降到最低。传统的内存cache替换策略是基于LRU或者LFU实现的。比如LRU的实现方式是一个链表,加一个hash表,链表相当于key value有序(根据最近访问规则的排序)队列,hash表帮助快速定位一个key在链表中的位置,免去遍历链表的开销。访问一个key后,需要定位这个key在链表中的位置,然后断开,再移到链表的头部。如果是LFU,那么更复杂一些,但是总体思想差不多,代码可以参考我的另一篇文章:Tieying Zhang:LFU代码实现​zhuanlan.zhihu.com

在实际的内存数据库系统中(比如Redis外存版),我们不会把全部data都存在LFU中(那样维护开销以及存储开销都很大),而是会拿出一小部分data,比如redis就是拿出16个对象作为LFU的近似替代,保证这16个对象是比较冷的,即访问频次比较少的。那么如何选取这16个对象呢?最简单的方法:sampling,并且是随机sample,并且有人证明,随机sample就可以近似代表了全局data,最终的miss ratio不会差太多,具体怎么做呢?

每次有数据从外存换入的时候,要决定哪些对象被evict,这时我们从全表中sample出来k个对象和16个对象的频次相比。因为只有16个对象,所以就算是遍历也很快,最后换出k个最冷的。这里访问的频次被记录在每个kv的key里,这样新来的对象就可以插入了。

另外,上面提到内存数据库的特性是高吞吐和低延迟,冷热分离不适合使用机器学习的方式处理。对于非内存数据库,冷热分离实际上是个通用需求,涉及的技术主要包括survival analysis,实际上已经研究了很多年,常常用于医疗领域,比如生病的时间等。对应的模型有cox(survival regression的一种)等。另外,由于输入是访问的时间序列,需要考虑预测形式是下次访问的时间点,还是时间间隔,或者是访问次数,当然可以试试看哪个效果好。

冷热分离和直接使用大数据库_智能冷热分离的思考-内存数据库相关推荐

  1. 冷热分离和直接使用大数据库_用读写分离与分表分库解决高访问量和大数据量...

    原标题:用读写分离与分表分库解决高访问量和大数据量 一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度 ...

  2. 冷热分离和直接使用大数据库_中台有“数”:大数据技术为苏宁818保驾护航

    今年818正值苏宁成立30周年之际,苏宁易购提出了"专注好服务"的全新品牌主张,在带来巨大流量的同时,也给苏宁中台系统的保障工作带来了更大的挑战.如何在818大促中,快速.高效.智 ...

  3. 冷热分离和直接使用大数据库_还不知道HBase冷热分离的技术原理?看这一篇就够了...

    作者:郭泽晖(索月),阿里巴巴技术专家 HBase是当下流行的一款海量数据存储的分布式数据库.往往海量数据存储会涉及到一个成本问题,如何降低成本.常见的方案就是通过冷热分离来治理数据.冷数据可以用更高 ...

  4. 冷热分离和直接使用大数据库_基于 MySQL 的热数据与冷数据分离设计与实现

    作为一家提供商业气象数据服务的创业公司,我们一直都有一项「欠交的作业」没有完成,那就是合理的数据规划和数据治理规范.对于早期的初创公司而言,可能很难从一开始就能构想到需要对数据存储进行合理的规划并制定 ...

  5. 冷热分离和直接使用大数据库_「系统架构」如何通过分离冷热数据提升系统性能?...

    前言 在IT圈,根据被访问频率的不同,数据通常被分为冷数据和热数据.冷数据是指离线类的或不经常访问的数据,热数据是指在线类的或需要被计算节点频繁访问的数据. 任何热数据,随着时间的推移,最终也会慢慢变 ...

  6. 若依前后端分离如何写移动端接口_前后端分离架构概述

    1.背景 2.未分离时代(各种耦合) 3.半分离时代 4.分离时代 5.总结 <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集& ...

  7. 若依前后端分离如何写移动端接口_前后端分离实践的架构设计

    前后端分离的项目开发策略已经不是什么新鲜东西了,网上介绍这方面的文章非常多.我自己是在14年的时候接触到的,对这种开发策略一直爱不释手,不管新老项目都会首先用前后端分离的思维先去思考一番.从14年到现 ...

  8. 若依前后端分离如何写移动端接口_前后端分离后,如何定义接口规范~

    小Hub领读: 前后端分离的趋势下,该怎么定义规范,来学习学习吧哈! 作者:猿码架构 www.jianshu.com/p/c81008b68350 1. 前言 随着互联网的高速发展,前端页面的展示.交 ...

  9. access mysql 同步_使ACCESS数据库保持同步

    同步(Synchronization)是数据库在网络环境中应用所要涉及到的一个重要概念.其基本过程大致分以下几个步骤:首先把一个数据库设为可复制副本属性,使其成为设计正本(VB中称设计原版,ACCES ...

最新文章

  1. php reactphp wss_php无限级分类 - ▄︻┻┳000000000000000000000000000000000000 - OSCHINA - 中文开源技术交流社区...
  2. 我的第一个Python程序
  3. JS实现文本框有“请输入关键字”功能
  4. react源码总览(翻译)
  5. C#部分面试题及答案
  6. 网站的服务器分哪几种,服务器有哪几种分类?_服务器可分为四种类型
  7. vs中四点画矩形的算法_中考热点,初高中衔接之倒角利器四点共圆
  8. php 与 memcache 笔记
  9. oracle伪列ROWNUMBER,oracle 中 rownum 和 row_number()
  10. 【转】Mysql行转换为列
  11. 关于【画面文言修正】 的 注意点。 (1.确认文字风格 2 从整体来去确认风格)
  12. 在Win10系统的服务器上离线安装SQL Server 2012中出现“启用windows功能NetFx3时出错”
  13. 半导体 pn 结的原理
  14. 井字棋游戏 Matlab
  15. TensorFlow神经网络的激活函数
  16. 疯狂的麦克斯java游戏_疯狂的麦克斯
  17. 高级性能测试系列《34.普通性能场景:​jmeter的线程数,有没有限制?线程数+ramp-up时间,怎么设置才比较合理?》...
  18. 【华人学者风采】魏云超 悉尼科技大学
  19. VB中上传下载文件到SQL数据库
  20. 基于sqlserver数据库的学生成绩管理系统

热门文章

  1. 梦幻星空PSD分层海报素材,通过临摹打开思路。
  2. Python爬取抖音用户相关数据(目前最方便的方法)
  3. 图解Http学习第二章
  4. MyBatis的优化
  5. 什么是Intel LBR(上次分支记录),BTS(分支跟踪存储)和AET(体系结构事件跟踪)?
  6. 内核引导参数IOMMU与INTEL_IOMMU有何不同?
  7. FD.io VPP基本介绍-理解VPP软件架构
  8. Linux下的tty和pts:PTS之间标准输入输出的交互
  9. java i= i_java中 i!=i+1?你错了。 | 学步园
  10. Php二叉树对称,PHP如何实现判断二叉树是否对称