Class BulkOperation

java.lang.Object
org.apache.lucene.util.packed.BulkOperation
All Implemented Interfaces:
PackedInts.Decoder, PackedInts.Encoder
Direct Known Subclasses:
BulkOperationPacked, BulkOperationPackedSingleBlock

abstract class BulkOperation extends Object implements PackedInts.Decoder, PackedInts.Encoder
Efficient sequential read/write of packed integers.
  • Field Details

    • packedBulkOps

      private static final BulkOperation[] packedBulkOps
    • packedSingleBlockBulkOps

      private static final BulkOperation[] packedSingleBlockBulkOps
  • Constructor Details

    • BulkOperation

      BulkOperation()
  • Method Details

    • of

      public static BulkOperation of(PackedInts.Format format, int bitsPerValue)
    • writeLong

      protected int writeLong(long block, byte[] blocks, int blocksOffset)
    • computeIterations

      public final int computeIterations(int valueCount, int ramBudget)
      For every number of bits per value, there is a minimum number of blocks (b) / values (v) you need to write in order to reach the next block boundary:
        - 16 bits per value -> b=2, v=1
        - 24 bits per value -> b=3, v=1
        - 50 bits per value -> b=25, v=4
        - 63 bits per value -> b=63, v=8
        - ...
       
      A bulk read consists in copying iterations*v values that are contained in iterations*b blocks into a long[] (higher values of iterations are likely to yield a better throughput): this requires n * (b + 8v) bytes of memory.

      This method computes iterations as ramBudget / (b + 8v) (since a long is 8 bytes).