Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from space ML1 and version 5.3
Sv translation
languageen

Xpand uses a hash to determine where a given row of data or a table’s index (representation) should reside in a cluster. The columns selected for hashing are referred to as the “distribution key” for that representation. Every index requires guidance relative to which columns should comprise the distribution key.

By default, the distribution key uses the first column of an index, regardless of how many columns comprise the index. This is true for all indices including the primary key.

The DISTRIBUTE = clause may be used to override the single column default and define which columns of an index are to be hashed instead.

Table of Contents

Using Default Distribution 

In this example, the primary key of post_id was hashed and data for the table was distributed using that value and the default distribution setting of DISTRIBUTE = 1.

sql> CREATE TABLE user_posts (
     post_id int AUTO_INCREMENT, 
     user_id int,  
     posted_on timestamp, 
     data blob, 
     PRIMARY KEY (`post_id`) /*$ DISTRIBUTE=1 */,
     KEY `user_id_posted_on_idx` (`user_id`,`posted_on`) /*$ DISTRIBUTE=1 */
     );

In some cases, data and index distribution based on a single column can result in poor or "lumpy" distribution. To resolve this, we recommend putting the most unique (selective) column into the first column of composite index, or expanding the distribution key from a single column to multiple columns. There are two ways to do this.

1. Expand the distribution key to include more columns of the index

The example below shows the multi-column alternate key user_id_posted_on_idx distributed using both columns in the index instead of just the first.

sql> CREATE TABLE user_posts (
     post_id int AUTO_INCREMENT, 
     user_id int,  
     posted_on timestamp, 
     data blob, 
     PRIMARY KEY (`post_id`) /*$ DISTRIBUTE=1 */,
     KEY `user_id_posted_on_idx` (`user_id`,`posted_on`) /*$ DISTRIBUTE=2 */
     );

2. Expand the distribution key to also include column(s) of the primary key

The example below shows the alternate key user_id_posted_on_idx with DISTRIBUTE = 3. This means that the index will be distributed on both of its columns (user_id, posted_on) as well as the primary key (post_id). If the primary key is a compound key, you could further expand the distribution to include additional columns of the primary key.

sql> CREATE TABLE user_posts (
     post_id int AUTO_INCREMENT, 
     user_id int,  
     posted_on timestamp, 
     data blob, 
     PRIMARY KEY (`post_id`) /*$ DISTRIBUTE=1 */,
     KEY `user_id_posted_on_idx` (`user_id`,`posted_on`) /*$ DISTRIBUTE=3 */
     );

Modifying Distribution

Modifying Distribution - Primary Key

To modify the distribution of a composite primary key after a table has been created, follow this ALTER TABLE syntax:

ALTER TABLE tbl_name  PRIMARY KEY   [DISTRIBUTE = n] 

The distribution count for a primary key cannot exceed the number of columns in the primary key.

Modifying Distribution - Alternate Keys

To modify the distribution of other indexes (non- primary key) after a table has been created, specify the index_name in an ALTER TABLE per this syntax:

ALTER TABLE tbl_name  [ ,INDEX index_name   [DISTRIBUTE = n]]  [ ,INDEX  index_name   [DISTRIBUTE = n ]] 

The maximum distribution value for non-primary keys is the combined number of columns in both the alternate and primary key.


Sv translation
languageko

ClustrixDB는 일관된 해싱(consistent hashing)을 사용하여 주어진 데이터 행 또는 테이블의 인덱스(representation)가 클러스터 내에서 어디에 위치해야 할지를 결정합니다. 해싱을 위해 선택된 열은 해당 representation에 대한 "분산 키"라고 합니다. 모든 인덱스는 어떤 열로 분산 키를 구성할 것인지 지정해야 합니다. 명시적으로 지정하거나 지정하지 않은 경우 기본값이 사용됩니다.

기본적으로 분산 키는 인덱스를 구성하는 열의 수와 관계없이 인덱스의 첫 번째 열을 사용합니다. 이것은 기본 키를 포함한 모든 인덱스에 해당됩니다.

DISTRIBUTE = 절은 단일 열 기본값을 대체하고 해시할 인덱스 열을 정의하는 데 사용될 수 있습니다.

기본 분산 사용하기 

이 예제에서는 post_id 의 기본 키가 해시 되고 해당 값과 DISTRIBUTE = 1의 기본 분산 설정을 사용하여 테이블의 데이터가 분산되었습니다.

CREATE TABLE user_posts (
    post_id int AUTO_INCREMENT, 
    user_id int,  
    posted_on timestamp, 
    data blob, 
    PRIMARY KEY (`post_id`) /*$ DISTRIBUTE=1 */,
    KEY `user_id_posted_on_idx` (`user_id`,`posted_on`) /*$ DISTRIBUTE=1 */
);

경우에 따라 단일 열을 기반으로 하는 데이터 및 인덱스 분산이 고르지 못할 수도 있습니다. 이 문제를 해결하려면 분산 키를 하나의 열에서 여러 열로 확장할 수 있습니다. 이 작업에는 두 가지 방법이 있습니다.

1. 인덱스에 더 많은 열을 포함하기 위해 분산 키를 확장합니다.

아래 예제는 인덱스의 첫 번째 열 대신 두 개 열 모두를 사용하여 분산된 다중 열 대체 키인 user_id_posted_on_idx를 보여줍니다.

CREATE TABLE user_posts (
    post_id int AUTO_INCREMENT, 
    user_id int,  
    posted_on timestamp, 
    data blob, 
    PRIMARY KEY (`post_id`) /*$ DISTRIBUTE=1 */,
    KEY `user_id_posted_on_idx` (`user_id`,`posted_on`) /*$ DISTRIBUTE=2 */
);

2. 기본 키 열도 포함시켜 분산 키를 확장합니다.

아래 예제는 대체 키 user_id_posted_on_idx가 DISTRIBUTE = 3로 설정되었음을 보여줍니다. 즉, 인덱스는 기본 키(post_id)뿐만 아니라 해당 열(user_id, posted_on)  두 개 모두에 분산됩니다. 기본 키가 복합 키인 경우 기본 키의 추가 열을 포함하도록 분산을 확장할 수 있습니다.

CREATE TABLE user_posts (
    post_id int AUTO_INCREMENT, 
    user_id int,  
    posted_on timestamp, 
    data blob, 
    PRIMARY KEY (`post_id`) /*$ DISTRIBUTE=1 */,
    KEY `user_id_posted_on_idx` (`user_id`,`posted_on`) /*$ DISTRIBUTE=3 */
);

분산 수정

Distribution 변경 - 기본 키

테이블이 생성된 후 복합 기본 키의 distribution을 변경하려면 다음 ALTER TABLE 구문을 따르십시오.

ALTER TABLE tbl_name  PRIMARY KEY   [DISTRIBUTE = n] 

기본 키의 분산 개수는 기본 키의 열 수를 초과할 수 없습니다.

분산 수정 - 대체 키

테이블이 생성된 후 다른 인덱스(비 기본 키)의 분산을 수정하려면 아래의 구문에 따라 ALTER TABLE에 index_name을 지정하십시오.

ALTER TABLE tbl_name  [ ,INDEX index_name   [DISTRIBUTE = n]]  [ ,INDEX  index_name   [DISTRIBUTE = n ]] 

비 기본 키의 최대 DISTRIBUTE 값은 대체 키와 기본 키의 열의 개수를 합한 수입니다.