問題タブ [google-cloud-datastore]
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 - App Engine:13個のStringPropertyと1個のStringListProperty(インデックス作成/ストレージおよびクエリのパフォーマンス)
最初に少し背景を説明します。GeoModelは私が作成したライブラリであり、AppEngineアプリに非常に基本的な地理空間のインデックス作成とクエリ機能を追加します。ジオハッシュへのアプローチも同様です。GeoModelの同等のロケーションハッシュは「geocell」と呼ばれます。
現在、GeoModelライブラリは、13のプロパティ(location_geocell__n_、n = 1..13)を各ロケーション認識エンティティに追加します。たとえば、エンティティは次のようなプロパティ値を持つことができます。
これは、空間クエリ中に不等式フィルターを使い果たしないようにするために必要です。
13プロパティのアプローチの問題は、アプリが実行したい地理クエリに対して、13の新しいインデックスを定義して構築する必要があることです。プロジェクトのデモアプリを書き直しているときに痛々しいほど気づいたので、これは間違いなくメンテナンスの手間です。これは私の最初の質問につながります:
質問1:インデックスごとに大きなストレージオーバーヘッドはありますか?つまり、それぞれにn個のエンティティを持つ13個のインデックスがあるのに対し、13n個のエンティティを持つ1個のインデックスがある場合、ストレージの点で前者は後者よりもはるかに悪いですか?
この記事によると、(1)の答えはノーのようですが、誰かが別の経験をしたことがあるかどうかを確認したいと思います。
ここで、GeoModelライブラリを調整して、13個の文字列プロパティの代わりにlocation_geocellsと呼ばれるStringListPropertyが1つだけになるようにすることを検討しています。
これにより、はるかにクリーンになりindex.yaml
ます。しかし、私はパフォーマンスへの影響に疑問を持っています:
質問2:13個の文字列プロパティから1個のStringListPropertyに切り替えると、クエリのパフォーマンスに悪影響があります。私の現在のフィルターは次のようになります。
新しいフィルターは次のようになります。
最初のクエリには_n_エンティティの検索スペースがあり、2番目のクエリには_13n_エンティティの検索スペースがあることに注意してください。
(2)の答えは、このブログ投稿のヒント#6によると、どちらも同等のクエリパフォーマンスをもたらすようですが、これについても、実際の経験が異なる人がいないかどうかを確認したいと思います。
最後に、ストレージの使用率、クエリのパフォーマンス、使いやすさ(特に、wrt index.yaml)を改善するのに役立つ提案やヒントが他にある場合は、お知らせください。ソースはここにありますgeomodel&geomodel.py
python - 奇妙な動作を照会します。Google App Engine データストア
私はこのようなモデルを持っています:
次のようなクエリを実行する場合があります。
また
次のようなエラー メッセージが表示されます。
しかし、同じ意味で GQL クエリを使用している場合は、すべてうまくいきます。
なぜそれが起こるのですか?GAE が「すべて」が属性であると考える理由がわかりません。
更新:おっと...モデルと同じ名前のリクエストハンドラーもあることがわかりました;(
google-app-engine - Google Datastore エンティティをバックアップ/復元するツールはありますか?
私はしばらくの間、Google App Engine と Google Datastore をいじっていましたが、クラウド上に自分のものを定期的にバックアップする必要に直面しています。
google-datastore の特定のインスタンスからすべてのデータをダウンロードして別のインスタンスに復元できる汎用ツールはありますか?
もしそうなら、私に教えてください。そうでなければ、誰かがやるべきです!
python - Google App Engine データストアに正規表現を保存する方法は?
通常、正規表現は文字列として表現されますが、プロパティもあります (つまり、単一行、複数行、大文字と小文字を区別しない)。それらをどのように保管しますか?コンパイルされた正規表現の場合、それを保存する方法は?
カスタム プロパティ クラスを記述できることに注意してください: http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html
私は Python を十分に理解していないため、コンパイルされた正規表現を格納するカスタム プロパティを最初に記述しようとして失敗しました。
python - GoogleAppEngine用のGoogleユーザーへの代替ログインの作成
Googleユーザーを使用せずに、ユーザーのログインとログアウト/作成をどのように処理しますか?メールとパスワードだけでなく、さらにいくつかのオプションが欲しいのですが。必要なフィールドを使用してユーザーモデルを作成する場合だけですか?それは十分に安全ですか?
または、実際のGoogleページにリダイレクトせずに、ユーザーにGoogle IDを使用してログインさせる方法はありますか?
python - オブジェクトの辞書を介して Google App Engine データストアのエントリを更新することはできますか?
次のコードを試しましたが、うまくいきませんでした:
必要なすべてのプロパティを投稿していますが、エントリが更新されず、エラーも表示されません。修正方法は?
ところで
python - Google App Engine で UserProperty の null 値を確認する方法
Google App Engine のデータストア モデリングで、UserProperty クラスのプロパティの null 値を確認するにはどうすればよいですか? 例:私はこのコードを持っています:
エディターが null でないエントリを確認したい場合、この種の GqlQuery は使用できません
UserProperty で変数の存在を確認する方法はありますか? ありがとうございました!
java - Java App Engine Datastore:オブジェクトの継承されたクラスのフィールドを照会する方法は?
AppEngine 1.2.2。クラス Product を次のように定義します。
派生クラス Book を次のように定義します。
次に、次のように新しいオブジェクトを作成します。
PersistenceManager pm = PMF.get().getPersistenceManager(); pm.makePersistent(new Book("ジョージ・オーウェル", "1984"));
次のようなクエリを使用して、この新しいオブジェクトをクエリできます。
Query query = pm.newQuery("select from " + Book.class.getName() + " where author == param"); query.declareParameters("文字列パラメーター"); List results = (List) query.execute("George Orwell");
Book で定義されたフィールド 'author' を照会しているため、これはオブジェクトを返します。
ただし、これは機能しません。
Query query = pm.newQuery("select from " + Book.class.getName() + " where title == param"); query.declareParameters("文字列パラメーター"); リスト結果 = (リスト) query.execute("1984");
これは、派生クラス Product で定義されていても、フィールド「タイトル」がないことを示す例外をスローします。
継承されたクラスのフィールドがデータストア クエリで使用できないようです。
これは、構文のバリエーションや注釈を使用して実際に可能ですか?
python - App EngineデータストアからJSONへの階層データ出力?
AppEngineデータストアに大きな階層データセットがあります。エンティティグループにデータを格納することで階層が保持されるため、次のように最上位の要素キーを知っているだけでツリー全体をプルできます。
query = db.Query().ancestor(db.get(key))
質問:このデータをJSONとして出力し、階層を保持するにはどうすればよいですか?
GoogleにはGqlEncoderというユーティリティクラスがあり、simplejsonにデータストアクエリ結果のサポートを追加しますが、基本的にデータをフラット化し、階層を破壊します。
助言がありますか?
google-app-engine - 管理コンソールを除き、App Engine エンティティを変更できません
App Engine データストアで重大な問題が発生しています。デバッグの影響を完全に受けていないようです。エンティティを構築した後に変更できません。
この問題は、メイン アプリケーションとコードを共有しない app.yaml で定義されたコンソールから作業する場合にも発生します。コンソールからの例を次に示します。
この同じ動作は、アプリケーション内のすべてのエンティティの種類とすべてのプロパティに影響します。エンティティが保存されているかどうかは関係ありません。
数日、数週間、数か月前のリビジョンに戻そうとしましたが、アプリのロジックが壊れているため、実際に数週間、数か月前だった場合は間違いなく気づいていたにもかかわらず、問題はまだ存在しています。Ubuntu と OSX の両方を実行しているさまざまなマシンに存在し、実稼働環境のすべてのアプリ バージョンにも存在し、テストした他の少なくとも 1 つのアプリケーションにも存在します。SDK データストアを消去し、別のポートを使用し、memcache と taskqueue をフラッシュし、SDK を再インストールし、必死になって思いつく他のすべてのデバッグ トリックを行った後も、まだ存在しています。
影響を受けない 1 つの場所は、管理コンソールです。同じ一連のコードで、変更されたエンティティの期待される結果が得られます。問題を引き起こしている可能性があると考えられるすべてのモジュールまたはクラスをインポートした後でも、コンソールは常に期待どおりに動作します。私のコードにはこの問題を引き起こしているものは何もないという別の兆候 (そして、私は完全に正気ではありません)。
数日前の時点で、管理コンソールからできるのと同じように、アプリ内からエンティティを変更できると確信しています。結局のところ、不変エンティティはあまり役に立ちません。
アドバイスをいただければ幸いです。この問題が修正されるまで開発を続けることができないのではないかと心配しています。