問題タブ [bigtable]
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 - CPU を消費せずに、App Engine で大量の db.delete を実行する
Google App Engine には適切なサイズのデータベース (50,000 を超えるエンティティ) があり、そこから古いデータを消去したいと考えています。計画は、不要になったエンティティを繰り返し処理する遅延タスクを作成し、それらをバッチで削除することでした。
厄介なことの 1 つは、エンティティには削除したい子エンティティもあるということです。これは問題ありません。これらのエンティティのデータストアをクエリし、親と同時にドロップします。
ParentKind
一度に 100 個のエンティティを削除するように制限しました。それぞれParentKind
に合計で約 40 の子ChildKindA
とChildKindB
エンティティがあり、おそらく 4000 のエンティティでした。
これは当時は合理的と思われましたが、テストとして 1 つのバッチを実行したところ、結果のクエリの実行に 9 秒かかり、データストアへのアクセスに課金対象の CPU 時間で1933秒が費やされました。
これはかなり厳しいように思えます -- エンティティごとに 0.5 秒の請求が可能です! -- しかし、何が間違っているのか完全にはわかりません。それは単にバッチのサイズですか?祖先クエリは特に遅いですか? それとも、削除 (および実際にはすべてのデータストア アクセス) が単に糖蜜のように遅いのでしょうか?
アップデート
クエリを に変更しました。keys_only
これにより、1 つのバッチの実行時間が 4.5 秒に短縮されましたが、それでも CPU 時間は約 1900 秒かかりました。
次に、Appstats をアプリにインストールし (ありがとう、kevpie)、より小さいサイズのバッチを実行しました。10 個の親エンティティで、合計で最大 450 個のエンティティになります。更新されたコードは次のとおりです。
Appstats の結果:
Delete
呼び出しは、操作の中で最もコストのかかる部分です。
これを回避する方法はありますか?Nick Johnson 氏は、現時点では一括削除ハンドラを使用するのが最速の削除方法であると述べましたが、理想的には、同じ種類のすべてのbar = foo
エンティティを削除するのではなく、最初のクエリに一致し、その子であるエンティティだけを削除したいと考えています。
google-app-engine - Google App Engine データストアで 1 秒あたり 5 回以上の書き込みを行うトランザクション カウンタ
1000 人以上の同時プレイヤーが予想されるゲームのトーナメント バージョンを開発しています。トーナメントが始まると、プレイヤーは非常に速く (おそらく 1 秒あたり 5 人以上) 脱落しますが、トーナメントが進行するにつれてプロセスは遅くなります。プレーヤーがトーナメントからいつ敗退するかに応じて、一定量のポイントが授与されます。たとえば、最初にドロップしたプレーヤーは何も得られませんが、500 位のプレーヤーは 1 ポイントを受け取り、1 位の勝者は 200 ポイントを受け取ります。ここで、プレイヤーが排除された直後にポイントを授与して表示したいと思います。
問題は、プレーヤーが排除された後に新しい行をデータストアにプッシュするときに、行エンティティを別のエンティティ グループに配置する必要があるため、1 つのエンティティに対して 1 秒あたり 1 ~ 5 回の書き込みというゲー データストアの制限に達しないことです。グループ。また、脱落したすべてのプレイヤーの賞金を正しく決定できるように、一貫して行数を読み書きできる必要があります。
これをサポートするためにデータモデルを実装する最良の方法は何でしょうか?
google-app-engine - web2py は google app engine と同等のものに似ています
アプリ エンジンの BigTable データベースを使用して、、、演算子に like
似contains
たクエリを生成する方法はありますか?startswith
次のようなことができるように:
web2py のアプリエンジンで。
mysql - mysqlストアドルーチンとmysql-alternative?
合計で約 150,000 レコード (名前) の mysql データベースを使用しています。「names」フィールドでの検索は、php のオートコンプリート機能を介して行われます。テーブルにインデックスを付けましたが、検索が少し遅いように感じます (ほぼ瞬時に応答する Google Finance のようなものに対して、数秒かかります)。私たちは 2 つの可能性を考え出しましたが、より多くの洞察を得たかったのです。
検索を高速化するために大量の (数千またはそれ以上の) ストアド プロシージャを作成できますか? それとも、それほど多くのストアド プロシージャを作成するとデータベースの速度が低下しますか?
「select」ステートメントのmysqlに代わるより高速な方法はありますか(行の挿入と更新の速度はそれほど重要ではないため、必要に応じて犠牲にすることができます)。JOIN ステートメントをサポートしていない BigTable などについて漠然と聞いたことがあります....私たちが行う他のクエリのいくつかには JOIN ステートメントが必要です。
どうも
caching - すべてのユーザーグループキーを取得するためのIN演算子を使用したBigTableクエリ
将来のソーシャルアプリケーションでの権限にはほとんど問題がありません。
プラットフォームはdb(GoogleのBigTable)を非関連にします。
私のアプリケーションでは、各ユーザーにグループがあります(たとえば、友達、共同編集者、家族など)。グループには(Facebookのように)友達がいます。また、このグループに対してのみ一部のコンテンツ(ニュース、短いテキストなど)を公開できます。グループにユーザーがいる場合、それは私の友達です。Facebookと同様ですが、より多くのグループがあります。
私の考えでは、各ユーザーは1つのページですべての友達の最後のコンテンツをすべて(自分自身で「フィード」して)見ることができます(Facebookのトップニュースのように)。しかし、単純なクエリの作成に問題があります。
例えば:
これはうまくいきますが、サブクエリがあり、リストの制限は30アイテムです。もう1つの方法は、コンテンツの強力なキャッシュです。
誰かが何か考えを持っていますか?または任意の学習資料、例...
cassandra - SSTables または Hfiles は 1TB を超えてマージされますか?
メジャー コンパクションでは、リージョン サーバー (Hbase) からのすべての sstable とタブレット サーバー (Cassandra) からのすべての SSTable を大きなものにマージします。
ピリオドが来たら、平均的な SSTables (1 TB を超える合計スペース) が 1 つにマージされますか? SSTable または HFile には、いくつかの部分に分割するいくつかの範囲境界があります。マージ操作で「すべてのサーバーを書き換える」ことがないようにするためですか?
私の質問は、このリンクの「圧縮」セクションに関連しています http://wiki.apache.org/cassandra/MemtableSSTable
python - Google App Engine での ListProperty と StringListProperty の比較
整数 (ユーザー ID) のリストを保存したいのですが、それらを文字列にして StringListProperty を使用する必要がありますか、それとも単に ListProperty を使用する必要がありますか? )。
特定の数に達するまでユーザーをリストに追加する必要があります。その後、それらのユーザーのグループ インスタンスを (別のエンティティ グループに) 作成します。
google-app-engine - Google App Engine とデータベースの「ビュー」
かなり複雑なデータ モデルを持つ GAE 用のアプリケーションを開発しています。
私の理解では、noSQL データベース、特に GAE を使用して複雑なデータ モデルを処理する良い方法は、非正規化されたデータの「ビュー」を使用することです。ブラウザクライアントが一部のデータを更新したい場合、サーバーは一部のコアデータに書き込みを実行し、クライアントが続行できるように「200 OK」を返し、タスクキューを使用して、書き込まれたデータが影響した可能性のある「ビュー」を更新します.
次に、クライアントが通常は SQL 結合を必要とするいくつかのオブジェクトに対してクエリを実行する場合はいつでも、代わりに、必要なすべてのデータが同じ「行」(またはアプリ エンジンの場合はエンティティ) にある「ビュー」をクエリできます。 )。
私が抱えている問題は、このビューの作成と更新はすべて、手動で行うべきものではなく、ライブラリが行うべきことのように見えることです。データのいくつかのビューを指定し、それらが適切に作成および処理されることを期待できる、GAE で動作するツールはありますか? 私はCouchDBがこれを行うと信じています...
google-app-engine - 非リレーショナル DBMS (AppEngine の BigTable) では、マス メッセージング タイプのシステムのエンティティをどのように設定すればよいですか?
たとえば、多くのユーザーがいるとします。ユーザーが何かメッセージを送信するたびに、他のユーザーのリストにメッセージを送ることができます (一括メール送信と同様)。ただし、ストレージ スペースを節約するために、メッセージを 1 回保存したいだけです。そのため、メッセージ受信者の 1 人がメールボックスを開くと、そこでそのメッセージを照会する必要があります。メッセージング システムのエンティティ (テーブル) の設定に関して、より効率的なのはどれですか? 注意: 非 RDBMS では、結合クエリは許可されていません。これはもっともらしい設定ですか、どうすればより効率的にすることができますか (1):
または、次の戦略 (2) を使用する必要があります。
どちらの戦略がより効率的だと思われますか? つまり、単純に DBMS を反復処理するよりも、配列リストを反復処理する方が遅いですか?
どんなコメントでも大歓迎です。
*注: メッセージは任意に長くなる可能性があるため、同じメッセージの複数のコピーを保存したくありません。
ありがとうございました。
download - MySQL のような大きなテーブルを PC にダウンロードするにはどうすればよいですか?
MySQL のような大きなテーブルを PC にダウンロードするにはどうすればよいですか?