1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package org.apache.hadoop.hbase; 20 21 import org.apache.hadoop.hbase.classification.InterfaceAudience; 22 import org.apache.hadoop.hbase.classification.InterfaceStability; 23 24 25 /** 26 * The unit of storage in HBase consisting of the following fields: 27 * <br> 28 * <pre> 29 * 1) row 30 * 2) column family 31 * 3) column qualifier 32 * 4) timestamp 33 * 5) type 34 * 6) MVCC version 35 * 7) value 36 * </pre> 37 * <p> 38 * Uniqueness is determined by the combination of row, column family, column qualifier, 39 * timestamp, and type. 40 * </p> 41 * <p> 42 * The natural comparator will perform a bitwise comparison on row, column family, and column 43 * qualifier. Less intuitively, it will then treat the greater timestamp as the lesser value with 44 * the goal of sorting newer cells first. 45 * </p> 46 * <p> 47 * This interface should not include methods that allocate new byte[]'s such as those used in client 48 * or debugging code. These users should use the methods found in the {@link CellUtil} class. 49 * Currently for to minimize the impact of existing applications moving between 0.94 and 0.96, we 50 * include the costly helper methods marked as deprecated. 51 * </p> 52 * <p> 53 * Cell implements Comparable<Cell> which is only meaningful when 54 * comparing to other keys in the 55 * same table. It uses CellComparator which does not work on the -ROOT- and hbase:meta tables. 56 * </p> 57 * <p> 58 * In the future, we may consider adding a boolean isOnHeap() method and a getValueBuffer() method 59 * that can be used to pass a value directly from an off-heap ByteBuffer to the network without 60 * copying into an on-heap byte[]. 61 * </p> 62 * <p> 63 * Historic note: the original Cell implementation (KeyValue) requires that all fields be encoded as 64 * consecutive bytes in the same byte[], whereas this interface allows fields to reside in separate 65 * byte[]'s. 66 * </p> 67 */ 68 @InterfaceAudience.Public 69 @InterfaceStability.Evolving 70 public interface Cell { 71 72 //1) Row 73 74 /** 75 * Contiguous raw bytes that may start at any index in the containing array. Max length is 76 * Short.MAX_VALUE which is 32,767 bytes. 77 * @return The array containing the row bytes. 78 */ 79 byte[] getRowArray(); 80 81 /** 82 * @return Array index of first row byte 83 */ 84 int getRowOffset(); 85 86 /** 87 * @return Number of row bytes. Must be < rowArray.length - offset. 88 */ 89 short getRowLength(); 90 91 92 //2) Family 93 94 /** 95 * Contiguous bytes composed of legal HDFS filename characters which may start at any index in the 96 * containing array. Max length is Byte.MAX_VALUE, which is 127 bytes. 97 * @return the array containing the family bytes. 98 */ 99 byte[] getFamilyArray(); 100 101 /** 102 * @return Array index of first family byte 103 */ 104 int getFamilyOffset(); 105 106 /** 107 * @return Number of family bytes. Must be < familyArray.length - offset. 108 */ 109 byte getFamilyLength(); 110 111 112 //3) Qualifier 113 114 /** 115 * Contiguous raw bytes that may start at any index in the containing array. 116 * @return The array containing the qualifier bytes. 117 */ 118 byte[] getQualifierArray(); 119 120 /** 121 * @return Array index of first qualifier byte 122 */ 123 int getQualifierOffset(); 124 125 /** 126 * @return Number of qualifier bytes. Must be < qualifierArray.length - offset. 127 */ 128 int getQualifierLength(); 129 130 131 //4) Timestamp 132 133 /** 134 * @return Long value representing time at which this cell was "Put" into the row. Typically 135 * represents the time of insertion, but can be any value from 0 to Long.MAX_VALUE. 136 */ 137 long getTimestamp(); 138 139 140 //5) Type 141 142 /** 143 * @return The byte representation of the KeyValue.TYPE of this cell: one of Put, Delete, etc 144 */ 145 byte getTypeByte(); 146 147 148 //6) MvccVersion 149 150 /** 151 * @deprecated as of 1.0, use {@link Cell#getSequenceId()} 152 * 153 * Internal use only. A region-specific sequence ID given to each operation. It always exists for 154 * cells in the memstore but is not retained forever. It may survive several flushes, but 155 * generally becomes irrelevant after the cell's row is no longer involved in any operations that 156 * require strict consistency. 157 * @return mvccVersion (always >= 0 if exists), or 0 if it no longer exists 158 */ 159 @Deprecated 160 long getMvccVersion(); 161 162 /** 163 * A region-specific unique monotonically increasing sequence ID given to each Cell. It always 164 * exists for cells in the memstore but is not retained forever. It will be kept for 165 * {@link HConstants#KEEP_SEQID_PERIOD} days, but generally becomes irrelevant after the cell's 166 * row is no longer involved in any operations that require strict consistency. 167 * @return seqId (always > 0 if exists), or 0 if it no longer exists 168 */ 169 long getSequenceId(); 170 171 //7) Value 172 173 /** 174 * Contiguous raw bytes that may start at any index in the containing array. Max length is 175 * Integer.MAX_VALUE which is 2,147,483,647 bytes. 176 * @return The array containing the value bytes. 177 */ 178 byte[] getValueArray(); 179 180 /** 181 * @return Array index of first value byte 182 */ 183 int getValueOffset(); 184 185 /** 186 * @return Number of value bytes. Must be < valueArray.length - offset. 187 */ 188 int getValueLength(); 189 190 /** 191 * @return the tags byte array 192 */ 193 byte[] getTagsArray(); 194 195 /** 196 * @return the first offset where the tags start in the Cell 197 */ 198 int getTagsOffset(); 199 200 /** 201 * @return the total length of the tags in the Cell. 202 */ 203 int getTagsLength(); 204 205 /** 206 * WARNING do not use, expensive. This gets an arraycopy of the cell's value. 207 * 208 * Added to ease transition from 0.94 -> 0.96. 209 * 210 * @deprecated as of 0.96, use {@link CellUtil#cloneValue(Cell)} 211 */ 212 @Deprecated 213 byte[] getValue(); 214 215 /** 216 * WARNING do not use, expensive. This gets an arraycopy of the cell's family. 217 * 218 * Added to ease transition from 0.94 -> 0.96. 219 * 220 * @deprecated as of 0.96, use {@link CellUtil#cloneFamily(Cell)} 221 */ 222 @Deprecated 223 byte[] getFamily(); 224 225 /** 226 * WARNING do not use, expensive. This gets an arraycopy of the cell's qualifier. 227 * 228 * Added to ease transition from 0.94 -> 0.96. 229 * 230 * @deprecated as of 0.96, use {@link CellUtil#cloneQualifier(Cell)} 231 */ 232 @Deprecated 233 byte[] getQualifier(); 234 235 /** 236 * WARNING do not use, expensive. this gets an arraycopy of the cell's row. 237 * 238 * Added to ease transition from 0.94 -> 0.96. 239 * 240 * @deprecated as of 0.96, use {@link CellUtil#getRowByte(Cell, int)} 241 */ 242 @Deprecated 243 byte[] getRow(); 244 }