1
1

More than 3 years have passed since last update.

DynamoDB と検索

Posted at

これは思考を整理するためのメモ書きであり、ナレッジではありません。

検索の種類

  • キーによる一本釣り
  • 複合キーによる一本釣り
  • キー以外のフィールドに対する完全一致判定
  • 部分一致判定
  • 大小判定
  • AND演算 による絞り込み
  • OR演算 による結合
  • NOT演算 による反転

DynamoDB で実現可能か

キーによる一本釣り

Hash Key にキーを格納することで可能

複合キーによる一本釣り

Hash Key に複数のフィールドの値を結合した文字列を格納することで可能

キー以外のフィールドに対する完全一致判定

グローバルセカンダリーインデックスを作成すれば可能。
ただし、値が十分に分散する必要がある。(例えば、動画の視聴回数のような、値に偏りがある場合はだめ)

部分一致判定

Range Key に対する Begins with だけが可能。

大小判定

Range Key に対してのみ可能。

AND 演算 による絞り込み

Hash Key と Range Key でのみ可能

OR 演算 による結合

一切できない

NOT 演算 による反転

一切できない

DynamoDB が苦手なクエリ

  • キー以外のフィールドに対する完全一致判定
  • Hash Key に対する部分一致判定
  • Hash Key に対する大小判定
  • Hash Key と Range Key 以外の組み合わせの AND演算
  • OR 演算
  • NOT 演算

自分が欲しいクエリ

  • キー以外のフィールドに対する完全一致判定
  • Hash Key に対する部分一致判定
  • Hash Key に対する大小判定
  • Hash Key と Range Key 以外の組み合わせの AND演算

なぜ難しいか

キー以外のフィールドに対する完全一致判定

値が分散していないとシャードが偏る

どうすればいい?

値が分散しない=値のバリエーションが少ないなので、事前に結果を作ってしまう

Hash Key に対する部分一致判定

データがどのシャードにあるかを特定できなくなる

どうすればいい?

高速な全文検索の仕組みがあればよさそう

Hash Key に対する大小判定

データがどのシャードにあるかを特定できなくなる

どうすればいい?

高速な全文検索の仕組みがあればよさそう

Hash Key と Range Key 以外の組み合わせの AND演算

インデックスを作るのが難しい

どうすればいい?

クエリを工夫(基本完全一致、最後だけあいまいな条件を付けられる)すれば高速な全文検索の仕組みがあればよさそう。

DynamoDB に足りないもの

  • 十分に値が分散しないケースでのインデックス作成
  • 全文検索
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1