上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: leveldb/rocksdb采用deque控制多线程只允许一个线程修改memtable, 是由于memtable不存在读-写冲突(采用MVCC,保证Sequence一定不同,memtable的key就一定不同,update/delete/insert操作一定不会修改已有key的数据) 这样只存在写 阅读全文
posted @ 2023-02-13 16:38 misaka-mikoto 阅读(120) 评论(0) 推荐(0) 编辑
摘要: RocksDB Features that are not in LevelDB We stopped maintaining this page since 2016. New features are not added to the lists. Performance Multithread 阅读全文
posted @ 2023-02-13 10:52 misaka-mikoto 阅读(43) 评论(0) 推荐(0) 编辑
摘要: leveldb是典型的LSM树实现,因此需要对内存中的数据进行持久化。一次内存数据的持久化过程,在leveldb中称为Minor Compaction。一次minor compaction的产出是一个0层的sstable文件,其中包含了所有的内存数据。但是若干个0层文件中是可能存在数据overlap 阅读全文
posted @ 2023-02-12 11:05 misaka-mikoto 阅读(110) 评论(0) 推荐(0) 编辑
摘要: MVCC多版本是一个解决并发问题的模型,或者说是一种设计思路。 why MVCC? 如果有一份数据,无论它是存储在内存里还是磁盘上,当我们读取数据时可能有写操作正在修改它。传统思路就是将数据用一把锁保护起来: 读之前加读锁,这样就不会有写操作。 写之前加写锁,这样就不会有读操作和其他写操作。 如果数 阅读全文
posted @ 2023-02-10 22:09 misaka-mikoto 阅读(147) 评论(0) 推荐(0) 编辑
摘要: template< class... MutexTypes > class scoped_lock; (since c++17) 作用 同时持有一个或多个Mutex的RAII机制的mutex包装器,可以一次性获取多个mutex,避免发生死锁。 当scoped_lock创建,它将会尝试获取所有mute 阅读全文
posted @ 2023-02-10 10:17 misaka-mikoto 阅读(432) 评论(0) 推荐(0) 编辑
摘要: sstable(sorted string table)是google bigtable中引出的数据结构,在levelDB、RocksDB以及现在各类数据库存储中配合LSM有广泛应用,学习下很有必要,本位以RocksDB中SST的实现来了解SST。 优点 空间利用率高:sstable基于sorted 阅读全文
posted @ 2023-02-08 22:10 misaka-mikoto 阅读(221) 评论(0) 推荐(0) 编辑
摘要: PaxosStore 中定义了一种名为 Command 的消息,模块间的通信通过 Command 的传递实现。消息传递的方式有两种,一种是通过消息队列传递,一种是使用 Protobuf 序列化后通过网络收发。 clsPaxosCmd 派生了 clsPaxosCmd / clsClientCMd / 阅读全文
posted @ 2023-02-08 15:56 misaka-mikoto 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 迭代器的作用就是提供一个遍历容器内部所有元素的接口,因此迭代器的内部必须保存一个与容器相关联的指针,然后重载各种运算操作来方便遍历 其中最重要的就是* 运算符和-> 运算符,以及++、--等可能需要的运算符重载。 实际上这和C++标准库的智能指针(smart pointer)很像,智能指针也是将一个 阅读全文
posted @ 2023-02-08 11:17 misaka-mikoto 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 内存管理总是程序中的重要一环,在多线程时代,一个好的内存分配大都在如下两点间权衡: 线程间竞争少。内存分配的粒度大都比较小,对性能敏感,如果不同的线程在大多数分配时会竞争同一份资源或同一把锁,性能将会非常糟糕,原因无外乎和cache一致性有关,已被大量的malloc方案证明。 浪费的空间少。如果每个 阅读全文
posted @ 2023-02-05 13:16 misaka-mikoto 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 一些场景希望同样的请求尽量落到一台机器上,比如访问缓存集群时,我们往往希望同一种请求能落到同一个后端上,以充分利用其上已有的缓存,不同的机器承载不同的稳定working set。(类似redis集群分片,每一片负责一个set的keys,每个分片的数据互不相交) 而不是随机地散落到所有机器上,那样的话 阅读全文
posted @ 2023-02-05 12:52 misaka-mikoto 阅读(24) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 9 下一页