- 
                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