We stored about 47mil keys in one Cassandra node and what a memory dump shows for one of the SStableReader:

    SSTableReader: 386MB. Among this 386MB, IndexSummary takes about 231MB but BloomFilter takes 155MB with an embedded huge array long[19.4mil].

It seems that BloomFilter is taking too much memory. If this is the case BloomFilter seems to be redundant comparing to the size of index.

So is this desired behavior? Is there a formula to estimate the size of needed memory for BloomFilter?