Skip to content

Commit 023421d

Browse files
author
chengyitian
committed
AJ-814: optimize decimal32、64 array vector query performance;
1 parent d5108b3 commit 023421d

File tree

2 files changed

+42
-30
lines changed

2 files changed

+42
-30
lines changed

src/com/xxdb/data/BasicDecimal32Vector.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -280,10 +280,10 @@ public void add(double value) {
280280
}
281281

282282
void addRange(int[] valueList) {
283-
unscaledValues = Arrays.copyOf(unscaledValues, valueList.length + unscaledValues.length);
283+
int requiredCapacity = size + valueList.length;
284+
checkCapacity(requiredCapacity);
284285
System.arraycopy(valueList, 0, unscaledValues, size, valueList.length);
285286
size += valueList.length;
286-
capacity = unscaledValues.length;
287287
}
288288

289289
public void addRange(String[] valueList) {
@@ -325,18 +325,24 @@ public void Append(Scalar value) throws Exception{
325325

326326
@Override
327327
public void Append(Vector value) throws Exception{
328-
if(((BasicDecimal32Vector)value).getScale() == scale_)
329-
addRange(((BasicDecimal32Vector)value).getdataArray());
330-
else{
331-
for(int i = 0; i < value.rows(); ++i){
328+
if (((BasicDecimal32Vector)value).getScale() == scale_)
329+
addRange(((BasicDecimal32Vector) value).getdataArray());
330+
else {
331+
for(int i = 0; i < value.rows(); ++i)
332332
Append((Scalar)value.get(i));
333-
}
334333
}
335334
}
336335

337336
@Override
338337
public void checkCapacity(int requiredCapacity) {
339-
throw new RuntimeException("BasicDecimal32Vector not support checkCapacity.");
338+
if (requiredCapacity > unscaledValues.length) {
339+
int newCapacity = Math.max(
340+
(int)(unscaledValues.length * GROWTH_FACTOR),
341+
requiredCapacity
342+
);
343+
unscaledValues = Arrays.copyOf(unscaledValues, newCapacity);
344+
capacity = newCapacity;
345+
}
340346
}
341347

342348
public void setScale(int scale){

src/com/xxdb/data/BasicDecimal64Vector.java

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class BasicDecimal64Vector extends AbstractVector{
1616
private int scale_ = -1;
1717
private long[] unscaledValues;
1818
private int size;
19-
private int capaticy;
19+
private int capacity;
2020

2121
private static final BigDecimal DECIMAL64_MIN_VALUE = new BigDecimal("-9223372036854775808");
2222
private static final BigDecimal DECIMAL64_MAX_VALUE = new BigDecimal("9223372036854775807");
@@ -33,15 +33,15 @@ public BasicDecimal64Vector(int size, int scale){
3333
unscaledValues = new long[size];
3434

3535
this.size = unscaledValues.length;
36-
capaticy = unscaledValues.length;
36+
capacity = unscaledValues.length;
3737
}
3838

3939
BasicDecimal64Vector(DATA_FORM df, int size){
4040
super(df);
4141
unscaledValues = new long[size];
4242

4343
this.size = unscaledValues.length;
44-
capaticy = unscaledValues.length;
44+
capacity = unscaledValues.length;
4545
}
4646

4747
BasicDecimal64Vector(long[] dataValue, int scale){
@@ -51,7 +51,7 @@ public BasicDecimal64Vector(int size, int scale){
5151
this.scale_ = scale;
5252
this.unscaledValues = dataValue;
5353
this.size = unscaledValues.length;
54-
capaticy = unscaledValues.length;
54+
capacity = unscaledValues.length;
5555
}
5656

5757
public BasicDecimal64Vector(String[] data, int scale) {
@@ -70,7 +70,7 @@ public BasicDecimal64Vector(String[] data, int scale) {
7070
}
7171

7272
size = length;
73-
capaticy = length;
73+
capacity = length;
7474
}
7575

7676
public BasicDecimal64Vector(DATA_FORM df, ExtendedDataInput in, int extra) throws IOException{
@@ -101,7 +101,7 @@ public BasicDecimal64Vector(DATA_FORM df, ExtendedDataInput in, int extra) throw
101101
}
102102

103103
this.size = unscaledValues.length;
104-
capaticy = unscaledValues.length;
104+
capacity = unscaledValues.length;
105105
}
106106

107107
@Deprecated
@@ -121,7 +121,7 @@ public BasicDecimal64Vector(double[] data, int scale){
121121
}
122122
unscaledValues = newIntValue;
123123
this.size = unscaledValues.length;
124-
capaticy = unscaledValues.length;
124+
capacity = unscaledValues.length;
125125
}
126126

127127
@Override
@@ -141,7 +141,7 @@ public void deserialize(int start, int count, ExtendedDataInput in) throws IOExc
141141
}
142142

143143
this.size = unscaledValues.length;
144-
capaticy = unscaledValues.length;
144+
capacity = unscaledValues.length;
145145
}
146146

147147
@Override
@@ -254,13 +254,13 @@ public int getUnitLength() {
254254
}
255255

256256
public void add(String value) {
257-
if (size + 1 > capaticy && unscaledValues.length > 0) {
257+
if (size + 1 > capacity && unscaledValues.length > 0) {
258258
unscaledValues = Arrays.copyOf(unscaledValues, unscaledValues.length * 2);
259259
} else if (unscaledValues.length <= 0) {
260260
unscaledValues = new long[1];
261261
}
262262

263-
capaticy = unscaledValues.length;
263+
capacity = unscaledValues.length;
264264
if (value.equals("0.0"))
265265
unscaledValues[size] = 0;
266266
else if(value.equals(""))
@@ -276,12 +276,12 @@ else if(value.equals(""))
276276

277277
@Deprecated
278278
public void add(double value) {
279-
if (size + 1 > capaticy && unscaledValues.length > 0){
279+
if (size + 1 > capacity && unscaledValues.length > 0){
280280
unscaledValues = Arrays.copyOf(unscaledValues, unscaledValues.length * 2);
281281
}else if (unscaledValues.length <= 0){
282282
unscaledValues = Arrays.copyOf(unscaledValues, unscaledValues.length + 1);
283283
}
284-
capaticy = unscaledValues.length;
284+
capacity = unscaledValues.length;
285285
if (value == 0.0)
286286
unscaledValues[size] = 0;
287287
else {
@@ -297,10 +297,10 @@ public void add(double value) {
297297

298298

299299
void addRange(long[] valueList) {
300-
unscaledValues = Arrays.copyOf(unscaledValues, valueList.length + unscaledValues.length);
300+
int requiredCapacity = size + valueList.length;
301+
checkCapacity(requiredCapacity);
301302
System.arraycopy(valueList, 0, unscaledValues, size, valueList.length);
302303
size += valueList.length;
303-
capaticy = unscaledValues.length;
304304
}
305305

306306
public void addRange(String[] valueList) {
@@ -314,7 +314,7 @@ public void addRange(String[] valueList) {
314314
unscaledValues = Arrays.copyOf(unscaledValues, newLongValue.length + unscaledValues.length);
315315
System.arraycopy(newLongValue, 0, unscaledValues, size, newLongValue.length);
316316
size += newLongValue.length;
317-
capaticy = unscaledValues.length;
317+
capacity = unscaledValues.length;
318318
}
319319

320320
@Deprecated
@@ -331,7 +331,7 @@ public void addRange(double[] valueList) {
331331
unscaledValues = Arrays.copyOf(unscaledValues, newLongValue.length + unscaledValues.length);
332332
System.arraycopy(newLongValue, 0, unscaledValues, size, newLongValue.length);
333333
size += newLongValue.length;
334-
capaticy = unscaledValues.length;
334+
capacity = unscaledValues.length;
335335
}
336336

337337
@Override
@@ -341,18 +341,24 @@ public void Append(Scalar value) throws Exception{
341341

342342
@Override
343343
public void Append(Vector value) throws Exception{
344-
if(((BasicDecimal64Vector)value).getScale() == scale_)
345-
addRange(((BasicDecimal64Vector)value).getdataArray());
346-
else{
347-
for(int i = 0; i < value.rows(); ++i){
344+
if (((BasicDecimal64Vector)value).getScale() == scale_)
345+
addRange(((BasicDecimal64Vector) value).getdataArray());
346+
else {
347+
for(int i = 0; i < value.rows(); ++i)
348348
Append((Scalar)value.get(i));
349-
}
350349
}
351350
}
352351

353352
@Override
354353
public void checkCapacity(int requiredCapacity) {
355-
throw new RuntimeException("BasicDecimal64Vector not support checkCapacity.");
354+
if (requiredCapacity > unscaledValues.length) {
355+
int newCapacity = Math.max(
356+
(int)(unscaledValues.length * GROWTH_FACTOR),
357+
requiredCapacity
358+
);
359+
unscaledValues = Arrays.copyOf(unscaledValues, newCapacity);
360+
capacity = newCapacity;
361+
}
356362
}
357363

358364
@JsonIgnore

0 commit comments

Comments
 (0)