Skip to content

Commit b2a4f67

Browse files
committed
VQF: support 100 million keys
1 parent 28c318d commit b2a4f67

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

src/vqf/vqf_cpp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class VQFilter {
4444
uint64_t nslots = (uint64_t) (n / 0.85);
4545
#else
4646
// when inserting in random order
47-
uint64_t nslots = (uint64_t) (n / 0.94);
47+
uint64_t nslots = (uint64_t) (n / 0.93);
4848
#endif
4949

5050
if ((filter = vqf_init(nslots)) == NULL) {

src/vqf/vqf_filter.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,12 @@ bool vqf_is_present(vqf_filter * restrict filter, uint64_t h) {
144144
vqf_metadata * restrict metadata = &filter->metadata;
145145
//vqf_block * restrict blocks = filter->blocks;
146146
uint64_t range = metadata->range;
147-
147+
uint64_t h2 = rotateLeft(h, 32);
148148
__uint128_t x = (__uint128_t)h * (__uint128_t)range;
149149
uint64_t block_index = (uint64_t)(x >> 64);
150-
__uint128_t y = (__uint128_t)rotateLeft(h, 32) * (__uint128_t)range;
150+
__uint128_t y = (__uint128_t)h2 * (__uint128_t)range;
151151
uint64_t alt_block_index = (uint64_t)(y >> 64);
152-
uint64_t tag = h & TAG_MASK;
152+
uint64_t tag = (h ^ h2) & TAG_MASK;
153153

154154
__builtin_prefetch(&filter->blocks[alt_block_index / QUQU_BUCKETS_PER_BLOCK]);
155155

@@ -166,12 +166,12 @@ bool vqf_insert(vqf_filter * restrict filter, uint64_t h) {
166166
vqf_metadata * restrict metadata = &filter->metadata;
167167
vqf_block * restrict blocks = filter->blocks;
168168
uint64_t range = metadata->range;
169-
169+
uint64_t h2 = rotateLeft(h, 32);
170170
__uint128_t x = (__uint128_t)h * (__uint128_t)range;
171171
uint64_t block_index = (uint64_t)(x >> 64);
172-
__uint128_t y = (__uint128_t)rotateLeft(h, 32) * (__uint128_t)range;
172+
__uint128_t y = (__uint128_t)h2 * (__uint128_t)range;
173173
uint64_t alt_block_index = (uint64_t)(y >> 64);
174-
uint64_t tag = h & TAG_MASK;
174+
uint64_t tag = (h ^ h2) & TAG_MASK;
175175

176176
uint64_t *block_md = blocks[block_index/QUQU_BUCKETS_PER_BLOCK].md;
177177
uint64_t block_free = get_block_free_space(block_md);

0 commit comments

Comments
 (0)