すべてのプロダクト
Search
ドキュメントセンター

PolarDB:YYYYDD

最終更新日:May 28, 2024

このトピックでは、YYYYDD関数の使用方法について説明します。

制限事項

  • シャードキーは、DATE、DATETIME、またはTIMESTAMPタイプである必要があります。
  • YYYYDD関数を使用する前に、特定のサイクル (2年など) に基づいて必要な物理テーブルシャードの総数を決定します。 YYYYDD関数を使用すると、サイクル内の各日に1つのテーブルシャードのみを作成できます。
  • 次のサイクルで日付が繰り返されると、その日付で生成されたデータは、最後のサイクルの同じ日付で生成されたデータを格納する同じテーブルシャードにルーティングされます。 たとえば、2012年3月1日から始まる2年間のサイクルを指定した場合、3月1日に生成されたデータ、2014次のサイクルで生成されたデータは、2012年3月1日に生成されたデータを格納する同じテーブルシャードにルーティングされる可能性があります。 データのルーティング先のテーブルシャードは、テーブルシャードの数によって異なります。
  • PolarDB-X 1.0インスタンスのバージョンは5.1.28-1320920以降である必要があります。

ルーティング方法

YYYYDD関数を使用して、データベースシャードキーの時間値の年と日に基づいてハッシュ値を計算できます。 次に、ハッシュ値をデータベースシャードの数で割り、剰余を取得します。 その結果、データは剰余に基づいて分割される。

たとえば、YYYYDD関数のパラメーターをYYYYDD('2012-12-31 12:12:12 ') 形式で指定した場合、剰余は次の式に基づいて計算されます。(2012x366 + 366)% D。 計算結果は、2012年12月31日が2012年の366日目であることを示す。

シナリオ

YYYYDD関数は、データを年と日ごとにデータベースシャードに分割する必要があるシナリオに適しています。 この関数は、tbpartition by YYYYDD(ShardKey) で使用することを推奨します。

例:

この例では、PolarDB-X 1.0インスタンスに2つのノードがあります。 デフォルトでは、各ノードに8つのデータベースシャードがあります。 データは、次の要件に基づいて分割する必要があります。

  • データは、年と日ごとにデータベースシャードに分割されます。
  • 同じ日に生成されたデータは、同じテーブルシャードに分割されます。 2年以内の毎日は、独立したテーブルシャードに対応します。
  • シャードキーがクエリで指定されている場合、クエリはデータベースシャードの特定の物理テーブルシャードに直接配布されます。

YYYYDD関数は、前述の要件を満たすことができます。 2年以内の毎日がテーブルシャードに対応する必要があります。 したがって、1年は最大366日であるため、合計732 (366x2) の物理テーブルシャードを作成する必要があります。 PolarDB-X 1.0インスタンスには16個のデータベースシャードがあります。 各データベースシャードの物理テーブルシャードの数は、次の2つのステップで計算されます。 作成する必要がある物理テーブルシャードの総数をデータベースシャードの数で割ります。 2. 結果を次に近い整数まで丸めます。 この場合、物理テーブルシャードの数は46で、これは45.75 (732/16) に最も近い整数です。 テーブルシャードの数は、データベースシャードの数の整数倍にすることをお勧めします。

次のデータ定義言語 (DDL) ステートメントを使用して、テーブルを作成できます。

テーブルtest_yyyydd_tbを作成する (    
    id int, 
    名前varchar(30) DEFAULT NULL、  
    create_time datetime DEFAULT NULL、
    主キー (id)
) エンジン=InnoDBデフォルト料金=utf8
YYYYDD(create_time) によるdbpartition
tbpartition by YYDD(create_time) tbpartitions 46;