ARST打卡第205周[205/521]

Algorithm

lc2399_检查相同字母间的距离

思路: 直接遍历并且每次再判断 s[i + distance[s[i] - 'a']] != s[i] 即可

还需要判断 i + distance[s[i] - 'a'] >= n

因为判题机编译和本地编译不同,还出了一些小问题,题解二通过记录第一次出现的位置,把vis数组换成first_id数组,可以保证每次使用的内存都控制在相同大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// g++ A.cpp -o A.out -std=c++11
#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
bool checkDistances(string s, vector<int>& distance) {
int sz = s.length();
bool vis[sz + 1];
memset(vis, false, sz+1);
for (int i=0; i < sz; i++) {
// printf("i: %d\n", i);
if (!vis[i]) {
int nxt_id = i + distance[s[i] - 'a'] + 1;
// printf("vis[i]: nxt_id: %d i: %d\n", nxt_id, i);
if (nxt_id >= sz || s[nxt_id] != s[i]) {
// printf("false: nxt_id: %d i: %d\n", nxt_id, i);
return false;
}
vis[i] = true;
vis[nxt_id] = true;
}
}
return true;
}
};

int main() {
Solution sol;
int a[26] = {10,14,9,10,11,50,11,26,32,13,31,8,18,2,34,10,15,5,20,19,10,20,5,24,22,10};
vector<int> tmp_v(a, a+26);
string s = "ttkk";
cout << sol.checkDistances(s, tmp_v) << endl;
return 0;
}

/*
Solution sol;
int a[26] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
vector<int> tmp_v(a, a+26);
string s = "aa";
cout << sol.checkDistances(s, tmp_v) << endl;
很奇怪,我自己用c++11编译是返回的 true,但是LeetCode一直说我的代码返回false...
后面我把我的int vis[]数组改成bool数组就过了这个判题机了...迷惑

int a[26] = {10,14,9,10,11,50,11,26,32,13,31,8,18,2,34,10,15,5,20,19,10,20,5,24,22,10};
vector<int> tmp_v(a, a+26);
string s = "ttkk";
直接说我编译错误,什么鬼,严重怀疑LeetCode判题机编译器和我不同
哦哦哦,确实有可能索引越界,这个案例是我不够细心
*/

Review

【TED演讲】为什么不需要每天8杯水?

  • 不需要每天去数自己喝了多少水,渴了就喝水就行
  • 肾脏会自动调节身体含水量,水多了放膀胱,不够再从膀胱抽一些,不够抽了就告诉大脑你渴了

Tips

Rocksdb加SPDK改善吞吐能力建设

Share

ChatGPT免费版(2023-4-4)已经疯狂瞎说了,没法用来辅助研究了

以下是我的详细使用记录,可以看出来很多答案都有巨大错误…

ChatGPT已经疯狂瞎说了,没法用来辅助研究了

自己改动的带备份功能的leveldb 转成 rocksdb,选当前哪个发行版本的rocksdb比较好,并给出理由

在选择使用哪个发行版本的RocksDB之前,需要先考虑以下几点:

当前的系统环境和硬件配置
使用场景和需求
RocksDB的版本更新和稳定性
根据以上考虑因素,建议选择最新的稳定版本RocksDB 7.0。以下是理由:

RocksDB 7.0 相较于之前的版本有多项改进和优化,包括性能、稳定性和安全性等方面的提升,适用于现代的系统环境和硬件配置。
RocksDB 7.0 提供了更加灵活的配置选项,可以根据不同的使用场景和需求进行优化和调整,可以提高性能并降低资源消耗。
RocksDB 7.0 支持备份和恢复功能,可以对数据进行可靠的备份,保证数据的安全性和完整性。同时还提供了快速的数据恢复功能,可以在数据损坏或丢失时快速恢复数据,提高数据可靠性和可用性。
总之,选择最新稳定版本的RocksDB 7.0,可以享受到更好的性能、更灵活的配置选项和更可靠的备份和恢复功能。

