- 
                Notifications
    
You must be signed in to change notification settings  - Fork 6.6k
 
RocksJava API TODO
This page sets out the known TODO items for the RocksJava API, it also shows who is thinking/working on a particular topic; Through this mechanism hopefully we can avoid duplicating effort.
In order of priority:
- 
Load Options APIs to dynamically reload the options without needing a restart. ([#2898](https://github.com/facebook/rocksdb/pull/2898)) - Merge Operator API (#2282)
 - Compaction Filter API (#2483)
 - Ability to pass in native pointers/memory to reduce the JNI overhead
 - Shared block cache across all column-families and instances. (#3623)
 Stats (Tickers and histograms) in sync with C++ API. (in-sync as of June 2017, due to #2429 and #2209)- Implement Statistics.getHistogramString (#2374).
 
- Adjust RocksJava Comparator implementation - We analyzed the current implementation and noticed a significant loss of performance using the current implementation. So we decided to do the following steps in order
 
- Analyze which one of the comparator implementations is performing better either 
DirectComparatororComparator - Outline a proper way to use Custom-C++-Comparators with RocksJava.
 - Remove everything but one Comparator implementation. Depending on the analysis listed above.
 - Document the performance penalties in related JavaDoc.
 - 
FindShortestSeparatorandFindShortSuccessorshall only do something if the Java method is implemented. What`s currently not the case. 
- 
Rework
WBWIIteratorto use bothSliceandDirectSlice(see above). - 
Introducefinalon variables/members everywhere they are immutable. - 
Implement
ldbfor Java. For example, the ability to specify the Comparator which implemented in Java. @adamretter - 
Custom merge operator for Java. At the moment it is only possible to use merge operators which are available in C++ but not implementing custom functionality solely in Java.Decision: will not be implemented. - 
Expose an AbstractLogger. RocksDB C++ api allows to provide a custom Logger. This shall also be possible from Java side and allows to attach RocksDB logging to application logging facilities. - 
Document the performance penalties if log level is too verbose. - 
Port remaining functionality in
db.hto RocksJava. @fyrz - 
Update Statistics/HistogramData to 3.10@fyrz - 
Build isolation. Building Java API should not require building RocksDB. You should be able to use a Java API build with a separate existing RocksDB installation. The Java API native aspect will instead indirectly depend on a shared or static RocksDB lib. @adamretter
 - 
Expose optimistic locking @fyrz
 
- 
Move on to Java-8, especially because Java-7 is EOL this year.
 - 
Look at Java 8 Long#unsigned operations.
 - 
Consider whether we should add an UnsignedLong, UnsignedInt class types of our own to prevent users from sending invalid DBOptions.
 - 
Restructure the package layout within the Java part.
 - 
Implement ARM (Automatic Resource Management) e.g.DONE @adamrettertry-with-resourcesJava 7 use viaCloseable/AutoCloseablefor iterators, db, write batches etc. Along with this change we will remove the auto-cleanup for c++ resources usingfinalize. Instead we will throw an exception if a C++ resource is going to be finalized without freeing the native handle first. - 
Consider converting callbacks to lambda expressions
 
Contents
- RocksDB Wiki
 - Overview
 - RocksDB FAQ
 - Terminology
 - Requirements
 - Contributors' Guide
 - Release Methodology
 - RocksDB Users and Use Cases
 - RocksDB Public Communication and Information Channels
 - 
Basic Operations
- Iterator
 - Prefix seek
 - SeekForPrev
 - Tailing Iterator
 - Compaction Filter
 - Multi Column Family Iterator
 - Read-Modify-Write (Merge) Operator
 - Column Families
 - Creating and Ingesting SST files
 - Single Delete
 - SST Partitioner
 - Low Priority Write
 - Time to Live (TTL) Support
 - Transactions
 - Snapshot
 - DeleteRange
 - Atomic flush
 - Read-only and Secondary instances
 - Approximate Size
 - User-defined Timestamp
 - Wide Columns
 - BlobDB
 - Online Verification
 
 - Options
 - MemTable
 - Journal
 - Cache
 - Write Buffer Manager
 - Compaction
 - SST File Formats
 - IO
 - Compression
 - Full File Checksum and Checksum Handoff
 - Background Error Handling
 - Huge Page TLB Support
 - Tiered Storage (Experimental)
 - Logging and Monitoring
 - Known Issues
 - Troubleshooting Guide
 - Tests
 - Tools / Utilities
 - 
Implementation Details
- Delete Stale Files
 - Partitioned Index/Filters
 - WritePrepared-Transactions
 - WriteUnprepared-Transactions
 - How we keep track of live SST files
 - How we index SST
 - Merge Operator Implementation
 - RocksDB Repairer
 - Write Batch With Index
 - Two Phase Commit
 - Iterator's Implementation
 - Simulation Cache
 - [To Be Deprecated] Persistent Read Cache
 - DeleteRange Implementation
 - unordered_write
 
 - Extending RocksDB
 - RocksJava
 - Lua
 - Performance
 - Projects Being Developed
 - Misc