TableStore:大量の構造化データ階層型ストレージスキーム
前言
表ストレージはアリクラウドの自己研究分布式ストレージシステムであり、大量の構造化、半構造化のデータを格納するために使用することができる.表ストレージは、高性能と容量の2つのインスタンスタイプをサポートします.高性能はSSDの記憶媒体を使用し、読み書きが多いシーンに対してアクセス遅延が良好である.容量型はSSDとSATAが混在した記憶媒体を使用している.書き込みが多いシーンに対しては、性能が高性能に近いため、読み取り面では、冷たいデータに遭遇して読み取りSATAディスクを生成すると、遅延は高性能より1レベル上昇します.シーケンシャルシーンなど、大量のデータストレージシーンでは、最新のデータが高性能クエリーをサポートし、より早いデータの読み書き頻度が大幅に低下することを望んでいます.このとき、テーブルストレージの高性能と容量型ストレージ階層化のニーズが発生します.
シナリオの詳細
表には、最近正式に公開されたフルインクリメンタル一体チャネルサービスが格納されています.(参考文献)チャネルサービスは、表記憶データインタフェース上のフルインクリメンタル一体化サービスに基づいている.チャネルサービスは、ユーザーに対して、インクリメンタル、フル、インクリメンタルプラスの3種類の分散型データリアルタイム消費チャネルを提供する.チャネルサービスがあれば、高性能インスタンス下の表から容量型表までのリアルタイムデータ同期を容易に構築することができ、さらに表に格納されているプロパティ・データのライフサイクル(ドキュメント参照)を使用して、ビジネス要件に応じて適切なTTLを設定します.全体的に、次の図のようなアーキテクチャを構築できます.
データ全体の流れは次のとおりです.トラフィック書き込み側は、高性能インスタンス に直接書き込む.高性能インスタンスのデータは、チャネルサービスを介して容量型 に同期する.高性能インスタンスの古いデータは自動的に期限切れになり、ストレージの消費量を減らす .ユーザクエリー要求は、タイミングクエリー条件に基づいて、最近のデータであるか否かを判断する 最近のデータ・クエリーは高性能に入り、ミリ秒レベルは を返します.より早いデータクエリは容量型に入り、数十ミリ秒後に に戻る.
コードと操作プロセス:
高性能インスタンス上でビジネス・プライマリ・キーの要件に基づいてデータ・テーブルを作成し、適切なデータTTLを設定し、容量型で同じschemaのテーブルを作成して、すべてのデータを永続的に格納します.
次に、チャネルページにフルインクリメンタルタイプのチャネルを作成します.
コンソールを使用すると、同期の状態、同時実行、進捗などの情報を簡単に確認できます.
同じschemaテーブルTableStoreテーブルをTunnelでコピーするSampleコードを貼り付けます.
まとめ
チャネルサービスにより、テーブルストレージに格納された構造化され、半構造化データはリアルタイムで流出し、加工、抽出、計算、または同期することができる.コールドデータのストレージコストをさらに削減したい場合は、この記事を参照して、テーブルに格納されているデータをOSSアーカイブストレージにバックアップします.
著者:ホーニング
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.
表ストレージはアリクラウドの自己研究分布式ストレージシステムであり、大量の構造化、半構造化のデータを格納するために使用することができる.表ストレージは、高性能と容量の2つのインスタンスタイプをサポートします.高性能はSSDの記憶媒体を使用し、読み書きが多いシーンに対してアクセス遅延が良好である.容量型はSSDとSATAが混在した記憶媒体を使用している.書き込みが多いシーンに対しては、性能が高性能に近いため、読み取り面では、冷たいデータに遭遇して読み取りSATAディスクを生成すると、遅延は高性能より1レベル上昇します.シーケンシャルシーンなど、大量のデータストレージシーンでは、最新のデータが高性能クエリーをサポートし、より早いデータの読み書き頻度が大幅に低下することを望んでいます.このとき、テーブルストレージの高性能と容量型ストレージ階層化のニーズが発生します.
シナリオの詳細
表には、最近正式に公開されたフルインクリメンタル一体チャネルサービスが格納されています.(参考文献)チャネルサービスは、表記憶データインタフェース上のフルインクリメンタル一体化サービスに基づいている.チャネルサービスは、ユーザーに対して、インクリメンタル、フル、インクリメンタルプラスの3種類の分散型データリアルタイム消費チャネルを提供する.チャネルサービスがあれば、高性能インスタンス下の表から容量型表までのリアルタイムデータ同期を容易に構築することができ、さらに表に格納されているプロパティ・データのライフサイクル(ドキュメント参照)を使用して、ビジネス要件に応じて適切なTTLを設定します.全体的に、次の図のようなアーキテクチャを構築できます.
データ全体の流れは次のとおりです.
コードと操作プロセス:
高性能インスタンス上でビジネス・プライマリ・キーの要件に基づいてデータ・テーブルを作成し、適切なデータTTLを設定し、容量型で同じschemaのテーブルを作成して、すべてのデータを永続的に格納します.
次に、チャネルページにフルインクリメンタルタイプのチャネルを作成します.
コンソールを使用すると、同期の状態、同時実行、進捗などの情報を簡単に確認できます.
同じschemaテーブルTableStoreテーブルをTunnelでコピーするSampleコードを貼り付けます.
func main () {
//
tunnelClient := tunnel.NewTunnelClient("", "", "", "")
//
client := tablestore.NewClient("", "", "", "")
// callback SimpleProcessFactory, TunnelWorkerConfig
workConfig := &tunnel.TunnelWorkerConfig{
ProcessorFactory: &tunnel.SimpleProcessFactory{
ProcessFunc: replicateDataFunc,
CustomValue: client,
},
}
// TunnelDaemon tunnel
daemon := tunnel.NewTunnelDaemon(tunnelClient, "", workConfig)
err := daemon.Run()
if err != nil {
fmt.Println("failed to start tunnel daemon with error:", err)
}
}
func replicateDataFunc(ctx *tunnel.ChannelContext, records []*tunnel.Record) error {
client := ctx.CustomValue.(*tablestore.TableStoreClient)
fmt.Println(client)
for _, rec := range records {
fmt.Println("tunnel record detail:", rec.String())
updateRowRequest := new(tablestore.UpdateRowRequest)
updateRowRequest.UpdateRowChange = new(tablestore.UpdateRowChange)
updateRowRequest.UpdateRowChange.TableName = "coldtable"
updateRowRequest.UpdateRowChange.PrimaryKey = new(tablestore.PrimaryKey)
updateRowRequest.UpdateRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
for _, pk := range rec.PrimaryKey.PrimaryKeys {
updateRowRequest.UpdateRowChange.PrimaryKey.AddPrimaryKeyColumn(pk.ColumnName, pk.Value)
}
for _, col := range rec.Columns {
if col.Type == tunnel.RCT_Put {
updateRowRequest.UpdateRowChange.PutColumn(*col.Name, col.Value)
} else if col.Type == tunnel.RCT_DeleteOneVersion {
updateRowRequest.UpdateRowChange.DeleteColumnWithTimestamp(*col.Name, *col.Timestamp)
} else {
updateRowRequest.UpdateRowChange.DeleteColumn(*col.Name)
}
}
_, err := client.UpdateRow(updateRowRequest)
if err != nil {
fmt.Println("hit error when put record to cold data", err)
}
}
fmt.Println("a round of records consumption finished")
return nil
}
まとめ
チャネルサービスにより、テーブルストレージに格納された構造化され、半構造化データはリアルタイムで流出し、加工、抽出、計算、または同期することができる.コールドデータのストレージコストをさらに削減したい場合は、この記事を参照して、テーブルに格納されているデータをOSSアーカイブストレージにバックアップします.
著者:ホーニング
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.