問題タブ [app-engine-ndb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
881 参照

google-app-engine - 映画データベースとユーザーの選択を構成する方法は?

映画データベースを作成したいと思います。このデータベースでは、ユーザーが視聴して気に入った映画にマークを付けることができます。

それは機能しますか?私はGoogleアカウントを使用しています。ユーザーが気に入ったすべての映画を後でどのように選択すればよいですか?


Upd。私はsystempuntooutアプローチに従い、次のコードを使用してユーザーの選択を保存しました。

しかし、ユーザーが何度も選択すると、データストアにいくつかのレコードが追加されます...ユーザーIDと映画IDをキー名として保存するだけの方が良いのではないでしょうか。

ただし、このようなアプローチでは、を渡さないと、likedその値が上書きされます(渡されない場合はNone、と同じが使用されます)。watchedNone

0 投票する
3 に答える
4236 参照

google-app-engine - Google App Engine データストアで最も効率的な一対多の関係?

この質問が単純すぎる場合は申し訳ありません。9年生になったばかりです。

NoSQL データベースの設計について学ぼうとしています。読み取り/書き込みの回数を最小限に抑える Google データストア モデルを設計したいと考えています。

これは、1 対多の関係でのブログ投稿とコメントのおもちゃの例です。すべてのコメントを StructuredProperty に格納するか、Comment モデルで KeyProperty を使用するか、どちらがより効率的ですか?

繰り返しますが、目的は、データストアへの読み取り/書き込みの数を最小限に抑えることです。次の仮定を行うことができます。

  • コメントは、それぞれのブログ投稿とは別に取得されません。(これにより、StructuredProperty が最も好ましいと思われます。)
  • コメントは、日付、評価、作成者などで並べ替えることができる必要があります (データストアのサブプロパティはインデックスを作成できないため、パフォーマンスに影響する可能性がありますか?)
  • ブログ投稿とコメントは、作成後に編集 (または削除) することができます。

構造化プロパティの使用:

KeyProperty の使用:

データストアへの読み取り/書き込みの数を最小限に抑えることに関して、1 対多の関係を効率的に表現することに関連するその他の考慮事項を自由に提起してください。

ありがとう。

0 投票する
1 に答える
1539 参照

python - ndb で @classmethod を filter() とともに使用しようとすると、エラーが発生します。NDB初心者

このクラスメソッドを使用したカスタム User モデルがあります。

そして、私はこのエラーが発生しています.:

NDB を使用するのはこれが初めてで、コードは db と all() で動作しました。だから私はこれが簡単な修正であることを知っています。

前もって感謝します。

0 投票する
1 に答える
890 参照

google-app-engine - エンティティ(NDB)の名前空間を変更することは可能ですか?

データストアに「ゴミ箱」を実装する簡単な方法ではないかと思います。


申し訳ありませんが、エンティティの名前空間を簡単に変更できる場合は、「deleted」などの名前空間を使用して、メインの名前空間からエンティティを非表示にし、簡単に復元できるようにすることができます。ドキュメントには何も見つかりませんでしたが、念のために質問を出すと思いました。

0 投票する
2 に答える
1763 参照

google-app-engine - データストアから最新の隣接レコードを取得する方法は?

映画データストアがあり、そこにある各レコードには、以下のようなキー名として独自の ID があります。

ユーザーがムービーを 1 つずつ閲覧できるようにしたいと考えています。まず、最新の映画が表示されます (データベースにはadded日付と時刻のフィールドがあります)。データストアからそれを取得する方法は? 更新。私は以下のようにそれを行うことができます:

しかし、私はそれが好きではありません - キーを取得するために、レコード全体を要求します。

第 2 に、他の映画 (例: 12154) が表示されている場合、ユーザーは前の映画 (id 32453) と次の映画 (id 78873) に移動できる必要があります。もちろん、最後の映画が表示された場合、次の映画はありません。最初のムービーが表示された場合、前のムービーは表示されません。では、問題は次の映画と前の映画のキー ネームを取得する方法です。 更新。現在表示されている映画が 12154 の場合、example.com/movie/32453前の映画とexample.com/movie/78873次の映画のようなリンクを生成する必要があります。

更新。私は以下のようなものを試しました:

しかし、うまくいきません...next_url大丈夫なようですが、prev_urlいつも同じです。これが私のテストデータベースの内容です(-Movies.added注文):

0 投票する
1 に答える
3202 参照

python - PythonのforループでGAEndbの現在のレコードのキーを取得するにはどうすればよいですか?

現在、編集リンクを含むデータストアのレコードのリストを表示するWebページがあります。これをdbから変換したい。ndbに。私はPythonとGAEの初心者です。

現在のコード=

次に、.py側では、次のようになります。

私は他の誰かのコードをコピーすることによってこれらに到達しましたが、それは機能します。ndbで動作させるには、コードがどのようになるかを知る必要があります。(モデルとincludeステートメントは問題ありません。jinja2テンプレートでキーを取得する方法と、post関数でキーを使用する方法を知っている必要があります。

これをndbで機能させるために実際のコードがどのように見えるかを提供してください。

前もって感謝します。

0 投票する
2 に答える
102 参照

google-app-engine - NDB データストアに新しく追加されたレコードを追跡するには?

以前に次のコードを使用しました。

しかし、映画が新しいレコードとして追加されたのか、それとも既存の映画が更新されたのかを知ることはできませんでした. そのため、コードを次のように変更しました。

しかし、最初に映画を取得し、その後でのみ更新するようです。したがって、データストアへのリクエストは 1 つではなく 2 つです。

同じことを行う他の方法はありますか?または、私は間違っていて、両方のアプローチはパフォーマンスの観点から同じですか?

0 投票する
1 に答える
199 参照

google-app-engine - データストアへの書き込みを無効にした場合、Mapreduce ジョブを開始するにはどうすればよいですか?

Mapreduce ライブラリを使用して、ライブの App Engine アプリでデータストア スキーマを移行しようとしています。

私のマッパーは DatastoreKeyInputReader を使用します。各マップ操作は、古いスキーマを使用して古いエンティティをフェッチし、データ操作を行ってから、新しいエンティティを (新しい種類で) 新しいスキーマに書き込みます。トランザクション オプション「force_writes」を True に設定して、NDB を使用してエンティティをトランザクション的に取得および配置します。

アプリは稼働中なので、マッパーのトランザクション書き込みを除いて、移行中は他のすべてのデータストア書き込みをブロックしたいと考えています。残念ながら、個々のマップ操作は、書き込みが無効になっているアプリで force_writes を True に設定して正しく実行できますが、実際には Mapreduce ジョブを開始できません。Mapreduce ライブラリ自体が独自のブックキーピングで force_writes を採用していないため、CapabilityDisabledError がトリガーされます。仕事の。

明らかなハックは、書き込みを有効にしてジョブを開始し、ジョブが開始されたらすぐに無効にすることです。ただし、特に私のアプリは通常の条件下で毎秒数回の書き込みを行うため、これは私にはかなり危険に思えます。さらに、クリーンアップに間に合うように書き込みが再度有効にされない限り、ジョブが終了するとおそらく壊れます。

では、データストアへの書き込みも無効にする必要がある場合、Mapreduce ジョブを開始するにはどうすればよいでしょうか? mapreduce.yaml がジョブの force_writes オプションをサポートするのが最もきれいなようです...

0 投票する
2 に答える
1517 参照

google-app-engine - NDB メンバーシップ クエリ (「IN」操作) のパフォーマンスは、可能な値が多くなると低下しますか?

クエリ操作のドキュメントにはIN、これらのクエリが大きな OR 演算された等価クエリとして実装されていると記載されています。

次と同等です。

私は現在、GAE プロジェクトのいくつかのエンティティをモデル化しており、多くの可能な値を持つこれらのメンバーシップ クエリを使用する予定です。

list_of_facebook_ids何千ものアイテムがある可能性があります。

このタイプのクエリは、リスト内の数千の可能な値でうまく機能しますか? そうでない場合、これをモデル化するための推奨されるアプローチは何ですか?

0 投票する
2 に答える
1001 参照

google-app-engine - ndb.get_multi()の射影を指定する方法はありますか?

NDBを使用すると、クエリのプロジェクションを指定して、クエリに一致するエンティティに対して取得されるプロパティの数を制限できます。

ndb.get_multi()ただし、常に完全なエンティティをフェッチするを使用するときにプロジェクションを指定する方法については、ドキュメントに何も見つかりませんでした。

使用時に特定のプロパティのみをフェッチする方法はありndb.get_multi()ますか?