rocksdb

BlueStore源码分析之事物状态机

放肆的年华 提交于 2020-05-08 22:35:49
前言 BlueStore可以理解为一个支持ACID的本地日志型文件系统。所有的读写都是以 Transaction 进行,又因为支持覆盖写,所以写流程设计的相对复杂一些,涉及到一系列的状态转换。我们着重分析一下状态机、延迟指标以及如何保证IO的顺序性和并发性。 目录 状态机 延迟分析 IO保序 线程队列 IO状态 最后YY 状态机 queue_transactions queue_transactions 是ObjectStore层的统一入口,KVStore、MemStore、FileStore、BlueStore都相应的实现了这个接口。 state_t state 变量记录了当前时刻事物处于哪个状态。在创建TransactionContext的时候会将 state 初始化为 STATE_PREPARE ,然后在 _txc_add_transaction 中会根据操作码类型(opcode)进行不同的处理。同时会获取PG对应的OpSequencer(每个PG有一个OpSequencer)用来保证PG上的IO串行执行,对于deferred-write会将其数据写入RocksDB(WAL)。 以下阶段就进入BlueStore状态机了,我们以写流程为导向分析状态机的每个状态。 STATE_PREPARE 从state_prepare开始已经进入事物的状态机了。这个阶段会调用 _txc_add

高性能kv存储之Redis、Redis Cluster、Pika:如何应对4000亿的日访问量?

江枫思渺然 提交于 2020-05-05 23:02:39
一、背景介绍 随着360公司业务发展,业务使用kv存储的需求越来越大。为了应对kv存储需求爆发式的增长和多使用场景的需求,360web平台部致力于打造一个全方位,适用于多场景需求的kv解决方案。目前,我们线上大规模使用的kv存储有Redis,Redis cluster以及Pika。 为什么说是爆发式的需求增长呢?早在2015年9月份,公司Redis的日访问量还处于800亿,到了2016年第三季度日访问量已经突破2500亿,2017年第一季度日访问量已经接近4000亿。短短的一年半时间,日访问量增长了5倍。下面给大家分别简单介绍一下Redis,Redis Cluster以及Pika的特点和使用场景。 二、kv存储之Redis 1、Redis介绍 Redis做为大家熟知的开源内存数据库,在很多项目中被广泛的使用。它支持String、Hash、List、Set、Zset、Geo、Hyperloglogs等多数据结构。同时也支持主从复制、Lua脚本、事务、数据持久化、高可用和集群化等等 2、Redis特性 1)高性能:Redis虽然是单线程的,但是它同样拥有着超高的性能。我们线上的普通PC Server上,经过测试,每秒请求数OPS能够达到10w左右。 2)多样化数据结构:Redis支持String、Hash、List、Set、Zset、Geo等多数据结构。 3)持久化:RDB持久化

大容量类Redis存储--Pika介绍

喜欢而已 提交于 2020-05-05 21:57:05
嘉宾介绍 大家好,首先自我介绍一下,我是360 web平台-基础架构组的宋昭,负责大容量类redis存储pika的和分布式存储Bada的开发工作,这是我的github和博客地址,平时欢迎指正交流^^ 我的github: https://github.com/KernelMaker 我的博客: http://kernelmaker.github.io 下面是pika的github,欢迎关注 https://github.com/Qihoo360/pika Pika介绍 pika是360 DBA和基础架构组联合开发的类redis存储系统, 使用Redis协议,兼容redis绝大多数命令(String,Hash,List,ZSet,Set),用户不需要修改任何代码, 就可以将服务迁移至pika. pika主要是使用持久化存储来解决redis在内存占用超过50G,80G时遇到的如启动恢复时间长,主从同步代价大,硬件成本贵等问题,并且在对外用法上尽可能做到与redis一致,用户基本上对后端是redis或pika无感知 既然pika要做到兼容redis并解决redis在大容量时的各种问题,那么首先要面对的问题便是如何从redis迁移到pika,毕竟现在redis的使用非常广泛,如果从redis迁移到pika很麻烦,那应该也不会有多少人用了 从redis迁移到pika需要经过几个步骤?

图数据库 Nebula Graph TTL 特性

