私はAmazonのDynamoDBを見ています。これは、データベースサーバーの保守とスケーリングの面倒な作業をすべて取り除いているように見えるからです。私は現在MySQLを使用していますが、データベースの保守とスケーリングは完全な頭痛の種です。
ドキュメントを確認しましたが、データを簡単に取得できるようにデータを構造化する方法に頭を悩ませることに苦労しています。
私はNoSQLと非リレーショナルデータベースにまったく慣れていません。
Dynamoのドキュメントから、プライマリハッシュキーと、限られた数の比較演算子を使用したプライマリ範囲キーでのみテーブルをクエリできるようです。
または、全表スキャンを実行して、それにフィルターを適用することもできます。キャッチは、一度に1Mbしかスキャンしないため、X個の結果を見つけるためにスキャンを繰り返す必要がある可能性が高いということです。
これらの制限により、予測可能なパフォーマンスを提供できることはわかっていますが、データを取り出すのが非常に難しいようです。また、全表スキャンを実行することは、実際には非効率的であり、テーブルが大きくなるにつれて効率が低下するだけのようです。
たとえば、Flickrのクローンがあるとします。MyImagesテーブルは次のようになります。
- 画像ID(番号、プライマリハッシュキー)
- 追加された日付(番号、プライマリ範囲キー)
- ユーザーID(文字列)
- タグ(文字列セット)
- 等
したがって、クエリを使用すると、過去7日間のすべての画像を一覧表示し、結果をX個に制限するのが非常に簡単になります。
ただし、特定のユーザーのすべての画像を一覧表示する場合は、全表スキャンを実行し、ユーザー名でフィルター処理する必要があります。タグについても同じことが言えます。
また、一度にスキャンできるのは1Mbのみであるため、X個の画像を見つけるために複数のスキャンを実行する必要がある場合があります。また、X枚の画像で簡単に停止する方法もわかりません。30枚の画像を取得しようとしている場合、最初のスキャンで5枚、2回目のスキャンで40枚になる可能性があります。
私はこの権利を持っていますか?それは基本的にトレードオフですか?実質的にメンテナンスフリーで、非常に高速で予測可能なデータベースパフォーマンスが得られます。しかし、トレードオフは、結果を処理するためにはるかに多くのロジックを構築する必要があるということですか?
それとも私はここで完全にベースから外れていますか?