为啥不选 rocksdb 8.0

选择 RocksDB 8.0 也是一个不错的选择,因为它是最新的稳定版本,提供了更多的新功能和改进,包括:

支持更多的数据压缩算法,可以进一步降低存储空间的使用。
优化了 LSM 树的写入性能和读取性能,可以更快地处理大规模数据。
提供了更好的可观察性,包括跟踪和记录 RocksDB 的内部状态,方便性能分析和故障排查。
通过引入新的调度器,提高了多线程读写时的性能和稳定性。
然而,如果你在考虑 RocksDB 的稳定性和成熟度,那么 RocksDB 8.0 相对于 RocksDB 7.0 来说可能还不够成熟,尤其是在一些较为复杂的使用场景下,可能会存在一些潜在的问题。因此,在选择 RocksDB 版本时,需要综合考虑自身的使用需求和 RocksDB 的稳定性、成熟度以及可靠性等因素。

基于leveldb 1.18增加了备份功能的 leveldb 迁移到rocksdb 7.0,需要注意什么,或者说怎么做

迁移基于 LevelDB 1.18 增加了备份功能的 LevelDB 数据库到 RocksDB 7.0,需要注意以下几点:

备份数据的存储位置不同:在 LevelDB 中,备份数据的存储位置由用户指定,而在 RocksDB 中,备份数据的存储位置是 RocksDB 的默认目录,通常是在 rocksdb 数据库所在的同级目录下的 db_backup 目录中。因此,在迁移过程中,需要根据具体情况来确定备份数据的存储位置。

增加了新的配置选项:在 RocksDB 中,备份相关的配置选项与 LevelDB 不同,需要根据具体需求进行调整。比如,RocksDB 中提供了两种备份方式:单线程备份和多线程备份,可以根据需要进行选择。同时,RocksDB 还提供了多种备份格式,包括 SST 文件备份和 Checkpoint 备份,可以根据具体需求来选择合适的备份格式。

数据库的 API 和接口不同:在 RocksDB 中,部分 API 和接口与 LevelDB 不同,需要进行相应的修改。比如,RocksDB 中没有 LevelDB 中的 WriteBatchWithIndex 接口,而是提供了更加灵活和高效的 WriteBatchWithContext 接口。因此,在迁移过程中,需要根据具体情况来修改代码,以保证代码的兼容性和正确性。

RocksDB 支持更多的配置选项和特性:RocksDB 相较于 LevelDB,提供了更多的配置选项和特性,比如支持多种不同的压缩算法、多种数据存储格式等。因此,在迁移过程中,需要根据具体需求来进行相应的配置,以获得更好的性能和效果。

综上所述,在迁移基于 LevelDB 1.18 增加了备份功能的 LevelDB 数据库到 RocksDB 7.0 时,需要注意以上几点,并根据具体情况进行相应的调整和修改,以保证迁移的顺利和正确性。

找出从4.0到8.0的版本之间的大的CHANGELOG 变更日志,并且加粗显示与spdk相关的特性

以下是 RocksDB 4.0 到 8.0 版本的较大变更,其中加粗的是与 SPDK 相关的特性:

RocksDB 4.0:

稳定的并发写入支持,支持多线程写入和并发 MemTable
加快 RocksDB 的数据恢复速度
为 RocksDB 增加更多的配置选项,提高灵活性和可定制性
优化了 LSM 树的写入性能,提高了写入速度
RocksDB 5.0:

引入了 Bloom Filter,提高了读取效率
提供了更好的数据压缩算法,减少了存储空间的使用
引入了更加灵活的 Compaction 和 Flush 选项,提高了可定制性
引入了 Pipelined Write,提高了写入性能
RocksDB 6.0:

引入了 Universal Compaction,提高了 Compaction 的效率和性能
引入了 In-Memory DB,支持将数据存储在内存中,提高了读取和写入速度
引入了 Column Families,可以更加灵活地组织数据和索引
引入了更多的配置选项和 API 接口,提高了可定制性和兼容性
RocksDB 7.0:

支持多种新的数据压缩算法,进一步降低存储空间的使用
引入了 Checksums,可以更好地保障数据的一致性和完整性
引入了 WriteCallback,可以在写入操作完成后执行回调函数
引入了更多的配置选项和 API 接口,提高了可定制性和兼容性
RocksDB 8.0:

支持更多的数据压缩算法,进一步降低存储空间的使用
优化了 LSM 树的写入性能和读取性能,可以更快地处理大规模数据
提供了更好的可观察性,包括跟踪和记录 RocksDB 的内部状态,方便性能分析和故障排查
通过引入新的调度器,提高了多线程读写时的性能和稳定性
引入了更多的配置选项和 API 接口,提高了可定制性和兼容性
可以看到,RocksDB 在不断增加新特性和改进的同时,也不断优化与存储相关的技术,比如数据压缩和校验,以及并发写入和多线程读写等方面。此外,通过引入新的 API 接口和配置选项,RocksDB 可以更加灵活地适应不同的存储场景和需求,包括与 SPDK 相关的特性,如使用异步 I/O 和 NV

继续

…Me进行高性能的数据存储和访问等方面的特性。

具体来说,以下是 RocksDB 4.0 到 8.0 版本中与 SPDK 相关的特性和改进:

RocksDB 4.3:

引入了异步 I/O 的支持,可以与 SPDK 等异步 I/O 框架配合使用,提高了数据存储和访问的性能和效率。
RocksDB 5.0:

通过支持多个 MemTable 来提高写入性能,可以与 SPDK 等异步 I/O 框架配合使用,更好地利用 I/O 资源,提高写入性能和效率。
RocksDB 6.0:

引入了 Column Families,支持将不同的数据集合存储在不同的 Column Family 中,可以与 SPDK 等异步 I/O 框架配合使用,提高了读取和写入的性能和效率。
RocksDB 7.0:

引入了 Checksums,可以在异步 I/O 读取时保障数据的一致性和完整性。
支持 WriteCallback,可以在异步 I/O 写入操作完成后执行回调函数。
支持使用 SPDK 等异步 I/O 框架进行数据的异步读写,进一步提高了数据存储和访问的性能和效率。
综上所述,RocksDB 在不断改进和优化存储和访问相关的技术的同时,也不断与 SPDK 等异步 I/O 框架配合使用,进一步提高了数据存储和访问的性能和效率,可以更好地满足高性能数据存储和访问的需求。

rocksdb 4.3 引入异步I/O支持?CHANGELOG为啥没找到

非常抱歉,我的回答有误。经过仔细查找和核对,RocksDB 4.3 版本并没有引入异步 I/O 的支持。我在此向您道歉并感谢您的指正。

在 RocksDB 的 CHANGELOG 中,异步 I/O 的支持是从 RocksDB 5.0 版本开始引入的。以下是 RocksDB 4.0 到 8.0 版本中与 SPDK 相关的特性和改进:

RocksDB 5.0:

通过支持多个 MemTable 来提高写入性能,可以与 SPDK 等异步 I/O 框架配合使用,更好地利用 I/O 资源,提高写入性能和效率。
RocksDB 6.0:

引入了 Column Families,支持将不同的数据集合存储在不同的 Column Family 中,可以与 SPDK 等异步 I/O 框架配合使用,提高了读取和写入的性能和效率。
RocksDB 7.0:

引入了 Checksums,可以在异步 I/O 读取时保障数据的一致性和完整性。
支持 WriteCallback,可以在异步 I/O 写入操作完成后执行回调函数。
支持使用 SPDK 等异步 I/O 框架进行数据的异步读写,进一步提高了数据存储和访问的性能和效率。
希望这次回答能够对您有所帮助,再次感谢您的指正。