天涯浪子 提交于 2020-05-05 12:48:36
身处在现在这个大数据时代,我们处理的数据量需以 TB、PB, 甚至 EB 来计算,怎么处理庞大的数据集是从事数据库领域人员的共同问题。解决这个问题的核心在于,数据库中存储的数据是否都是有效的、有用的数据,因此如何提高数据中有效数据的利用率、将无效的过期数据清洗掉,便成了数据库领域的一个热点话题。在本文中我们将着重讲述如何在数据库中处理过期数据这一问题。 在数据库中清洗过期数据的方式多种多样,比如存储过程、事件等等。在这里笔者举个例子来简要说明 DBA 经常使用的存储过程 + 事件来清理过期数据的过程。 存储过程 + 事件清洗数据 存储过程(procedure) 存储过程是由一条或多条 SQL 语句组成的集合,当对数据库进行一系列的读写操作时,存储过程可将这些复杂的操作封装成一个代码块以便重复使用,大大减少了数据库开发人员的工作量。通常存储过程编译一次,可以执行多次,因此也大大的提高了效率。 存储过程有以下优点: 简化操作 ,将重复性很高的一些操作,封装到一个存储过程中,简化了对这些 SQL 的调用 批量处理 ,SQL + 循环,减少流量,也就是“跑批” 统一接口 ,确保数据的安全 一次编译多次执行 ,提高了效率。 以 MySQL 为例,假如要删除数据的表结构如下: mysql> SHOW CREATE TABLE person; +--------+----------------

图数据库 Nebula Graph TTL 特性

杀马特。学长 韩版系。学妹 提交于 2020-05-05 12:48:16
身处在现在这个大数据时代,我们处理的数据量需以 TB、PB, 甚至 EB 来计算,怎么处理庞大的数据集是从事数据库领域人员的共同问题。解决这个问题的核心在于,数据库中存储的数据是否都是有效的、有用的数据,因此如何提高数据中有效数据的利用率、将无效的过期数据清洗掉,便成了数据库领域的一个热点话题。在本文中我们将着重讲述如何在数据库中处理过期数据这一问题。 在数据库中清洗过期数据的方式多种多样,比如存储过程、事件等等。在这里笔者举个例子来简要说明 DBA 经常使用的存储过程 + 事件来清理过期数据的过程。 存储过程 + 事件清洗数据 存储过程(procedure) 存储过程是由一条或多条 SQL 语句组成的集合,当对数据库进行一系列的读写操作时,存储过程可将这些复杂的操作封装成一个代码块以便重复使用,大大减少了数据库开发人员的工作量。通常存储过程编译一次,可以执行多次,因此也大大的提高了效率。 存储过程有以下优点: 简化操作 ,将重复性很高的一些操作,封装到一个存储过程中,简化了对这些 SQL 的调用 批量处理 ,SQL + 循环,减少流量,也就是“跑批” 统一接口 ,确保数据的安全 一次编译多次执行 ,提高了效率。 以 MySQL 为例,假如要删除数据的表结构如下: mysql> SHOW CREATE TABLE person; +--------+----------------

go-入门到精通系列-001-介绍

荒凉一梦 提交于 2020-05-02 14:58:18
作为这个系列的第一篇,多说两句,希望大家跟着我一起学习,从入门到精通,没有废话,直接干货,这个系列的文章不会太长,定期更新,预计在20分钟内能读完一篇,所以对于想学习go的同学来说,基本没有压力。废话就到这里! 简介 Go,又称 golang, 语言起源 2007 年,2009 正式发布。是 Google 开发的一种 静态强类型、编译型,并发型,并具有垃圾回收功能 的编程语言。和C语言的语法有些类似,如:基础数据类型,控制流,指针等。所以也被成为 C类似语言 。 生态 参考 2019 开发人员生态系统现状 ,Go在开发者眼中,已成为 最有前途的编程语言 。它的使用份额已从 2017 年的 8% 大幅跃升到今年的 18%,多达 13% 的开发人员愿意采用或迁移到 Go 语言 官方网站 每一个学习Go语言的人首先应该看的网站,在该网站上有官方提供的Go语言的文档说明,并且还包含Go语言团队发表的blog。 Golang全课程学习 该网站上是Golang的资料学习网站,偏实战和技术型。包含Golang的相关知识,工具,源码等内容,比较丰富。 Github学习库 github上的一个Go语言学习库,也是包含所有的知识点,文档,代码,相应的视频内容都有,也是比较不错的一份资料。 优势 并行性&并发性 Go 语言就是为并行而生的。Goroutine 和 channel

React Native之数据存储技术AsyncStorage

女生的网名这么多〃 提交于 2020-04-29 18:09:21
1. 如何将数据存储到本地? 数据存储是开发APP必不可少的一部分,比如页面缓存,从网络上获取数据的本地持久化等,那么在RN中如何进行数据存储呢? RN官方推荐我们在RN中使用AsyncStorage进行数据存储 2. 什么是AsyncStorage? 2.1 特点 简单的,异步的,持久化的key-value存储系统 AsyncStorage也是React Native官方推荐的数据存储方式,旨在代替LocalStorage 2.2 AsyncStorage在ios中存储的两种情况 如果存储的内容较小,那么AsyncStorage会将存储的内容放在 一个序列化的字典 中 如果存储的内容较大,那么AsyncStorage会将存储的内容放在 一个单独的文件 中 2.3 AsyncStorage在android中存储也分为两种情况: AsyncStorage会将数据存储在RocksDB或者SQLite中,具体存在RocksDB中还是SQLite中这取决于设备支持哪一种存储方式。 3. 如何使用AsyncStorage? 首先导入AsyncStorage作为RN一个标准组件使用 import AsyncStorage from '@react-native-community/async-storage'; //import { AsyncStorage } from 'react

