# DynamoDB にリアルタイムベクター検索が誕生！専用ベクター DB とはサヨナラ

こんにちは、しぃちゃんだよ！今日は AWS からすごく大きなニュースが飛び込んできたよ。あの Amazon DynamoDB に、なんとリアルタイムのベクター検索機能が正式に搭載されたんだって！しぃちゃん、データベースの裏側の仕組みを考えるのが大好きだから、この発表を読んでてわくわくが止まらなかったの。さっそく紹介していくね！

## なにが発表されたの？

AWS Blog によると、Amazon DynamoDB のベクター検索機能が一般提供（GA）になったよ。運用データと一緒にベクター埋め込みを DynamoDB のテーブルに保存して、別のベクターストアへレプリケーションすることなく、そのまま類似度検索を実行できるようになったんだって。

原文の一文目にはこう書いてあるの。

> Today, we're announcing the general availability of vector search in Amazon DynamoDB.

パフォーマンス面では、1 桁ミリ秒（single-digit millisecond）のレイテンシーで 99% 以上のリコール率を実現していて、しかも「trillions of vectors」という桁違いのスケールにも対応できるように設計されているみたい。専用のベクターデータベース基盤を用意しなくても、DynamoDB だけでセマンティック検索ができちゃうのが今回のポイントなの。

## 今までどうだったの？

今まで、DynamoDB に保存した運用データに対してベクター検索（類似度検索）をしたいときは、別途専用のベクターデータベースを用意して、そこにデータをレプリケーションする必要があったの。

そうすると、同期パイプラインの保守や、データ移動にかかるコスト、追加のライセンス費用なんかが発生しちゃって、地味に負担が大きかったんだよね。運用データとベクターデータが別々の場所にあることで、整合性を保つのも一苦労だったみたい。

## これで何が変わるの？

今回の発表で、ベクターと運用データが同じサーバーレス基盤の上に同居できるようになったよ。しかも料金モデルも既存の DynamoDB と同じ pay-per-request のまま。サーバーのプロビジョニングもパッチ適用も不要で、バージョン管理やメンテナンスウィンドウ、ダウンタイムを伴うメンテナンスからも解放されるの。

これによって、RAG（検索拡張生成）やレコメンドエンジン、パーソナライズ、異常検知、自然言語での商品検索（たとえば「軽量の夏用ランニングシューズ」といった検索）、それにエージェントの記憶のセマンティック検索まで、いろんなユースケースを DynamoDB だけで完結できるようになるんだって。すでに DynamoDB を使っているサービスなら、新しいインフラを増やさずに AI 機能を足せるのがうれしいポイントだよ。

## 深く潜ってみよう

仕組みも面白いから紹介するね。

- **保存方式**: ベクター埋め込みは、DynamoDB が既存で持っている List 型（要素は Number 型）を使って保存されるよ。スキーマ変更は不要で、標準の `PutItem` API でそのまま書き込めるの
- **ベクターインデックス**: 属性の上に新しいベクターインデックスタイプを作成して、ベクター属性名・次元数（最大 4096 次元）・距離関数・フィルター用の非ベクター属性を指定する仕組み
- **距離関数**: ユークリッド距離（ベクターの大きさが意味を持つ場合）、コサイン距離（大きさではなく角度を測る場合）、ドット積（方向と大きさの両方が重要な場合）の 3 種類から選べるよ
- **検索 API**: `SearchVectors` API がクエリベクターと返却件数（最大 100 件）、任意のフィルター条件を受け取って検索してくれるの。ただしフィルター条件は完全一致のみ対応で、`BETWEEN` や `BEGINS_WITH` のような範囲条件は使えないから注意してね
- **埋め込みの生成**: Amazon Bedrock の Titan や Cohere Embed、OpenAI など好きなモデルで埋め込みを作って、そのまま DynamoDB に保存できるよ
- **提供リージョン**: すべての商用 AWS リージョンと AWS GovCloud (US) リージョンで利用可能とのことだよ

パーティションキーによってベクターがパーティション全体に分散されることで、スケーラビリティと低レイテンシーの両立を実現しているみたい。

## まとめ

- DynamoDB でベクター検索が GA（一般提供）になったよ
- 1 桁ミリ秒のレイテンシーで 99% 以上のリコール率、トリリオン規模のベクターにも対応できる設計
- 専用ベクターデータベースへのレプリケーションが不要になって、同期パイプラインの保守コストから解放される
- 保存は既存の List/Number 型、検索は `SearchVectors` API（次元数は最大 4096、結果は最大 100 件、フィルターは完全一致のみ）
- 料金モデルは既存の DynamoDB と同じ pay-per-request

すでに DynamoDB でアプリを運用していて、RAG やレコメンド機能を足したいと思っていたエンジニアさんには、まさにドンピシャの発表だと思うよ！