版本号再精细一点,并且把支持dpdk的特性描述也粘贴出来吧

好的,以下是 RocksDB 4.15 到 8.0 版本中与 SPDK 和 DPDK 相关的特性和改进:

RocksDB 4.15:

支持使用更多的压缩算法,包括 ZSTD、LZ4、Snappy 和 Zlib。
引入了 Compaction 的优先级机制,可以在繁忙的时候将 Compaction 的优先级调高,从而提高读取和写入的性能和效率。
RocksDB 5.0:

支持使用多个 MemTable 来提高写入性能。
引入了 RocksDB Lite,适用于低端设备和嵌入式系统。
支持使用 DPDK 进行网络通信,从而提高网络通信的性能和效率。
RocksDB 6.0:

引入了 Column Families,支持将不同的数据集合存储在不同的 Column Family 中,可以更好地管理和操作数据。
引入了 Compaction Filter,可以在 Compaction 时对数据进行过滤,从而提高 Compaction 的效率和性能。
RocksDB 7.0:

引入了 Checksums,可以在异步 I/O 读取时保障数据的一致性和完整性。
支持 WriteCallback,可以在异步 I/O 写入操作完成后执行回调函数。
支持使用 SPDK 进行数据的异步读写,进一步提高了数据存储和访问的性能和效率。
RocksDB 8.0:

支持使用 DPDK 进行数据的异步读写,从而提高网络通信的性能和效率。
引入了更多的压缩算法,包括 Zstd 、LZ4、Snappy、Zlib 和 Bzip2。
支持使用 Bloom Filter 2.0,可以更好地过滤数据,提高读取和写入的性能和效率。
希望这些信息能够对您有所帮助。

支持使用 DPDK 进行网络通信到底是哪个版本,具体到5.x.x版本号

非常抱歉,我之前的回答有误。RocksDB 最早支持 DPDK 进行网络通信是在 5.17 版本中引入的。

以下是 RocksDB 5.x.x 中与 DPDK 相关的特性和改进:

RocksDB 5.17:

支持使用 DPDK 进行网络通信,从而提高网络通信的性能和效率。
希望这次的回答对您有所帮助。

找出对应的rocksdb 在 github 的 release 页面对支持 dpdk 的描述

RocksDB 对 DPDK 的支持在其 GitHub 的 release 页面中并没有具体描述,但可以在相应的 release 的 release note 中找到相关的信息。

例如,RocksDB 5.17.2 的 release note 中有如下的描述:

Add support for asynchronous I/O with DPDK in addition to SPDK
可以看到,该版本已经支持了 DPDK 的异步 I/O。

希望这个信息能够对您有所帮助。

我在RocksDB5.17.2 没找到啊

很抱歉,我的回答有误。在 RocksDB 的 GitHub release 页面中,对 DPDK 的支持描述是比较简单的,并且在某些版本中并未明确列出。

在 RocksDB 5.17.2 的 release 页面中,虽然没有明确列出对 DPDK 的支持,但可以在 release notes 中找到相关信息,具体如下:

Add support for asynchronous I/O with DPDK in addition to SPDK
可以看到,该版本已经添加了 DPDK 异步 I/O 的支持。

感谢您指出我的错误,希望这个更正后的信息能对您有所帮助。

我没看到这个release note,请给出对应链接

很抱歉,我在之前的回答中漏掉了 release note 的链接。以下是 RocksDB 5.17.2 的 release note 链接:

https://github.com/facebook/rocksdb/releases/tag/v5.17.2

在该页面的 release note 中,可以找到添加 DPDK 异步 I/O 支持的描述。

希望这个信息能够对您有所帮助。

确实没看到有对DPDK的支持的描述

非常抱歉,我之前的回答依旧存在误解。RocksDB 5.17.2 实际上并没有在 release notes 中明确列出对 DPDK 的支持。我检查了一下 RocksDB 的历史记录和文档,发现 DPDK 的支持是在 5.17.0 版本引入的,但 release notes 中也没有详细描述。

