2

私の新しいサイト (本を読むため) では、実際には静的コンテンツを使用してページを提供しています。HTML ファイルをフォルダーに保存し、ページを提供するために、それを読み込んでコンテンツを jinja2 テンプレートに渡し、すべてをまとめて表示します。タイトルを知るための本のIDを取得する以外、データベースにはヒットしません。

これは問題なく高速に動作していますが、GAE SDK から「デプロイ」オプションを使用してすべての新しい本を「アップロード」する必要があることは明らかです (私が読んだことによると、外部から GAE のファイル システムにアクセスする方法はありません)。 、FTP のように)、これは最適な方法ではありません。

そこで、HTML コンテンツをデータベースに保存することを考えていますが、これによりデータベースのヒット数が大幅に増加しますか? 私は NDB を使用しているため、理論的には、本を読むすべてのユーザーは、最初に本を読んだ時点で NDB キャッシュからキャッシュされた結果を取得します。これは正しいですか?

htmlをデータベースに渡す方が良いでしょうか? サイズ的には、html ページあたり 8k 以上になります。ページには画像ファイルも含まれているので、新しい本ごとにアップロードするという最初の問題を回避するために、データベースにも画像を保存する必要がありますよね?

本の例のページは次のようになります

4

4 に答える 4

2

「貧乏人の」実装が必要な場合は、アプリケーション フォルダーの最上位レベルに「books」という名前のフォルダーを作成します。その中に、本ごとに 1 つのフォルダーを作成し、それらのそれぞれの中に、章ごとに 1 つのフォルダーを作成します。これにより、ライブラリのツリー構造が得られます。

次に、各本のフォルダー内に、表紙と目次として機能する index.html ファイルを作成します。各章へのリンクが必要です。各章のフォルダー内に、その章の HTML を含む別の index.html ファイルを作成します。その章のすべての画像は、そのフォルダー内の index.html ファイルと一緒に表示され、すべてのリンクは相対リンクです。つまり、href="picture.jpeg" です。

app.yaml を変更して、「books」フォルダーを静的ディレクトリとして提供するようにします。

handlers:
- url: /books
  static_dir: books

ブックの内容を変更する必要がない場合は、各ブックを 1 回だけ発行して展開できます。これの優れた点は、HTML と app.yaml を編集する以外にプログラミングが必要ないことです。

于 2013-06-04T00:56:23.633 に答える
1

ndb エンティティを正しく構成すれば、オーバーヘッドは最小限に抑えられます。

基本的に、常にキーベースの読み取りを行うだけです。

あなたが持っているとしましょう:

def Template (ndb.model):
   data = ndb.TextProperty()

次に、次のような読み取りを実行できます。

key = ndb.Key(Template, 'bookname.html')
data = key.get().data

ndb は、これらの読み取りを自動的に memcache します。そのため、memcache がそれらを追い出すまで、それらは非常に高速で完全に無料になります。

実際に考慮すべきことはサイズです。ndb エンティティは (IIRC) 1MB に制限されています。すべてのテンプレートがそれよりも小さい場合は、問題ありません。サイズが大きい場合は、ブロブ ストアを使用することをお勧めします。ただし、ndb を使用して Blob Store への参照を保存することをお勧めします:)

于 2013-06-05T13:36:07.147 に答える
1

Google ドライブを使用してコンテンツをアップロードし、コンテンツを NDB に保存してみませんか。読み取りは高価ではなく、NDB データストアは非常に高速です。

ブロブストアを画像に使用できます。Image API の blobstore と get_serving_url を利用する Google High Performance Image Serving を見てください。

于 2013-06-03T12:05:59.367 に答える