byte array has better performance than ByteBuffer
- Ngôn ngữ chính
- Java
- Star
- 3.1k
- Fork
- 1.6k
- Merge trung bình
- 3 ngày 12 giờ
- Pull request đã merge (30 ngày)
- 33
Mô tả
The BytePacker should add the following method
public abstract void unpack8Values(final byte[] input, final int inPos, final int[] output, final int outPos);
to replace method
@Deprecated
public void unpack8Values(final byte[] input, final int inPos, final int[] output, final int outPos) {
unpack8Values(ByteBuffer.wrap(input), inPos, output, outPos);
}
Tested by me byte array has better performance than ByteBuffer,
The test result is:
[Unpack8ValuesByteArray spent time] 80 ms
[Unpack8ValuesByteBuffer spent time] 133 ms
The test code is:
package org.apache.parquet.column.values.bitpacking;
import java.nio.ByteBuffer;
public class ByteBufferTest {
private static final BytePacker bytePacker = Packer.LITTLE_ENDIAN.newBytePacker(7);
private static final int COUNT = 100000;
public static void main(String[] args) {
byte [] in = new byte[1008];
int [] out = new int[1152];
int [] out1 = new int[1152];
int [] out2 = new int[1152];
int res = 0;
for(int i = 0; i < in.length; i++) {
in[i] = (byte) i;
}
for(int i = 0; i < COUNT; i++) {
res += unpack8ValuesBytes(in, out, i % out.length);
}
res = 0;
long t1 = System.currentTimeMillis();
for(int i = 0; i < COUNT; i++) {
res += unpack8ValuesBytes(in, out1, i % out.length);
}
long t2 = System.currentTimeMillis();
System.out.println("[Unpack8ValuesByteArray spent time] " + (t2-t1) + " ms");
ByteBuffer byteBuffer = ByteBuffer.wrap(in);
for(int i = 0; i < COUNT; i++) {
res += unpack8ValuesByteBuffer(byteBuffer, out, i % out.length);
}
res = 0;
long t3 = System.currentTimeMillis();
for(int i = 0; i < COUNT; i++) {
res += unpack8ValuesByteBuffer(byteBuffer, out2, i % out.length);
}
long t4 = System.currentTimeMillis();
System.out.println("[Unpack8ValuesByteBuffer spent time] " + (t4-t3) + " ms");
for (int i=0; i**Note**: *This issue was originally created as [PARQUET-2190](https://issues.apache.org/jira/browse/PARQUET-2190). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu tại BytePacker.unpack8Values và điểm vào Packer.LITTLE_ENDIAN.newBytePacker(7), sau đó kiểm tra các triển khai packer cụ thể cung cấp đường dẫn ByteBuffer hiện tại. Sử dụng ví dụ ByteBufferTest để so sánh các kết quả tương đương và hiệu năng của byte-array và ByteBuffer; công việc được xem là hoàn tất khi API byte-array hoạt động trên tất cả các triển khai mà không thay đổi các giá trị đã unpack.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- data-engineering, performance
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 38/100