Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Cassandra Wiki" for 
change notification.

The "VirtualNodes/Balance" page has been changed by EricEvans:
http://wiki.apache.org/cassandra/VirtualNodes/Balance?action=diff&rev1=4&rev2=5

  <<Anchor(implementation)>>
  == Implementation (Draft) ==
  === Considerations ===
- In the most basic sense, ''balanced'' means that each node has 1/n of the 
token-space, so adjusting ownership for [[#heterogeneous_nodes|heterogeneous 
nodes]] is implicitly about ''unbalancing''.  This is important because, if for 
example, you reduced ownership of a node to say (1/n)*.8, you expect that 
imbalance to persist, and not be balanced-away by operations on other nodes.
+  * In the most basic sense, ''balanced'' means that each node has 1/n of the 
token-space, so adjusting ownership for [[#heterogeneous_nodes|heterogeneous 
nodes]] is implicitly about ''unbalancing''.  This is important because, if for 
example, you reduced ownership of a node to say (1/n)*.8, you expect that 
imbalance to persist, and not be balanced-away by operations on other nodes.
  
- ''Note: This will likely require storing state, in the form of an offset, on 
each node.''
+  * "Shuffling node at a time means that for each node i for i in 0..N-1 
(where N is the cluster size), i/N of the ranges shuffled will, on average, 
have been shuffled at least once already. So it's substantially less efficient 
than shuffling once, then assigning the vnodes out in one cluster-wide pass." 
-- ''Jonathan 
Ellis''<<FootNote([[https://issues.apache.org/jira/browse/CASSANDRA-4443?focusedCommentId=13423505&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13423505|CASSANDRA-4443#comment-13423505]])>>
  
  === Nodes / Cluster ===
  The most straightforward method of effecting ownership is a token move (i.e. 
relocating a range from one node to another).  Exposing this with JMX would 
allow implementing all of the required operations client-side.
  
  === User Interface ===
  
- The `balance` sub-command "balances" the node it is ran against, by default a 
targeted ownership of `1/n`.  The sub-command takes an optional offset in the 
range<<FootNote(Does this range make sense?)>> of `+100` to `-100`, which 
results in a targeted ownership of `(1/n)*(offset/100)`.
+ TODO
  
- ''Note: ranges copied from/to other nodes must be selected in such a way as 
to respect their offsets.''
- 
- {{{
- $ nodetool balance [+/-offset]
- }}}
- 
- The ``shuffle` sub-command randomly exchanges contiguous ranges on the node 
it ran against, with other nodes in the cluster.
- 
- {{{
- $ nodetool shuffle
- }}}
- 
- The `trim` sub-command assigns an offset in the range<<FootNote(Does this 
range make sense?)>> of `+100` to `-100`, and copies randomly selected ranges 
onto, or off of, the node it is ran against to achieve the requested ownership 
(`(1/n)*(offset/100)`).
- 
- {{{
- $ nodetool trim <+/- offset>
- }}}
- 

Reply via email to