摘要: 主要有两个接口,一个make_fcontext(),一个jump_fcontext() 相比ucontext,boost的切换模式,少了单独对context进行保存(getcontext)和切换(setcontext)过程,而是把两者合并到一起,通过jump_fcontext接口实现直接切换 这样做 阅读全文
posted @ 2023-09-08 20:01 misaka-mikoto 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 本指南的目的是提供你足够的信息用于根据自己的工作负载和系统配置调优RocksDB。 RocksDB非常灵活,这有好也有坏。你可以真多很多工作场景和存储技术进行调优。在Facebook,我们使用相同的代码跑内存工作压力,闪盘设备和机械硬盘。然而,灵活性不总是对用户友好的。我们引入了大量的调优参数,让人 阅读全文
posted @ 2023-02-27 10:23 misaka-mikoto 阅读(1366) 评论(0) 推荐(0) 编辑
摘要: 并发 一个数据库可能同时只能被一个进程打开。RocksDB的实现方式是,从操作系统那里申请一个锁,以此来阻止错误的写操作。 在单进程里面,同一个rocksdb::DB对象可以被多个同步线程共享。举个例子,不同的线程可以同时对同一个数据库调用写操作,迭代遍历操作或者Get操作,而且不需要使用额外的同步 阅读全文
posted @ 2023-02-26 16:36 misaka-mikoto 阅读(1016) 评论(0) 推荐(0) 编辑
摘要: 问:如果我的进程crash了,我的数据库数据会受影响吗?答:不会,但是如果你没有开启WAL没有刷入到存储介质的memtable数据可能会丢失。问:如果我的机器crash了,RocksDB能保证数据的完整吗?答:数据在你调用一个带sync的写请求的时候会被写入磁盘(使用WriteOptions.syn 阅读全文
posted @ 2023-02-26 11:09 misaka-mikoto 阅读(973) 评论(0) 推荐(0) 编辑
摘要: 简介 这篇论文介绍了一个新的键值存储系统,名为Faster,它支持点读、更新和读-改-写操作。Faster将一个高度缓存优化的并发哈希索引与一个混合日志结合起来:一个跨越主内存和存储的并发日志结构化记录存储,同时支持对内存中热数据集的快速原地更新。 创新点 Faster提出了一个新颖的“混合记录日志 阅读全文
posted @ 2023-02-23 10:44 misaka-mikoto 阅读(348) 评论(0) 推荐(0) 编辑
摘要: Insert(pinode_fname,inode) 对DirTreeTable 的写请求首先访问内存中的Dir Table Cache,获取到pinode对应LogStore 指针,直接将KV 数据追加写入到LogStore 的尾部, 同时将返回的NVM 指针以及LogStore 指针写入到Ful 阅读全文
posted @ 2023-02-21 14:59 misaka-mikoto 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 为了提高线程利用率并最小化开销,必须决定要使用的线程数量,并为每个线程合理分配任务 开始处理之前的线程间数据划分 简单算法最容易并行化,比如要并行化 std::for_each,把元素划分到不同的线程上执行即可。如何划分才能获取最优性能,取决于数据结构的细节,这里用一个最简单的划分为例,每 N 个元 阅读全文
posted @ 2023-02-20 11:54 misaka-mikoto 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 阻塞的算法和数据结构使用 mutex、条件变量、期值来同步数据,但非阻塞不等价于 lock-free,比如自旋锁没有使用任何阻塞函数的调用,是非阻塞的,但并非 lock-free 非阻塞数据结构由松到严可分为三个等级:obstruction-free、lock-free、wait-free obst 阅读全文
posted @ 2023-02-19 11:52 misaka-mikoto 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 并发访问 std::map 和 std::unordered_map 的接口的问题在于迭代器,其他线程删除元素时会导致迭代器失效,因此 thread-safe map 的接口设计就要跳过迭代器 为了使用细粒度锁,就不应该使用标准库容器。 红关联容器数据结构 一是二叉树(如红黑树),但每次查找修改都要 阅读全文
posted @ 2023-02-19 10:47 misaka-mikoto 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 常见的 LSM 存储引擎,如 LevelDB 和 RocksDB,将用户写入的一组的 key 和 value 存放在一起,按顺序写入 SST。在 compaction 过程中,引擎将上层的 SST 与下层 SST 合并,产生新的 SST 文件。这一过程中,SST 里面的 key 和 value 都会 阅读全文
posted @ 2023-02-14 15:36 misaka-mikoto 阅读(435) 评论(0) 推荐(0) 编辑