メトリクステーブル #
メトリクステーブルとは #
メトリクステーブルとは、例えば商品別のアクセス数などをカウントする際に役立つ機能です。 通常のテーブルでアクセス数などをカウントする場合、書き込み処理になるため排他ロックを取得する必要があります。 排他ロックはその名の通り、その他のトランザクションの書き込みや読み込みを全て禁止します。 そのためアクセス数のように、頻繁に更新が発生する処理があると全体の処理性能を大きく悪化してしまいます。
メトリクステーブルは、READ用テーブルとWRITE用テーブルを2つずつ用意し、多少の値の反映遅延を許容することで、ロックフリーな読み込みと書き込みを実現した専用テーブルです。
メトリクステーブルの作成 #
例として、page_view
という名前のメトリクステーブルを作成します。
page_view
はPRIMARY KEY
にid
というフィールドを持ち、メトリクスフィールドとしてnum
というフィールドを持ちます。
CREATE METRICS TABLEの例文 #
CREATE METRICS TABLE page_view
(id INT PRIMARY KEY, num INT)
FLUSH_FREQ = 25
CREATE METRICS TABLE
の構文はCREATE TABLE
の構文と似ていますが、 以下の違いがあります。
PRIMARY KEY
- メトリクステーブルは必ずPrimary Keyを持つ必要があります
- 裏側のシステムでは、Primary Keyで指定したフィールドでGroup byし、それ以外のフィールド(メトリクスフィールド)をSUM集計しています
FLUSH_FREQ
- 更新を読み込みテーブルに反映するまでの更新回数を指定します
- オプションのコマンドで、指定しなければデフォルト値の100回となります
メトリクステーブルへの加算 #
先ほど作成したpage_view
テーブルのid=4
のレコードに、num += 1
の加算をしたいと思います。
ADD METRICSの例文 #
ADD METRICS INTO page_view (id, num) VALUES (4, 1)
このように、ADD METRICS
命令は INSERT
命令とよく似た構文で記述することが可能です。
ADD METRICSの例文2 #
下記のように、マイナスの値を加算することで、減算も可能です。
ADD METRICS INTO page_view (id, num) VALUES (4, -3)
ADD METRICS
命令をFLUSH_FREQ
で指定した回数実行すると、自動的に集計処理が走り、読み込みテーブルへの反映が行われます。
読み込みテーブルも書き込みテーブルも裏側では2つずつ用意してあるので、利用者はこのスイッチ処理の間も遅延なく書き込みと読み込みを行うことができます。
メトリクステーブルの参照 #
メトリクステーブルは通常のテーブルと同じように扱うことが可能で、下記のようなSELECT文で参照可能です。
SELECT id, num FROM page_view
また、検索エンジン機能の方で解説した機械学習ランキングの特徴量としても利用可能です。 メトリクステーブルを機械学習ランキングの特徴量として利用したサンプルコードがありますので、そちらをぜひ参照してみてください。
機械学習ランキング+メトリクステーブルのサンプルコード (後半部分のコード)