RocksJava API ToDo

这个页面列出了RocksJava API的已知TODO项,还显示了谁在思考/处理一个特定的主题;希望通过这种机制,我们可以避免重复的工作。

最近的一些用户请求(截至2017年6月):

按优先次序排列:

  1. 1.Load Options APIs to dynamically reload the options without needing a restart. ([#2898](https://github.com/facebook/rocksdb/pull/2898))
  2. 2.Merge Operator API (#2282)
  3. 3.Compaction Filter API (#2483)
  4. 4.Ability to pass in native pointers/memory to reduce the JNI overhead
  5. 5.Shared block cache across all column-families and instances. (#3623)
  6. 6.Stats (Tickers and histograms) in sync with C++ API. (in-sync as of June 2017, due to #2429 and #2209)
  7. 7.Implement Statistics.getHistogramString (#2374).

即将对Java API进行的更改(已过时——最后一次更新是在2016年7月)

1.调整RocksJava比较器实现——我们分析了当前的实现,并注意到使用当前实现会显著降低性能。因此,我们决定按顺序执行以下步骤

  1. 分析比较器实现中哪一个性能更好,是DirectComparator还是comparator
  2. 概述在RocksJava中使用定制c++ -比较器的正确方法。
  3. 删除除一个比较器实现之外的所有内容。取决于上面列出的分析。
  4. 用相关的JavaDoc记录性能损失。
  5. FindshortestseparatorFindShortSuccessor只在实现Java方法时才执行某些操作。而现在不是这样。

2.重做WBWIIterator,同时使用Slice和DirectSlice(见上面)。

3.在变量/成员不可变的地方引入final。

4.为Java实现ldb。例如,指定在Java中实现的比较器的能力。@adamretter

5.Java自定义合并操作符。目前只能使用c++中可用的合并操作符,而不能仅在Java中实现自定义功能。决定:不执行。

6.揭露一个AbstractLogger。RocksDB c++ api允许提供自定义日志程序。这也可以从Java端实现,并允许将RocksDB日志附加到应用程序日志工具。

7.如果日志级别过于冗长,则记录性能损失。

8.将db.h中的剩余功能移植到RocksJava。@fyrz

9.更新统计数据/直方图数据到3.10 @fyrz

10.建立隔离。构建Java API不应该需要构建RocksDB。您应该能够使用一个单独的现有RocksDB安装的Java API构建。Java API本机方面将间接地依赖于共享的或静态的RocksDB lib. @adamretter

11.公开乐观锁定 @fyrz

4.x的计划变更

1.继续看Java-8,尤其是因为Java-7 今年是EOL。

2.看Java 8 Long#unsigned 操作。

3.考虑是否应该添加我们自己的UnsignedLong、UnsignedInt类类型,以防止用户发送无效的DBOptions

4.在Java部分中重组包布局。

5.实现ARM(自动资源管理),例如通过 Closeable/AutoCloseable 对迭代器、db、批量写等使用Java 7资源进行测试。 与此同时,我们将使用finalize删除c++资源的自动清理。 相反,如果要在不首先释放本机句柄的情况下最终确定C++资源,我们将抛出异常。完成@adamretter

6.考虑将回调转换为lambda表达式