問題タブ [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.
python - Appengine NDB で削除されたエンティティへのアクセス
Appengine プロジェクトで NDB を使用しています。いくつかのエンティティが削除された後、いくつかの操作を行うために _post_delete_hook を使用しています。この方法では、私は鍵を持っています。しかし、key.get() を実行すると、エラーが発生します。ここにいくつかのコード例があります。
手助け?
これはフックに関するドキュメントです。 http://code.google.com/appengine/docs/python/ndb/entities.html#hooks
python - この再帰をより効率的に記述できますか?
親が子を後援している場合、ノードが子であるツリーである階層組織があります。このコードでツリーをトラバースできるようです
上記を使用して、私はユーザーの組織を取得することができます
downline=user.get_team(user, [])
しかし、1つのリクエストに対してこれを何度も実行する必要があり、その多くの再帰は非効率的である可能性があるため、より効率的な方法はありますか?または、ツリーを正しくトラバースできるため、コードは問題ありませんか?私の最初のバージョンでは、3つの変数を使用しましたが、コードを次の代わりに2つの変数に再配置できることがわかりました。
teamlist変数は実際には必要ないことがわかったので、削除しました。私がそれをした方法は、最初は1つの変数が多すぎたというものでした。
people = user.downline(user, [], [])
google-app-engine - db.Model と NDB の間の ManyToMany 参照の作成
質問を変更します。ManyToMany
との関係db.Model
を適用したいNDB
。例
NDB
モデル
db
モデル
ManyToMany
これらのモデル間に関係を適用できますか?
編集:
これが私のUser
モデルです
そして、これが私のTest
db
モデルです
今、テストに manyToMany を適用したいと思います。出来ますか?
Django スタイルの多対多
google-app-engine - 並列コード実行 python2.7 ndb
私のアプリでは、ハンドラーの1つに対して、一連のエンティティを取得し、それぞれに対して関数を実行する必要があります。
私は必要なすべてのエンティティの鍵を持っています。それらをフェッチした後、それぞれに対して 1 つまたは 2 つのインスタンス メソッドを実行する必要があり、これによりアプリの速度がかなり低下します。100 個のエンティティに対してこれを行うと、約 10 秒かかり、遅くなります。
エンティティを取得し、それらの関数を並行して実行して時間を節約する方法を見つけようとしていますが、どの方法が最適かはわかりません。
私は _post_get_hook を試しましたが、将来のオブジェクトがあり、get_result() を呼び出してフックで関数を実行する必要があります。これは、sdk で正常に動作しますが、多くの「Python objec の呼び出し中に最大再帰深度を超えました」を取得しますが、理由がよくわかりませんし、エラーメッセージも詳しくありません。
Pipeline api または ndb.Tasklets は何を探していますか?
atm 試行錯誤していますが、誰かが私を正しい方向に導くことができれば幸いです。
編集
私のコードはファイルシステムに似たもので、すべてのフォルダーには他のフォルダーとファイルが含まれています。別のエンティティに設定されたコレクションのパスなので、コレクション エンティティをシリアル化するには、参照されるエンティティを取得してパスを取得する必要があります。コレクションでは、serialized_assets() 関数は含まれるエンティティが多いほど遅くなります。含まれている各アセットを並べてシリアル化関数を実行できれば、処理速度が大幅に向上します。
EDIT2:
このタスクレットのコードは大丈夫ですか?
google-app-engine - Google App Engine NDB とフィクスチャの使用
Google App Engines New DBでPythonフィクスチャモジュールを使用する方法に関する適切な情報はありますか?
次のようないくつかの問題があるようです。
obj.delete()
分解時 (ndb
その中obj.key.delete()
)ネストされたStructuredProperty要素を設定する方法は直感的ではありません。
ndb
フィクスチャ モジュールまたは で動作する代替フィクスチャ システムを許可する回避策はありndb
ますか?
ありがとうございました。
google-app-engine - modelname_set(後方参照プロパティ)に相当するGoogle App Engine ndb
Google App EngineのNDBmodelname_set
に(後方参照プロパティ)に相当するものはありますか?
古いDBでは、モデルエンティティは後方参照プロパティを次のように記述していました。
後方参照プロパティの名前はデフォルトでmodelname_set(モデルクラスの名前は小文字で、末尾に「_set」が追加されています)であり、ReferencePropertyコンストラクターのcollection_name引数を使用して調整できます。
このプロパティはNDBdb.Model
インスタンスには存在しないようです。
NDBにはback-referenceプロパティと同等のものがありますか?
google-app-engine - ndb.get_context().urlfetch をモックする方法は?
私のテストではurlfetch
、NDB パッケージによって提供されるモックを作成したいので、テストの実行中に実際の http リクエストは行われません。
urlfetch()
を返すFuture
ので、きちんとモックするにはNDBの内部を知る必要がありそうです...また、何とかモックできると思っていましgoogle.appengine.api.urlfetch.create_rpc()
た...しかし、私はこれまで何の進展もありませんでした...
これどうやってするの?
ありがとうございました。
google-app-engine - NDBとDB(高レプリケーションデータストア上)の速度比較はどのようになっていますか?
Python NDBの概要からの抜粋:
アプリケーションがエンティティを読み取ると、そのエンティティは自動的にキャッシュされます。これにより、頻繁に読み取るエンティティの読み取りが高速(かつ安価)になります。
..。
データを書き込むNDB関数(たとえば、put())は、キャッシュの無効化後に戻ります。適用フェーズは非同期で行われます。
Youtubeでの視聴では、Google I / O 2011:More 9s Please:Under the Covers of the High Replication Datastore、at 13:11-ish、平均レイテンシーは次のとおりです。
マスター/スレーブ:
- 読み取り:15ms
- 書き込み:20ms
高レプリケーション:
- 読み取り:15ms
- 書き込み:45ms
アプリの観点から、NDBはこれらの速度にどの程度影響しますか?
編集:タイミング統計(ミリ秒単位)について特に興味があります。
追加のクレジット:ニック・ジョンソンが、それぞれ約160ミリ秒かかるクエリについて言及していると聞きました(2009年)。NDB[link]
はクエリの速度に利点がありますか?
python - Google アプリ エンジン NDB
NDBの最近のリリースで、古いデータストア API を使い続ける理由はありますか?
私は現在、古いデータストア API を使用するアプリケーションに取り組んでおり、オブジェクトを memcache にキャッシュすることにかなりの労力を費やしました。NDB に変更することで、カスタム キャッシュを削除しても現在のパフォーマンスを維持できるという私の理解は正しいですか?
さらに、NDB は何らかの方法でシャーディング カウンターの必要性を変えますか? エンティティ (グループ) への 1 秒あたり 5 回の書き込みの制限は、NDB で何らかの方法で変更されていますか?
編集
私のアプリケーションはまだ開発中であり、簡単に削除できないエンティティがないことを考えると、NDB に変更する前に考慮すべきことはありますか? または、単に変更db.Model
するのと同じくらい簡単ndb.Model
でしょうか?
python - Google-app-engine NDB iter keys_only
頻繁に実行されるクエリがあり、おそらく同じ結果が得られるとします。
以下を使用するのは正しいですか?
以下よりもパフォーマンスが向上します:
最初の例では、クエリはキーのみをロードし、以降の呼び出しkey.get()
はNDBのキャッシュメカニズムを利用しますが、例2は常にストアからエンティティをフェッチするためですか?それとも私は何かを誤解しましたか?