Commit graph

620 commits

Author SHA1 Message Date
Ben Johnson
3fdf63f84f
optimize sparse bitmap block checksums
This commit refactors the block checksumming by removing the
iteration over each block and instead only checking blocks which
have data. This requires merging the cache inspection with the
roaring iterator to reduce CPU time and memory allocations.
2016-07-07 10:03:38 -06:00
tgruben
148c9105fb Merge pull request #95 from benbjohnson/sync-closing
Check for early close during AAE
2016-06-29 11:25:56 -05:00
Ben Johnson
583aef6bbb
check for early close during AAE
This commit adds a `Closing` channel to the `IndexSyncer` and the
`FragmentSyncer` that is periodically checked during execution.
If the channel is closed then an in-progress sync is immediately
stopped.
2016-06-29 10:18:24 -06:00
Todd Gruben
e738804941 Merge branch 'master' of github.com:umbel/pilosa 2016-06-29 10:28:19 -05:00
tgruben
7ed40b4b4a Merge pull request #94 from benbjohnson/optimize-union-difference
Optimize union() & difference()
2016-06-28 15:34:38 -05:00
Ben Johnson
e4c7c9d1e8
optimize union() & difference()
This commit moves the `Union()` and `Difference()` operations into
the `roaring` package to improve performance.
2016-06-28 14:29:37 -06:00
Todd Gruben
23e9d7e159 Merge branch 'master' of github.com:umbel/pilosa 2016-06-23 09:05:21 -05:00
tgruben
da419863fc Merge pull request #93 from benbjohnson/set-bulk-attrs
Optimize bulk bitmap attribute update
2016-06-22 21:19:23 -05:00
Ben Johnson
b666f19fc7
optimize bulk bitmap attribute update
This commit adds a fast path for optimizing queries that only
have `SetBitmapAttrs()` calls in them. It does this by grouping
the calls into a single Bolt transaction and also by merging
multiple attribute updates per ID into one update.
2016-06-22 20:04:49 -06:00
Todd Gruben
e64ac426e9 Merge branch 'master' of github.com:umbel/pilosa 2016-06-21 08:45:10 -05:00
tgruben
c462b45a3a Merge pull request #91 from benbjohnson/bit-split
roaring: change bit split to 40/24
2016-06-21 08:30:36 -05:00
Ben Johnson
059f34788e
roaring: change bit split to 40/24
This commit changes the `roaring.Bitmap` to use a 40/24 split in
the high and low bits. This change also requires the low bits
to use `uint32` instead of `uint16`.
2016-06-20 20:37:05 -06:00
Todd Gruben
021032dc2d Merge branch 'master' of github.com:umbel/pilosa 2016-06-15 08:56:47 -05:00
tgruben
42400cd92b Merge pull request #90 from benbjohnson/optimize-intersection
Optimize intersect()
2016-06-14 16:57:52 -05:00
Ben Johnson
5a6d81543c
optimize intersect()
This commit moves bitmap intersection into the `roaring` package
in order to reduce allocations.

Benchmarks against real world datasets show a speed improvement of
353%. Previously, intersection operated at approximately 5.6M
bits/sec against two 60K bit bitmaps with 30% overlap. The new
intersection operates at approximately 20M bits/sec.
2016-06-14 15:19:21 -06:00
Todd Gruben
620a109046 Merge branch 'master' of github.com:umbel/pilosa 2016-06-10 10:21:27 -05:00
Todd Gruben
98c7f8d361 tuning slicewidth 2016-06-10 10:21:23 -05:00
Todd Gruben
0010ea14f8 added info to owns fragrment error message 2016-06-10 10:19:54 -05:00
tgruben
aaea7a16f9 Merge pull request #89 from benbjohnson/buffered-import
Add buffered snapshot writer
2016-06-10 10:00:43 -05:00
Ben Johnson
64c29d4b6e
add buffered snapshot writer
This commit wraps the snapshot in a `bufio.Writer`.
2016-06-10 08:58:37 -06:00
tgruben
882d105e99 Merge pull request #88 from benbjohnson/optimize-import
Optimize Import
2016-06-09 16:47:27 -05:00
Ben Johnson
c330c2e4c0
sort bits on import
This commit sorts bits from import files before performing the input.
2016-06-09 14:25:41 -06:00
tgruben
2359f3975e Merge pull request #87 from benbjohnson/fix-client-fragment-nodes
Fix Client.FragmentNodes()
2016-06-08 11:27:31 -05:00
Ben Johnson
2d69f2c989
fix Client.FragmentNodes()
This commit fixes the hardcoded database field in
`Client.FragmentNodes()`.
2016-06-08 10:23:44 -06:00
Todd Gruben
a204ae419a fixed typo 2016-06-07 15:29:28 -05:00
Todd Gruben
2145a568d6 Merge branch 'master' of github.com:umbel/pilosa 2016-06-07 15:25:42 -05:00
Todd Gruben
b140eb1c56 added logging on import;crashing bug on sync on empty fragment 2016-06-07 15:25:37 -05:00
tgruben
bce1e53313 Merge pull request #86 from benbjohnson/fragment-allocation
Use db in fragment allocation
2016-06-07 15:18:48 -05:00
Ben Johnson
2d22ae55ee
use db in fragment allocation
This commit changes the fragment allocation algorithm in the cluster
to make use of the `DB` name. This allows each database to use a
different slice distribution.