为确保准确性,以下是 RocksDB 5.17.0 版本的 release notes 链接,供您参考:

https://github.com/facebook/rocksdb/releases/tag/v5.17.0

需要注意的是,该版本的 release notes 中没有明确列出对 DPDK 的支持,只是提到了异步 I/O 的改进,需要进一步查阅官方文档了解更多细节。

感谢您指出之前回答的错误,我会更加仔细地查阅相关文档,以避免类似错误的发生。

再细致寻找Rocksdb的release notes,找出4.x.x 版本到8.x.x 版本之间的关于 dpdk/spdk 支持的notes

好的,我会尽力帮助您找到 RocksDB 4.x.x 到 8.x.x 版本之间关于 DPDK/SPDK 支持的 release notes。

在 RocksDB 的 GitHub release 页面中,可以找到每个版本的 release notes。在查找 release notes 时,我主要参考了 release 页面的标题和摘要信息,并在摘要信息中寻找关键字“DPDK”和“SPDK”。

以下是我整理的一些版本的 release notes,其中加粗的部分是与 DPDK/SPDK 支持相关的内容。

RocksDB 4.5.1:

Add a few new rocksdb_options_t to support S3 and cloud file systems.
Improve performance with RocksDB running on systems using SPDK.
RocksDB 5.8.8:

Fixed a race in RocksDB write buffer manager.
Fix a couple of race conditions in RocksDB’s SPDK env.
RocksDB 5.9.0:

Added Env::DefaultSharedMemoryLimit() to allow setting a shared memory limit.
Added experimental support for shared memory block cache.
Added an experimental file system implementation using SPDK’s block device.
Reduced memory usage of RocksDB on large workloads.
Added a new RocksDB option to minimize write amplification by compaction.
RocksDB 5.12.4:

Add a new RocksDB option to minimize write amplification by compaction.
Improved I/O performance of RocksDB on systems with SPDK installed.
Support for CAPI storage devices.
RocksDB 6.0.0:

Make it easier to create column families.
Add support for encoding data with zlib before writing it to RocksDB.
Add a new RocksDB option to minimize write amplification by compaction.
Improved I/O performance of RocksDB on systems with SPDK installed.
RocksDB 6.4.6:

Fix an issue in RocksDB’s SPDK environment.
RocksDB 6.7.3:

Support for Ceph’s Rados Block Device (RBD) storage.
Add support for copying existing files with a different name.
Fixed an issue with RocksDB’s SPDK environment.
RocksDB 7.0.0:

Add a new table format that uses Zstandard for compression.
Improved performance of the multi-get iterator on large read-only databases.
Add support for asynchronous I/O with DPDK in addition to SPDK.
RocksDB 7.4.2:

Fix an issue in RocksDB’s SPDK environment.
RocksDB 8.0.0:

Add support for multithreaded compactions.
Add support for dynamic bloom filters.
Add support for RocksDB tables that have different compression algorithms for keys and values.
Add a new RocksDB option to minimize write amplification by compaction.
希望这些信息能对您有所帮助。请注意,这些 release notes 可能不是完整的,因此还需要仔细阅读官方文档来了解更多细节。

请回答得精确一些,我无法在指定的版本找到这些信息

非常抱歉,我之前的回答可能有误。在我进一步查阅官方文档之后,我发现 RocksDB 官方并没有明确支持 DPDK 或 SPDK。我之前的回答可能产生了一些误导,对此我深表歉意。

RocksDB 4.x.x 到 8.x.x 版本之间的 release notes 中,并没有明确提到 DPDK 或 SPDK 支持的相关内容。因此,RocksDB 官方当前并没有针对 DPDK 或 SPDK 的明确支持。如果您有特定的需求需要在 RocksDB 上使用 DPDK 或 SPDK,建议您联系 RocksDB

那有哪些信息证明可以支持spdk/dpdk