Flink State 最佳实践

随声附和 提交于 2020-04-28 16:24:21
本文主要分享与交流 Flink 状态使用过程中的一些经验与心得,当然标题取了“最佳实践”之名,希望文章内容能给读者带去一些干货。本文内容首先是回顾 state 相关概念,并认识和区别不同的 state backend;之后将分别对 state 使用访问以及 checkpoint 容错相关内容进行详细讲解,分享一些经验和心得。 State 概念回顾 我们先回顾一下到底什么是 state,流式计算的数据往往是转瞬即逝, 当然,真实业务场景不可能说所有的数据都是进来之后就走掉,没有任何东西留下来,那么留下来的东西其实就是称之为 state,中文可以翻译成状态。 在下面这个图中,我们的所有的原始数据进入用户代码之后再输出到下游,如果中间涉及到 state 的读写,这些状态会存储在本地的 state backend(可以对标成嵌入式本地 kv 存储)当中。 接下来我们会在四个维度来区分两种不同的 state:operator state 以及 keyed state。 1. 是否存在当前处理的 key(current key) :operator state 是没有当前 key 的概念,而 keyed state 的数值总是与一个 current key 对应。 2. 存储对象是否 on heap : 目前 operator state backend 仅有一种 on-heap 的实现;而

[转帖]Rocksdb的优劣及应用场景分析

北城余情 提交于 2020-04-17 08:26:00
【推荐阅读】微服务还能火多久?>>> Rocksdb的优劣及应用场景分析 https: // www.cnblogs.com/cobbliu/articles/9553271.html 研究Rocksdb已经有七个月的时间了,这期间阅读了它的大部分代码,对底层存储引擎进行了适配,同时也做了大量的测试。在正式研究之前由于对其在本地存储引擎这个江湖地位的膜拜,把它想象的很完美,深入摸索之后才发现现实很骨感,光鲜背后都有不为人知的辛酸苦辣。同时这也给幻想追求完美技术的我打了一针清醒剂,任何东西都是两面性的,没有好与坏,只有适合和不适合,世界就是这么残酷,多么痛的领悟! Rocksdb也是一样,也有它的优势劣势及特定的适用场景。今天我就从设计的角度来分析一下。 基础架构 上图就是Rocksdb的基础架构。Rocksdb中引入了ColumnFamily(列族, CF)的概念,所谓列族也就是一系列kv组成的数据集。所有的读写操作都需要先指定列族。写操作先写WAL,再写memtable,memtable达到一定阈值后切换为Immutable Memtable,只能读不能写。后台Flush线程负责按照时间顺序将Immu Memtable刷盘,生成level0层的有序文件(SST)。后台合并线程负责将上层的SST合并生成下层的SST。Manifest负责记录系统某个时刻SST文件的视图

[转帖]RocksDB简介

人盡茶涼 提交于 2020-04-17 08:25:31
【推荐阅读】微服务还能火多久?>>> RocksDB简介 https: // www.jianshu.com/p/a0088d7e9b97 1、RocksDB简介 RocksDB项目起源于Facebook的一个实验项目,该项目旨在开发一个与快速存储器(尤其是闪存)存储数据性能相当的数据库软件,以应对高负载服务。 这是一个c++库,可用于存储键和值,可以是任意大小的字节流。它支持原子读和写。 RocksDB具有高度灵活的配置功能,可以通过配置使其运行在各种各样的生产环境,包括纯内存,Flash,硬盘或HDFS。它支持各种压缩算法,并提供了便捷的生产环境维护和调试工具。 2、假设和目标 性能: RocksDB的主要设计目标是保证存取快速存储器和高负载服务器更高效,保证充分利用Flash或RAM子系统提供的高速率读写,支持高效的查找和范围scan,支持高负载的随机读、高负载的更新操作或两者的结合。其架构应该支持高并发读写和容量大增时系统的一致性。 向后兼容性: 这个软件的新版本应该是向后兼容的,因此,当升级到新版本时现有的应用程序不需要改变。 3、高级体系结构 RocksDB是一个嵌入式键值存储器,其中键和值是任意的字节流。RocksDB中的所有数据是按序存放的。常见操作包括Get(key), Put(key), Delete(key) and Scan(key)。