# roaring

Published articles for roaring.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Evaluating Equality Predicates with RangeBitmap

DevFeed: [Evaluating Equality Predicates with RangeBitmap](<https://devfeed.tech/articles/evaluating-equality-predicates-25641.md>)

Original publisher: [Read original article](<https://richardstartin.github.io/posts/range-bitmap-equality-queries>)

Author: Richard Startin's Blog

Published: 2022-12-18T00:00:00Z

Content type: article

Language: en

Sources: [Richard Startin's Blog](<https://devfeed.tech/sources/richard-startin-s-blog.md>)

Topics: [Data structures](<https://devfeed.tech/topics/data-structures.md>), [Library](<https://devfeed.tech/topics/library.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [data observability](<https://devfeed.tech/topics/data-observability.md>)

Tags: [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [cardinality](<https://devfeed.tech/tags/cardinality.md>), [comparison](<https://devfeed.tech/tags/comparison.md>), [data-engineering](<https://devfeed.tech/tags/data-engineering.md>), [data-structure](<https://devfeed.tech/tags/data-structure.md>), [java](<https://devfeed.tech/tags/java.md>), [library](<https://devfeed.tech/tags/library.md>), [memory](<https://devfeed.tech/tags/memory.md>), [pinot](<https://devfeed.tech/tags/pinot.md>), [range](<https://devfeed.tech/tags/range.md>), [roaring](<https://devfeed.tech/tags/roaring.md>), [speed](<https://devfeed.tech/tags/speed.md>)

### AI overview

This article evaluates equality and inequality queries using RangeBitmap in the RoaringBitmap library. It explains how the enhancement can support equality filtering as a compact inverted-index alternative, including as a fallback for Apache Pinot range indexes, and reports faster selection than a stream-based scan in the described example while using less space than some inverted indexes.

### Source excerpt

I have just implemented support for (in)equality queries against a RangeBitmap, a succinct data structure in the RoaringBitmap library which supports range queries. RangeBitmap was designed to support range queries in Apache Pinot (more details here) but this enhancement would allow a range index to be used as a fallback for (in)equality queries in case nothing better is available. Supporting (in)equality queries allows a RangeBitmap to be used as a kind of compact inverted index, trading space for time, capable of supporting high cardinality gracefully. Since RangeBitmap supports memory mapping from files, I think that it could be used for data engineering beyond Apache Pinot.

## Counting over Range Predicates

DevFeed: [Counting over Range Predicates](<https://devfeed.tech/articles/counting-over-range-predicates-25643.md>)

Original publisher: [Read original article](<https://richardstartin.github.io/posts/range-counts>)

Author: Richard Startin's Blog

Published: 2022-03-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Richard Startin's Blog](<https://devfeed.tech/sources/richard-startin-s-blog.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Streams](<https://devfeed.tech/topics/streams.md>), [Sorting](<https://devfeed.tech/topics/sorting.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [effective](<https://devfeed.tech/tags/effective.md>), [filter](<https://devfeed.tech/tags/filter.md>), [inlining](<https://devfeed.tech/tags/inlining.md>), [java](<https://devfeed.tech/tags/java.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [performance](<https://devfeed.tech/tags/performance.md>), [roaring](<https://devfeed.tech/tags/roaring.md>), [sorting](<https://devfeed.tech/tags/sorting.md>), [streams](<https://devfeed.tech/tags/streams.md>)

### AI overview

This post examines counting objects that satisfy range and other filters when no database is available. It compares Java's Stream API with specialized Java code and finds that exploiting data already sorted by time can make filtering and counting more efficient.

### Source excerpt

This post follows on from my last post about selecting objects satisfying a range predicate, and instead looks at how to count the objects. If you can select objects, you can count them too, but it's a simpler problem so resources can be saved with a specialised solution.

## Evaluating Range Predicates

DevFeed: [Evaluating Range Predicates](<https://devfeed.tech/articles/evaluating-range-predicates-25644.md>)

Original publisher: [Read original article](<https://richardstartin.github.io/posts/range-predicates>)

Author: Richard Startin's Blog

Published: 2022-03-12T00:00:00Z

Content type: article

Language: en

Sources: [Richard Startin's Blog](<https://devfeed.tech/sources/richard-startin-s-blog.md>)

Topics: [Data analysis](<https://devfeed.tech/topics/data-analysis.md>), [Java](<https://devfeed.tech/topics/java.md>), [Sorting](<https://devfeed.tech/topics/sorting.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [data-structure](<https://devfeed.tech/tags/data-structure.md>), [java](<https://devfeed.tech/tags/java.md>), [roaring](<https://devfeed.tech/tags/roaring.md>), [sorting](<https://devfeed.tech/tags/sorting.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

This article examines filtering transaction data by range predicates in Java. It compares stream-based linear filtering with reordered conditions and binary search on time-sorted data, discussing branch misses and the potential benefits of indexed data structures such as RoaringBitmap.

### Source excerpt

Suppose you are doing some kind of data analysis in Java, perhaps you are analysing transactions (as in sales made). You have complex filters to evaluate before performing a calculation on Transaction objects.

## RangeBitmap - How range indexes work in Apache Pinot

DevFeed: [RangeBitmap - How range indexes work in Apache Pinot](<https://devfeed.tech/articles/rangebitmap-how-range-indexes-work-in-apache-pinot-25642.md>)

Original publisher: [Read original article](<https://richardstartin.github.io/posts/range-bitmap-index>)

Author: Richard Startin's Blog

Published: 2022-03-07T00:00:00Z

Content type: tutorial

Language: en

Sources: [Richard Startin's Blog](<https://devfeed.tech/sources/richard-startin-s-blog.md>)

Topics: [Databases](<https://devfeed.tech/topics/databases.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [servers](<https://devfeed.tech/topics/servers.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [databases](<https://devfeed.tech/tags/databases.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [java](<https://devfeed.tech/tags/java.md>), [pinot](<https://devfeed.tech/tags/pinot.md>), [range](<https://devfeed.tech/tags/range.md>), [roaring](<https://devfeed.tech/tags/roaring.md>), [routing](<https://devfeed.tech/tags/routing.md>), [server](<https://devfeed.tech/tags/server.md>), [servers](<https://devfeed.tech/tags/servers.md>)

### AI overview

This article explains the requirements and query-performance constraints for range indexes on unsorted numeric data in a column store such as Apache Pinot. It discusses segment-level data structures and how servers and brokers participate in pruning, routing, and result merging.

### Source excerpt

Suppose you have an unsorted array of numeric values and need to find the set of indexes of all the values which are within a range. The range predicate will be evaluated many times, so any time spent preprocessing will be amortised, and non-zero spatial overhead is expected. If the data were sorted, this would be very easy, but the indexes of the values have meaning so the data cannot be sorted. To complicate the problem slightly, the set of indexes must be produced in sorted order.