1. A method performed by a computing system, the method comprising: shifting data between nodes in a data storage cluster, wherein the shifting is done by; creating a graph, wherein nodes of the graph represent data objects of the data storage cluster, wherein edges of the graph represent joins between data objects represented by both nodes of respective edges, wherein node values of the nodes and weights of the edges are based on statistics related to use of the data objects; assigning a first subset of the data objects to a relational database storage node within the data storage cluster, the first subset of data objects being represented by nodes within a cluster of the graph; assigning a second subset of the data objects to a non-relational database storage node within the data storage cluster, the second subset of data objects being represented by stand-alone nodes within the graph; assigning a cluster value to each cluster in the graph, the cluster value being the sum of all node values within the respective cluster; determining a bucket threshold value, the bucket threshold value being the sum of the cluster values of each cluster within the graph divided by a number of relational database storage nodes within the data storage cluster; and splitting clusters that have a cluster value that is larger than the bucket threshold value, wherein a cluster is split such that a cluster value of a resulting cluster is as close to the bucket threshold value as possible without exceeding the bucket threshold value.