use of org.apache.druid.collections.bitmap.ConciseBitmapFactory in project druid by druid-io.
the class LinearGutmanSplitStrategyTest method testPickSeeds.
@Test
public void testPickSeeds() {
BitmapFactory bf = new ConciseBitmapFactory();
LinearGutmanSplitStrategy strategy = new LinearGutmanSplitStrategy(0, 50, bf);
Node node = new Node(new float[2], new float[2], true, bf);
node.addChild(new Point(new float[] { 3, 7 }, 1, bf));
node.addChild(new Point(new float[] { 1, 6 }, 1, bf));
node.addChild(new Point(new float[] { 9, 8 }, 1, bf));
node.addChild(new Point(new float[] { 2, 5 }, 1, bf));
node.addChild(new Point(new float[] { 4, 4 }, 1, bf));
node.enclose();
Node[] groups = strategy.split(node);
Assert.assertEquals(groups[0].getMinCoordinates()[0], 1.0f);
Assert.assertEquals(groups[0].getMinCoordinates()[1], 4.0f);
Assert.assertEquals(groups[1].getMinCoordinates()[0], 9.0f);
Assert.assertEquals(groups[1].getMinCoordinates()[1], 8.0f);
}
use of org.apache.druid.collections.bitmap.ConciseBitmapFactory in project druid by druid-io.
the class LinearGutmanSplitStrategyTest method testNumChildrenSize.
@Test
public void testNumChildrenSize() {
BitmapFactory bf = new ConciseBitmapFactory();
RTree tree = new RTree(2, new LinearGutmanSplitStrategy(0, 50, bf), bf);
Random rand = ThreadLocalRandom.current();
for (int i = 0; i < 100; i++) {
tree.insert(new float[] { rand.nextFloat(), rand.nextFloat() }, i);
}
Assert.assertTrue(getNumPoints(tree.getRoot()) >= tree.getSize());
}
use of org.apache.druid.collections.bitmap.ConciseBitmapFactory in project druid by druid-io.
the class BitmapBenchmarkWithVaryingOrder method setup.
@Setup(Level.Trial)
public void setup() throws IOException {
switch(type) {
case "concise":
bitmapFactory = new ConciseBitmapFactory();
break;
case "roaring":
bitmapFactory = new RoaringBitmapFactory();
break;
default:
throw new IAE("Unknown bitmap type[%s]", type);
}
bitmaps = new ArrayList<>(numBitmaps);
// Bitmaps usually have a short circuit to early return an empty bitmap if it finds no intersection
// during an AND operation. We want to let them iterate all bitmaps instead, so add some bits that
// will be set for all bitmaps we create.
final int[] knownTrue = new int[minIntersect];
for (int i = 0; i < knownTrue.length; ++i) {
knownTrue[i] = RANDOM.nextInt(bitmapLength);
}
for (int i = 0; i < numBitmaps; ++i) {
// the later the bitmap is created, the higher its density is.
final int bitCount = (int) (i * 0.1);
IntSet ints = new IntOpenHashSet(bitCount);
for (int j = 0; j < bitCount; j++) {
int offset;
do {
offset = RANDOM.nextInt(bitmapLength);
} while (ints.contains(offset));
ints.add(offset);
}
final MutableBitmap mutableBitmap = bitmapFactory.makeEmptyMutableBitmap();
ints.iterator().forEachRemaining((IntConsumer) mutableBitmap::add);
for (int k : knownTrue) {
mutableBitmap.add(k);
}
bitmaps.add(BitmapBenchmarkUtils.toOffheap(bitmapFactory.makeImmutableBitmap(mutableBitmap)));
}
reverseBitmaps = Lists.reverse(bitmaps);
}
use of org.apache.druid.collections.bitmap.ConciseBitmapFactory in project druid by druid-io.
the class UniformBitmapBenchmark method setup.
@Setup(Level.Trial)
public void setup() throws IOException {
final int[] knownTrue = new int[minIntersect];
for (int i = 0; i < knownTrue.length; ++i) {
knownTrue[i] = RANDOM.nextInt(bitmapLength);
}
switch(type) {
case "concise":
bitmapFactory = new ConciseBitmapFactory();
break;
case "roaring":
bitmapFactory = new RoaringBitmapFactory();
break;
default:
throw new IAE("Unknown bitmap type[%s]", type);
}
bitmaps = new ArrayList<>(numBitmaps);
for (int i = 0; i < numBitmaps; ++i) {
final MutableBitmap mutableBitmap = bitmapFactory.makeEmptyMutableBitmap();
for (int k = 0; k < bitmapLength; ++k) {
if (RANDOM.nextDouble() < density) {
mutableBitmap.add(k);
}
}
for (int k : knownTrue) {
mutableBitmap.add(k);
}
bitmaps.add(BitmapBenchmarkUtils.toOffheap(bitmapFactory.makeImmutableBitmap(mutableBitmap)));
}
final long totalSizeBytes = bitmaps.stream().mapToLong(bitmap -> bitmap.toBytes().length).sum();
BitmapBenchmarkUtils.printSizeStats(type, density, bitmaps.size(), totalSizeBytes);
}
use of org.apache.druid.collections.bitmap.ConciseBitmapFactory in project druid by druid-io.
the class RangeBitmapBenchmark method setup.
@Setup(Level.Trial)
public void setup() throws IOException {
switch(type) {
case "concise":
bitmapFactory = new ConciseBitmapFactory();
break;
case "roaring":
bitmapFactory = new RoaringBitmapFactory();
break;
default:
throw new IAE("Unknown bitmap type[%s]", type);
}
bitmaps = new ArrayList<>(numBitmaps);
for (int i = 0; i < numBitmaps; ++i) {
final MutableBitmap mutableBitmap = bitmapFactory.makeEmptyMutableBitmap();
int k = 0;
boolean fill = true;
while (k < bitmapLength) {
int runLength = (int) (bitmapLength * density) + RANDOM.nextInt((int) (bitmapLength * density));
for (int j = k; fill && j < bitmapLength && j < k + runLength; ++j) {
mutableBitmap.add(j);
}
k += runLength;
fill = !fill;
}
for (k = bitmapLength / 2; k < bitmapLength / 2 + minIntersect; ++k) {
mutableBitmap.add(k);
}
bitmaps.add(BitmapBenchmarkUtils.toOffheap(bitmapFactory.makeImmutableBitmap(mutableBitmap)));
}
final long totalSizeBytes = bitmaps.stream().mapToLong(bitmap -> bitmap.toBytes().length).sum();
BitmapBenchmarkUtils.printSizeStats(type, density, bitmaps.size(), totalSizeBytes);
}
Aggregations