Commit graph

3762 commits

Author SHA1 Message Date
Ben Johnson
36cd2c84c1 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
46351c2f10 Merge branch 'master' of github.com:umbel/pilosa 2016-06-23 09:05:21 -05:00
tgruben
0a6147951c Merge pull request #93 from benbjohnson/set-bulk-attrs
Optimize bulk bitmap attribute update
2016-06-22 21:19:23 -05:00
Ben Johnson
1126e7b5f7 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
d76ff0964a Merge branch 'master' of github.com:umbel/pilosa 2016-06-21 08:45:10 -05:00
tgruben
2022e880b7 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
a8feb985e1 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
2c30a1dbf4 Merge branch 'master' of github.com:umbel/pilosa 2016-06-15 08:56:47 -05:00
tgruben
c93d94d4e2 Merge pull request #90 from benbjohnson/optimize-intersection
Optimize intersect()
2016-06-14 16:57:52 -05:00
Ben Johnson
89286ac23a 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
a68975bb6f Merge branch 'master' of github.com:umbel/pilosa 2016-06-10 10:21:27 -05:00
Todd Gruben
7d8705868e tuning slicewidth 2016-06-10 10:21:23 -05:00
Todd Gruben
a2187b968c added info to owns fragrment error message 2016-06-10 10:19:54 -05:00
tgruben
5b40ebc036 Merge pull request #89 from benbjohnson/buffered-import
Add buffered snapshot writer
2016-06-10 10:00:43 -05:00
Ben Johnson
677824c065 add buffered snapshot writer
This commit wraps the snapshot in a `bufio.Writer`.
2016-06-10 08:58:37 -06:00
tgruben
c9f1e26143 Merge pull request #88 from benbjohnson/optimize-import
Optimize Import
2016-06-09 16:47:27 -05:00
Ben Johnson
64decdaf81 sort bits on import
This commit sorts bits from import files before performing the input.
2016-06-09 14:25:41 -06:00
tgruben
32697531fd Merge pull request #87 from benbjohnson/fix-client-fragment-nodes
Fix Client.FragmentNodes()
2016-06-08 11:27:31 -05:00
Ben Johnson
45a62c30bd fix Client.FragmentNodes()
This commit fixes the hardcoded database field in
`Client.FragmentNodes()`.
2016-06-08 10:23:44 -06:00
Todd Gruben
afb40fe8ef fixed typo 2016-06-07 15:29:28 -05:00
Todd Gruben
b40b2ff5ca Merge branch 'master' of github.com:umbel/pilosa 2016-06-07 15:25:42 -05:00
Todd Gruben
dab399e328 added logging on import;crashing bug on sync on empty fragment 2016-06-07 15:25:37 -05:00
tgruben
3f84549651 Merge pull request #86 from benbjohnson/fragment-allocation
Use db in fragment allocation
2016-06-07 15:18:48 -05:00
Ben Johnson
14627a2152 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
849b10c2f5 Merge pull request #85 from benbjohnson/optimize-intersection-count
Optimize intersection count
2016-06-03 09:39:56 -05:00
Ben Johnson
08659c350b 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
64e3458e09 Merge pull request #84 from umbel/slow_import
Slow import optimization
2016-06-01 14:58:35 -05:00
Todd Gruben
228865cc35 code cleanup 2016-06-01 14:55:48 -05:00
Todd Gruben
3d4eaecac0 Import optimization 2016-06-01 14:10:34 -05:00
Todd Gruben
9c5b4829e5 patched in assembly routines for reference 2016-05-27 11:15:14 -05:00
Todd Gruben
ef2cbcdc4b merge 2016-05-25 09:18:57 -05:00
Todd Gruben
38c59dcc5b no alloc on search 2016-05-25 09:12:56 -05:00
tgruben
effb9b8b9c Merge pull request #82 from benbjohnson/bitmap-refactor
Refactor in-memory bitmap storage
2016-05-24 16:31:55 -05:00
Ben Johnson
722d697228 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
93efe624ce Merge pull request #81 from benbjohnson/pilosa-bench
pilosa-bench skeleton
2016-05-17 17:19:29 -05:00
Ben Johnson
91874bdaee pilosa-bench skeleton 2016-05-17 15:45:24 -06:00
Todd Gruben
cc7d0abe10 Merge branch 'master' of github.com:umbel/pilosa 2016-05-13 19:59:24 -05:00
Todd Gruben
a5b84e092a changed slicewidth 2016-05-13 19:59:14 -05:00
tgruben
00f4426970 Merge pull request #79 from benbjohnson/server
Refactor main into pilosa.Server
2016-05-13 16:56:24 -05:00
Ben Johnson
a0a519bfdf 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
4d22338cf1 Merge pull request #78 from benbjohnson/import-cache
Fix import cache updates
2016-05-13 10:17:34 -05:00
Ben Johnson
c9edabb23d 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
06b3e30a10 Merge pull request #77 from benbjohnson/consensus-block-merge
Consensus block merge
2016-05-09 14:01:29 -05:00
Ben Johnson
de698aa03e 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
616248707b Merge branch 'master' of github.com:umbel/pilosa 2016-04-26 14:41:48 -05:00
Todd Gruben
ee95aec91c check for iterator overflow 2016-04-26 14:41:37 -05:00
Travis Turner
db47b4fcde Merge pull request #75 from benbjohnson/godep
Add protobuf/testdata, fix Makefile
2016-04-26 10:09:01 -05:00
Ben Johnson
2756c5295b add protobuf/testdata, fix Makefile
This commit re-adds the `testdata` folder that godeps strips and
also updates the `Makefile` to add a `vendor` target that will
handle this in the future.
2016-04-26 08:48:04 -06:00
Todd Gruben
cd78dd6fd1 Merge branch 'master' of github.com:umbel/pilosa 2016-04-19 09:24:07 -05:00
tgruben
02a0148981 Merge pull request #73 from benbjohnson/anti-entropy-monitor
Anti-entropy monitor
2016-04-19 09:23:56 -05:00