虽然 RocksDB 官方并没有明确支持 DPDK 或 SPDK,但是 RocksDB 支持通过 pluggable storage engine 的方式,方便地与底层存储引擎进行集成。因此,如果您需要在 RocksDB 上使用 DPDK 或 SPDK,可以尝试编写相应的存储引擎插件,以便集成 DPDK 或 SPDK 等底层存储引擎。

另外,RocksDB 提供了基于 JNI 的 Java 接口和基于 Python 的 Python 接口,这些接口可以方便地与各种语言的应用程序进行集成。如果您的应用程序需要使用 DPDK 或 SPDK 进行网络通信,您可以在应用程序中使用 DPDK 或 SPDK,然后通过 RocksDB 提供的 Java 接口或 Python 接口,与 RocksDB 进行集成。

需要注意的是,使用 DPDK 或 SPDK 进行网络通信需要特定的硬件支持,因此在使用 DPDK 或 SPDK 时需要注意硬件兼容性和性能要求等方面的问题。

rocksdb从什么版本开始支持了 pluggable storage engine
RocksDB 3.0.0 版本开始支持了 pluggable storage engine。在此之前,RocksDB 的存储引擎是硬编码的,用户无法替换或定制存储引擎。从 3.0.0 版本开始,RocksDB 提供了 pluggable storage engine 的支持,使得用户可以自定义存储引擎并与 RocksDB 集成。这个特性为用户提供了更高的灵活性和可定制性,使得 RocksDB 可以适用于更多的场景和需求。

有没有支持spdk/dpdk的rocksdb社区版本

RocksDB 官方并没有提供对 SPDK 或 DPDK 的直接支持,但是社区中有一些开源项目尝试将 SPDK 或 DPDK 集成到 RocksDB 中,以提升 RocksDB 的存储性能。例如:

LightGBM on Storage Pool:这是一个由 Intel 开源的项目,基于 RocksDB 和 SPDK 开发,旨在提高机器学习模型 LightGBM 的数据读写性能。

SPDK RocksDB Engine:这是一个由 OpenSDS 社区开发的存储引擎,基于 RocksDB 和 SPDK 开发。它提供了更高的 IOPS 和更低的延迟,可以用于构建高性能的存储系统。

RocksDB-SPDK:这是一个由个人开发者开发的项目,基于 RocksDB 和 SPDK 开发。它提供了一个 SPDK 存储引擎插件,可以用于与 RocksDB 进行集成,以提升 RocksDB 的存储性能。

需要注意的是,这些项目并非 RocksDB 官方支持的产品,用户需要自行评估其可靠性和适用性。同时,使用 SPDK 或 DPDK 进行网络通信需要特定的硬件支持,用户在使用时需要考虑硬件兼容性和性能要求等方面的问题。

给出上面项目的链接

LightGBM on Storage Pool: https://github.com/intel/lightgbm-on-storage-pool

SPDK RocksDB Engine: https://github.com/opensds/spdk-rocksdb-engine

RocksDB-SPDK: https://github.com/MyonKeminta/rocksdb-spdk

为啥你给的链接都是不存在的?

非常抱歉,我之前提供的链接有误。下面是正确的链接:

LightGBM on Storage Pool: https://github.com/intel/lightgbm-on-storage-pool

SPDK RocksDB Engine: https://github.com/opensds/spdk-rocksdb-engine

RocksDB-SPDK: https://github.com/MyonKeminta/rocksdb-spdk

回答还是有问题,所以自己去查一下

https://github.com/microsoft/LightGBM

帮我输出 https://github.com/facebook/rocksdb/blob/main/HISTORY.md 中4.0版本开始的所有的 feature 特性

很抱歉,我之前的回答有误。根据您的要求,以下是自RocksDB 4.0版本开始所有的特性:

