-1

私は、ユーザーが投稿した約 10 ~ 20,000 の記事 (通常は 500 ~ 700 語) を保存する、非常に限定された目的の Web アプリケーションを作成しています。いつでも、すべてのユーザーがタグとキーワードで検索を実行したり、記事の任意の部分 (メタデータ、テキスト、またはタグ) を編集したり、最新の最新のデータベース全体のコピーをダウンロードしたりできる必要があります。 . (1 時間ごとに更新される限り、キャッシュから取得できます。)アクティビティは、1 日に数回の予測不可能なスパイクで発生する傾向があり (多くのユーザーが 100% の可用性と高速ダウンロードを必要とするデータベース全体を同時にダウンロードします)、断続的な数週間の低負荷が発生します。アクティビティ。この使用パターンは固定されています。

このアプリケーションにとって GAE は賢明な選択でしょうか? 低コスト (できれば無料)、スケールの弾力性、スタックの大部分の専門的な管理が魅力です。ホストの代わりとしてのアプリ エンジンのアイデアが気に入っています。ただし、データストアの分散アーキテクチャによって課せられる強力な一貫性と結果整合性の間のトレードオフと同様に、あらゆる種類のデータストアの使用に対する過度の制限とクォータが懸念されます。

このアプリケーションを GAE に適合させる方法はありますか? プレーンなデータストア API の代わりに ndb API を使用する必要がありますか? それとも要件が非常にデータ集約的であるため、GAE は Webfaction のようなホストよりも高価ですか?

4

2 に答える 2

1

記事の全文検索を必要としない限り (現在はまだ実験的なものとしてマークされており、 1 日あたり最大 1000 クエリに制限されています)、使用シナリオは App Engine にうまく適合するように思えます。

ユーザーが投稿した約 10 ~ 20,000 の記事 (通常は 500 ~ 700 語) を保存します。

App Engine のエンティティの最大サイズは1 MBであるため、記事の合計サイズがそれ以下であれば問題ありません。また、データを読み取るためのコストは、エンティティのサイズではなく、読み取られるエンティティの数に関係しています。

いつでも、すべてのユーザーがタグとキーワードで検索を実行できる必要があります。

ここでも、タグとキーワードの検索が全文検索でない限り、App Engine のデータストア クエリはこの種の検索を効率的に処理できます。タグとキーワードの両方を同時に検索する場合は、両方のフィールドの複合インデックスを作成する必要があります。これにより、書き込みコストが増加する可能性があります。

最新の最新のデータベース全体のコピーをダウンロードします。

cron/スケジュールされたタスクを使用して、ブロブストアへの 1 時間ごとのダンプをスケジュールできます。ダンプが完了するまでに 60 秒以上かかる場合、cron はバックエンド インスタンスをターゲットにすることができます。ダンプごとに、データベース内のすべてのエンティティを読み取る必要があることに注意してください。これは、1 時間あたり 10 ~ 20k の読み取り操作を意味します。タイムスタンプ フィールドをエンティティに追加し、ダンプ サーブレットに前回のダンプよりも新しいものをクエリさせて、読み取り操作を節約することができます。

アクティビティは、1 日に数回の予測不可能なスパイク (多くのユーザーが 100% の可用性と高速ダウンロードを必要とするデータベース全体を同時にダウンロードする) と断続的な数週間の低アクティビティで発生する傾向があります。

ここで GAE が活躍します。この場合、GAE を使用するとインスタンスを非常に効率的に使用できます。

于 2012-08-17T11:51:55.913 に答える
1

あなたのアプリケーションが特に「データベースが重い」とは思いません。500 ~ 700 ワードは、わずか数 KB のデータです。

GAEがぴったりだと思います。

リストプロパティにタグを付けて、各記事をエンティティのテキストプロパティとして保存できます。テキストを検索するには、検索サービスhttps://developers.google.com/appengine/docs/python/search/を使用できます (現在、割り当て制限があります)。

すべてのデータをダウンロードすることについて 100% 確信があるわけではありませんが、すべてのデータを blobstore に (おそらく pdf として) 保存し、ユーザーがその blob をダウンロードできるようにすることができると思います。

主に組み込みの非同期機能とキャッシングのために、通常のデータストアよりも NDB を選択します。

クォータを下回ることについては、サイトにアクセスしているユーザーの数と、ユーザーがダウンロード/アップロードするデータの量によって異なります。

于 2012-08-17T09:35:27.207 に答える