Initially, the `frame` was going to be used for allocation, however,
this was problematic since queries can span multiple frames so it's
impossible to choose a single frame to use.
2016-06-07 14:01:13 -06:00
tgruben
810108aa32 Merge pull request #85 from benbjohnson/optimize-intersection-count
Optimize intersection count
2016-06-03 09:39:56 -05:00
Ben Johnson
357ae72f04
optimize intersection count
This commit moves the computation of the intersection count to
the `roaring` package so that no allocations are required. The
implementation operates at the roaring container level and has
specialized functions for array-array, array-bitmap, and
bitmap-bitmap container pairs.
2016-06-02 16:03:21 -06:00
tgruben
14dd6e595d Merge pull request #84 from umbel/slow_import
Slow import optimization
2016-06-01 14:58:35 -05:00
Todd Gruben
13f00b08ae code cleanup 2016-06-01 14:55:48 -05:00
Todd Gruben
a935f601a1 Import optimization 2016-06-01 14:10:34 -05:00
Todd Gruben
89b582f498 patched in assembly routines for reference 2016-05-27 11:15:14 -05:00
Todd Gruben
dea21d674d merge 2016-05-25 09:18:57 -05:00
Todd Gruben
954d8b5346 no alloc on search 2016-05-25 09:12:56 -05:00
tgruben
4103b5e7d2 Merge pull request #82 from benbjohnson/bitmap-refactor
Refactor in-memory bitmap storage
2016-05-24 16:31:55 -05:00
Ben Johnson
1a20e83a5b
refactor in-memory bitmap storage
This commit changes the underlying storage for `Bitmap` from a
red-black tree to a roaring bitmap. It also removes bitmaps from
the cache and only stores the bitmap count.
2016-05-24 15:01:49 -06:00
tgruben
4e99f4dc56 Merge pull request #81 from benbjohnson/pilosa-bench
pilosa-bench skeleton
2016-05-17 17:19:29 -05:00
Ben Johnson
afb3d1f46b
pilosa-bench skeleton 2016-05-17 15:45:24 -06:00
Todd Gruben
91b052f1c4 Merge branch 'master' of github.com:umbel/pilosa 2016-05-13 19:59:24 -05:00
Todd Gruben
d0abcfc910 changed slicewidth 2016-05-13 19:59:14 -05:00
tgruben
223e95b103 Merge pull request #79 from benbjohnson/server
Refactor main into pilosa.Server
2016-05-13 16:56:24 -05:00
Ben Johnson
523cf5bc0e
refactor main into pilosa.Server
This commit refactors most of the code in `cmd/pilosa` to
`pilosa.Server` so that it can be reused in long running cluster
testing.
2016-05-13 14:39:09 -06:00
tgruben
d76aa17e9c Merge pull request #78 from benbjohnson/import-cache
Fix import cache updates
2016-05-13 10:17:34 -05:00
Ben Johnson
a206d55834
fix import cache updates
This commit fixes a bug in the import where the cache was not being
updated and the block checksum was not being invalidated.
2016-05-11 17:32:28 -06:00
tgruben
736b4f8b17 Merge pull request #77 from benbjohnson/consensus-block-merge
Consensus block merge
2016-05-09 14:01:29 -05:00
Ben Johnson
ebdd5f8477
consensus block merge
This commit refactors the anti-entropy system to fetch data from
all replicated blocks and only set/clear bits which deviate from
the consensus between all blocks.

An example of this is if 3 nodes had the following bits set for
a single bitmap:

	Node A: 1 2 3
	Node B:   2   4
	Node C: 1 2   4

Then only bits which are set on a majority will be set. In this
case bits 1, 2, & 4 are set but 3 only exists on a single node.

The node performing the merge would then determine the following
set/clear diffs for each node:

	Node A: clear(3), set(4)
	Node B: set(1)
	Node C: none

Once the merge is performed and all nodes receive their diff
instructions then the nodes will be in sync:

	Node A: 1 2 4
	Node B: 1 2 4
	Node C: 1 2 4

There still exists situations where bits can be reset. If Node A
is up and Node B & C are down then Node A's bits will be reset
once B & C come back online. We should add write consistency
settings for incoming writes so that we can ensure that a quorum
is written to before returning a success. This is outside the
scope of this commit though.
2016-05-06 16:19:10 -06:00
Todd Gruben
d14c4b971d Merge branch 'master' of github.com:umbel/pilosa 2016-04-26 14:41:48 -05:00