RocksJava API ToDo
这个页面列出了RocksJava API的已知TODO项,还显示了谁在思考/处理一个特定的主题;希望通过这种机制,我们可以避免重复的工作。
最近的一些用户请求(截至2017年6月):
按优先次序排列:
1.Load Options APIs to dynamically reload the options without needing a restart. ([#2898](https://github.com/facebook/rocksdb/pull/2898))
2.Merge Operator API (#2282)
3.Compaction Filter API (#2483)
4.Ability to pass in native pointers/memory to reduce the JNI overhead
5.Shared block cache across all column-families and instances. (#3623)
6.Stats (Tickers and histograms) in sync with C++ API. (in-sync as of June 2017, due to #2429 and #2209)
7.Implement Statistics.getHistogramString (#2374).
即将对Java API进行的更改(已过时——最后一次更新是在2016年7月)
1.调整RocksJava比较器实现——我们分析了当前的实现,并注意到使用当前实现会显著降低性能。因此,我们决定按顺序执行以下步骤
分析比较器实现中哪一个性能更好,是DirectComparator还是comparator
概述在RocksJava中使用定制c++ -比较器的正确方法。
删除除一个比较器实现之外的所有内容。取决于上面列出的分析。
用相关的JavaDoc记录性能损失。
Findshortestseparator和FindShortSuccessor只在实现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表达式