1 // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 package org.rocksdb;
7 
8 public interface MutableColumnFamilyOptionsInterface<
9     T extends MutableColumnFamilyOptionsInterface<T>>
10     extends AdvancedMutableColumnFamilyOptionsInterface<T> {
11   /**
12    * Amount of data to build up in memory (backed by an unsorted log
13    * on disk) before converting to a sorted on-disk file.
14    *
15    * Larger values increase performance, especially during bulk loads.
16    * Up to {@code max_write_buffer_number} write buffers may be held in memory
17    * at the same time, so you may wish to adjust this parameter
18    * to control memory usage.
19    *
20    * Also, a larger write buffer will result in a longer recovery time
21    * the next time the database is opened.
22    *
23    * Default: 64MB
24    * @param writeBufferSize the size of write buffer.
25    * @return the instance of the current object.
26    * @throws java.lang.IllegalArgumentException thrown on 32-Bit platforms
27    *   while overflowing the underlying platform specific value.
28    */
setWriteBufferSize(long writeBufferSize)29   MutableColumnFamilyOptionsInterface setWriteBufferSize(long writeBufferSize);
30 
31   /**
32    * Return size of write buffer size.
33    *
34    * @return size of write buffer.
35    * @see #setWriteBufferSize(long)
36    */
writeBufferSize()37   long writeBufferSize();
38 
39   /**
40    * Disable automatic compactions. Manual compactions can still
41    * be issued on this column family
42    *
43    * @param disableAutoCompactions true if auto-compactions are disabled.
44    * @return the reference to the current option.
45    */
setDisableAutoCompactions( boolean disableAutoCompactions)46   MutableColumnFamilyOptionsInterface setDisableAutoCompactions(
47       boolean disableAutoCompactions);
48 
49   /**
50    * Disable automatic compactions. Manual compactions can still
51    * be issued on this column family
52    *
53    * @return true if auto-compactions are disabled.
54    */
disableAutoCompactions()55   boolean disableAutoCompactions();
56 
57   /**
58    * Number of files to trigger level-0 compaction. A value &lt; 0 means that
59    * level-0 compaction will not be triggered by number of files at all.
60    *
61    * Default: 4
62    *
63    * @param level0FileNumCompactionTrigger The number of files to trigger
64    *   level-0 compaction
65    * @return the reference to the current option.
66    */
setLevel0FileNumCompactionTrigger( int level0FileNumCompactionTrigger)67   MutableColumnFamilyOptionsInterface setLevel0FileNumCompactionTrigger(
68       int level0FileNumCompactionTrigger);
69 
70   /**
71    * Number of files to trigger level-0 compaction. A value &lt; 0 means that
72    * level-0 compaction will not be triggered by number of files at all.
73    *
74    * Default: 4
75    *
76    * @return The number of files to trigger
77    */
level0FileNumCompactionTrigger()78   int level0FileNumCompactionTrigger();
79 
80   /**
81    * We try to limit number of bytes in one compaction to be lower than this
82    * threshold. But it's not guaranteed.
83    * Value 0 will be sanitized.
84    *
85    * @param maxCompactionBytes max bytes in a compaction
86    * @return the reference to the current option.
87    * @see #maxCompactionBytes()
88    */
setMaxCompactionBytes(final long maxCompactionBytes)89   MutableColumnFamilyOptionsInterface setMaxCompactionBytes(final long maxCompactionBytes);
90 
91   /**
92    * We try to limit number of bytes in one compaction to be lower than this
93    * threshold. But it's not guaranteed.
94    * Value 0 will be sanitized.
95    *
96    * @return the maximum number of bytes in for a compaction.
97    * @see #setMaxCompactionBytes(long)
98    */
maxCompactionBytes()99   long maxCompactionBytes();
100 
101   /**
102    * The upper-bound of the total size of level-1 files in bytes.
103    * Maximum number of bytes for level L can be calculated as
104    * (maxBytesForLevelBase) * (maxBytesForLevelMultiplier ^ (L-1))
105    * For example, if maxBytesForLevelBase is 20MB, and if
106    * max_bytes_for_level_multiplier is 10, total data size for level-1
107    * will be 200MB, total file size for level-2 will be 2GB,
108    * and total file size for level-3 will be 20GB.
109    * by default 'maxBytesForLevelBase' is 256MB.
110    *
111    * @param maxBytesForLevelBase maximum bytes for level base.
112    *
113    * @return the reference to the current option.
114    *
115    * See {@link AdvancedMutableColumnFamilyOptionsInterface#setMaxBytesForLevelMultiplier(double)}
116    */
setMaxBytesForLevelBase( long maxBytesForLevelBase)117   T setMaxBytesForLevelBase(
118       long maxBytesForLevelBase);
119 
120   /**
121    * The upper-bound of the total size of level-1 files in bytes.
122    * Maximum number of bytes for level L can be calculated as
123    * (maxBytesForLevelBase) * (maxBytesForLevelMultiplier ^ (L-1))
124    * For example, if maxBytesForLevelBase is 20MB, and if
125    * max_bytes_for_level_multiplier is 10, total data size for level-1
126    * will be 200MB, total file size for level-2 will be 2GB,
127    * and total file size for level-3 will be 20GB.
128    * by default 'maxBytesForLevelBase' is 256MB.
129    *
130    * @return the upper-bound of the total size of level-1 files
131    *     in bytes.
132    *
133    * See {@link AdvancedMutableColumnFamilyOptionsInterface#maxBytesForLevelMultiplier()}
134    */
maxBytesForLevelBase()135   long maxBytesForLevelBase();
136 
137   /**
138    * Compress blocks using the specified compression algorithm.  This
139    * parameter can be changed dynamically.
140    *
141    * Default: SNAPPY_COMPRESSION, which gives lightweight but fast compression.
142    *
143    * @param compressionType Compression Type.
144    * @return the reference to the current option.
145    */
setCompressionType( CompressionType compressionType)146   T setCompressionType(
147           CompressionType compressionType);
148 
149   /**
150    * Compress blocks using the specified compression algorithm.  This
151    * parameter can be changed dynamically.
152    *
153    * Default: SNAPPY_COMPRESSION, which gives lightweight but fast compression.
154    *
155    * @return Compression type.
156    */
compressionType()157   CompressionType compressionType();
158 }
159