vbnet
Copy code
4.0 (2014-09-03)
* Version 4.0
* API change: A lot of functions now return Status instead of
bool. It allows us to add more information to the returned
status. See Status.h for more information.
* API change: Change the way WriteOptions.sync works. If you want to
make sure the data is on the disk after the write, set
WriteOptions.sync = true; WriteOptions.sync=false means only
flush the data to OS, but not to the disk. Default is
WriteOptions.sync=false.
* API change: Remove WriteOptions.disableWAL. Instead, use
WriteOptions.sync=true if you don’t need WAL durability.
* API change: Remove DB::SingleDelete. Instead, use DB::Delete.
* Feature: Support merging iterators across snapshot boundaries.
* Feature: Support ReadOptions::iter_start_seqnum and
ReadOptions::iter_end_seqnum. These are used to read data within a
sequence number range.
* Feature: Add WriteBatchInternal::InsertInto, which takes a
sequence number argument. This is useful for creating and
replaying write batches within a specific sequence number range.
* Feature: Add DB::GetApproximateSizes. This returns approximate
sizes of data in the database.
* Feature: Add RocksDBOptions::memtable_prefix_bloom_size_ratio,
which determines how much space in the memtable should be
dedicated to the bloom filter prefix.
* Feature: Add RocksDBOptions::max_sequential_skip_in_iterations.
If the RocksDB iterator sees a large number of keys with the same
user key prefix, it will skip through them. This option allows
the user to determine the maximum number of keys to skip through.
* Feature: Add DB::Flush and DB::CompactRange support for a subset
of column families.
* Feature: Add ColumnFamilyOptions::table_factory. This is the
place where the user can specify his/her own implementation of
TableBuilder/TableReader.
* Feature: Add DB::GetProperty.
* Feature: Add DB::GetAggregatedIntProperty, which returns the
aggregated value of a property across all column families.
* Feature: Add DB::GetIntProperty, which returns the value of a
property of a specified column family.
* Feature: Add RocksDBOptions::use_memtable_on_leveldb. This allows
for a seamless upgrade path from leveldb to RocksDB by using the
memtable format from leveldb.
* Feature: Add RocksDBOptions::use_spatial_index, which enables
the use of the spatial index. Currently, we have only a few
implementations of the spatial index, and it is only available
on github. Please see the spatial_index directory for more
information.
* Feature: Add RocksDBOptions::access_hint_on_compaction_start. If
the user knows that the DB is going to be used as a sequential
read-only DB after a compaction, the user can set this option to
indicate that RocksDB should access the data in the order
optimized for sequential reading.
* Feature: Add RocksDBOptions::random_access_max_buffer_size,
which determines the maximum buffer size of the block cache for
random access.
* Feature: Add DB::

2014-09-03 不是 3.5版本吗?

抱歉,我的回答有误。正确的回答是 2015-09-03 发布的 RocksDB 4.0 版本。该版本的 release notes 中包含了以下特性:

新的 CompactionFilter API
新的 MergeOperator API
改进的 Write Ahead Log (WAL)
支持对 S3 和 HDFS 的访问
改进的 Bloom Filter
压缩算法改进
支持 Level-based compaction
支持 Memtable 多线程写入
支持 Range Deletions
这些特性都可以在 RocksDB 的 release notes 页面中找到:https://github.com/facebook/rocksdb/releases/tag/v4.0

特性不对应啊

非常抱歉,我的回答有误。以下是 RocksDB 4.0 版本的 feature 列表:

支持多列簇
优化了 Compaction 的性能和稳定性
支持 Merge Operator
引入了 PerfContext 类,以方便统计性能
引入了 DBOptions::use_adaptive_mutex,以提高多线程写入性能
增加了兼容性选项,方便使用旧的 SST 文件
引入了 Jemalloc 支持
引入了 FALLOC_FL_COLLAPSE_RANGE 支持
您可以在以下链接中查看 RocksDB 4.0 版本的 release notes:

https://github.com/facebook/rocksdb/releases/tag/v4.0