FASTER

在过去十年中,云中的数据密集型应用程序和服务有了巨大的增长。数据在各种边设施(例如,设备,浏览器和服务器)上创建,并由云应用程序处理用来获得数据价值或做出决策。应用程序和服务可以处理收集的数据,也可以实时监控数据。这些应用程序通常是更新密集型的,并且涉及大量的状态,超出了适合主存储器的处理能力。但是,它们在其访问模式中显示出重要的时间局部性(时间局部性解释维基百科=>https://en.wikipedia.org/wiki/Locality_of_reference)。一种用于点运算的新的键值存储。FASTER将高速缓存优化的并发哈希索引与“混合日志”结合在一起:跨越主内存和存储的并发日志结构记录存储,并且支持内存中“热插拔”的快速就地更新。FASTER扩展了标准键值存储接口,以处理读取 - 修改 - 写入,blind 更新和基于CRDT的更新。实验表明,与当前广泛部署的存储库相比,FASTER在单台机器上实现了更高的吞吐量(每秒高达1.6亿次操作),并且当工作负载大小适合内存大小时,他的性能将远胜于纯内存数据结构的性能。

背景

微软研究团队于2018年6月份在SIGMOD 宣布了一项名为FASTER的新的key-value存储库。FASTER支持快速和频繁的数据查找。它还有助于解决在当今云时代的应用程序更新大量状态信息的问题。

让我们以物联网为一种场景。数十亿设备报告和更新状态,如每个设备的性能计数器。这将导致应用程序未充分利用机器上的存储库和网络等资源。他能更快地帮助解决此问题, 因为它利用这些应用程序中的时间位置来控制系统内存占用量。

根据微软的说法,“FASTER是一个单节点共享内存键值存储库”。键值存储是NoSQL数据库,它使用简单的键/值方法进行数据存储。它包含两项重要创新:

  • 缓存友好,并发和latch-free (闩锁释放,解释链接:https://www.dbtan.com/2010/05/latch-free.html)的哈希索引。它维护日志中记录的逻辑指针。FASTER哈希索引是指向一个缓存行大小的 hash buckets数组,每个都有8字节的条目来保存哈希标签。它还包含指向存储记录的逻辑指针。。
  • 一个新的并发和混合日志记录分配器。这有助于支持包括快速存储(例如云存储和SSD)和主存储器的索引。

是什么让FASTER与众不同?

传统的键值存储利用日志结构记录数据。但是,FASTER是不同的,因为它有一个混合日志,它结合了日志结构和读取副本更新(适用于外部存储)和就地更新(适用于性能更高的内存)。因此,位于存储器中的混合日志的头部使用读取 - 复制 - 更新,而主存储器中的混合日志尾部使用就地更新。内存中有一个位于这两个区域之间的只读区域。它为核心记录提供了另一个被复制回尾部的机会。这捕获了更新的临时位置,并允许在内存中自动的收集热记录。

因此,FASTER甚至能够超越英特尔TBB hash map等纯内存数据结构。微软表示,它的性能远远优于今天流行的诸如RocksDB和Redis等键值存储的缓存系统。

除此之外,FASTER还为故障恢复提供支持,因为它包含一个恢复策略,有助于将系统以低成本恢复到最近的一致状态。这与传统数据库系统中的恢复机制不同,因为它不涉及阻止或创建单独“预写的日志”。

有关更多信息,请查看官方研究报告

FASTER项目Github地址:https://github.com/Microsoft/FASTER

价值:

有人会问,有了这个FASTER,既然他速度这样快是不是可以代替redis或者mongodb,答案是目前不能,因为FASTER是内核级的,和Google的leveldb差不多层级,FASTER速度非常快毋庸置疑,但是目前缺少更高复杂业务场景的支持,比如集群,数据一致性之类的商用需求,不过如此诱人的性能必定吸引更多的人去投入FASTER中开发出类似redis和mongodb的产品出来,性能也必定更强,说不定redis后期底层就用FASTER改写了。

每秒高达1.6亿次操作的并发键值存储库 FASTER 诞生的更多相关文章

  1. Redis中的键值过期操作

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...

  2. Spark学习之键值对操作总结

    键值对 RDD 是 Spark 中许多操作所需要的常见数据类型.键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式.键值对 RDD ...

  3. 键值对操作 上(Spark自学五)

    键值对RDD是Spark中许多操作所需要的常见数据类型. “分区”是用来让我们控制键值对RDD在各节点上分布情况的高级特性.使用可控的分区方式把常在一起被访问的数据放在同一个节点上,可以大大减少应用的 ...

  4. spark入门(三)键值对操作

    1 简述 Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD. 2 创建PairRDD 2.1 在sprk中,很多存储键值对的数据在读取时直接返回由其键值对数据组成 ...

  5. 存储库-MongoDB简单的操作

    简介: MongoDB是一款强大.灵活.且易于扩展的通用型数据库 1.易用性 MongoDB是一个面向文档的数据库,而不是关系型的数据库: 不采用关系型主要是为了可扩展性 2.易扩展性 存储在Mong ...

  6. redis键值操作

    1.1. redis键值操作 1.1.1. keys patten 查询相应的key 可以精确的查,也可以模糊的查 1.1.1.1. 通配符:* ? [] 在redis里,模糊查询key的时候有3个通 ...

  7. Netty Redis 亿级流量 高并发 实战 (长文 修正版)

    目录 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -30[ 博客园 总入口 ] 写在前面 1.1. 快速的能力提升,巨大的应用价值 1.1.1. 飞速提升能力,并且满足实际开发要求 1 ...

  8. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

  9. Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)

    本章对Redis服务器的数据库实现进行介绍,说明Redis数据库相关操作的实现,包括数据库中键值对的添加.删除.查看.更新等操作的实现:客户端切换数据库的实现:键超时相关功能的实现.键空间事件通知等. ...

随机推荐

  1. ctypes库调用dll的个人见解

    最近着手开发一个小东西涉及到了API接口的知识点, 第一次使用到了ctypes库,在网上找了一大圈,基本都是讲add.dll之后就没了. 就像下面这个: from ctypes import * dl ...

  2. python 数据驱动ddt使用,需要调用下面的代码,请挨个方法调试,把不用的注释掉

    #!/usr/bin/env/python # -*- coding: utf-8 -*- # @Time : 2018/12/15 15:27 # @Author : ChenAdong # @Em ...

  3. JavaScript中,JSON格式的字符串与JSON格式的对象相互转化

    前言:JSON是一个独立于任何语言的数据格式,因此,严格来说,没有“JSON对象”和“JSON字符串”这个说法(然而”菜鸟教程“和”W3school“使用了“JSON对象”和“JSON字符串”这个说法 ...

  4. Scrapy实现腾讯招聘网信息爬取【Python】

    一.腾讯招聘网 二.代码实现 1.spider爬虫 # -*- coding: utf-8 -*- import scrapy from Tencent.items import TencentIte ...

  5. BurpSuit添加CA证书拦截HTTPS通信

    问题 BurpSuit 安装成功后可以直接使用代理对使用 HTTP 协议通信的会话进行拦截,但是对于使用 HTTPS 协议通信的会话进行代理使用时就会出现如下画面 例如访问百度主页: 原因 HTTPS ...

  6. c/c++ 字节对齐

    c 字节对齐 概念: 结构体里会包括各种类型的成员,比如int char long等等,它们要占用的空间不同,系统为一个结构体开辟内存空间时,会有2种选择. 第一种:节省空间的方案,以上面的列子来说的 ...

  7. Cs231n课堂内容记录-Lecture 3 最优化

    Lecture 4 最优化 课程内容记录: (上)https://zhuanlan.zhihu.com/p/21360434?refer=intelligentunit (下)https://zhua ...

  8. celery 定时任务

    用celery定时任务,定时删除文件夹 tasks.py from celery import Celery import os import shutil app = Celery('demo') ...

  9. Mybatis 报错 There is no getter for property named '***' in 'class java.lang.String'

    在mapper.xml中 , 如果单参数是String类型 , 且在sql语句中对参数进行了判断 , 如下 when 中的判断 , 如果出现 if 判断也是一样的.都需要把判断中的参数用 _param ...

  10. 力扣算法题—060第K个排列

    给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "132&qu ...