問題タブ [sharding]
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.
sorting - 分散データの並べ替えとページングをどのように実装しますか?
これが私が解決しようとしている問題です:
複数のデータベース シャードにまたがって保存されている、ページ化され、並べ替えられたデータのテーブルを表示できる必要があります。
ページングと並べ替えはよく知られた問題であり、データが単一のソースから取得された場合、ほとんどの人がさまざまな方法で解決できます。しかし、データを複数のシャードに分割したり、DHT や分散ドキュメント データベース、または任意の種類の NoSQL を使用したりする場合、事態はさらに複雑になります。
以下は、非常に小さなデータ セットの簡単な図です。
シャード | データ
1 | 1
| D
1 | G
2 | B2
| E
2 | H
3 | C
3 | F
3 | 私
ページに並べ替え (ページ サイズ = 3):
ページ | データ
1 | 1
| B1
| C
2 | D
2 | E
2 | F
3 | G
3 | H
3 | 私
ユーザーのページ 2 を表示したい場合は、次のように返します。
D
E
F
問題のテーブルのサイズが 1,000 万行または 1 億行の場合、すべてのデータを Web/アプリケーション サーバーにプルダウンして並べ替え、正しいページを返すことはできません。また、シャードはお互いを認識していないため、個々のシャードにデータの独自のスライスを並べ替えてページングさせることは明らかにできません。
さらに複雑なことに、提示する必要のあるデータがそれほど古いものであってはならないため、事前に一連の有用な並べ替えを事前に計算し、後で取得できるように結果を保存することは現実的ではありません。
python - 特定の MySQL テーブルをあるマシンから別のマシンに自動的に移動する方法は?
"shard_0"
、"shard_1
"、"shard_2"
などの形式のテーブルを持つ MySQL データベースがあります。
これらは仮想シャードです。"shard_0"
ここで、別の DB サーバーを追加し、偶数番号のシャード ( 、"shard_2"
、"shard_4"
、...) を新しいマシンに移動したいと考えています。
それを行う最善の方法は何ですか?多くのテーブルがあるので、理想的には、各テーブル名を個別に入力する必要はなく、自動的に何かを行う必要があります。おそらく次のようなものです:
ありがとう
sql - 分散データベース コンピューティング - RDBMS パラダイム内で本当に可能か?
私は NoSQL のコンテキストでこれを求めています。これは、費用をかけずにスケーラビリティとパフォーマンスを実現します。
では、データベース間で大規模な並列分散コンピューティングを実現する必要があるとしたら、現在 (RDBMS パラダイム内で) 高いスケーラビリティを備えた分散コンピューティングを実現するために利用できるさまざまな方法論は何ですか?
データベースのクラスタリングとミラーリングは、分散コンピューティングに何らかの形で貢献しますか?
postgresql - PostgreSQLのスケーリングはMongoDBと比較してどうですか?
特に自動シャーディングと、サーバーをクラスターにホットアドする機能を備えた、驚くほどスケーラブルなMongoDBについてはよく知っています。
ただし、PostgreSQLのスケーラビリティに関するデータはあまり見つかりませんでした。他のRDBMSと同じように、テーブルスペースがあることはわかっています。これらを(シャーディングのように)自動成長させることはできますか?それとも、SQL Serverのような手動プロセスですか?
誰かが私がこれに関するより多くのデータをどこで得ることができるか知っていますか?
php - Doctrine ORM:チケットサーバーを使用してプライマリIDを生成する最良の方法は?
一意の 32 ビット INT ID を配布するための集中型チケット サーバーを作成中です。getPrimaryKey('user') など、エンティティ/テーブルのパラメーターを受け入れるアプリケーション内で呼び出すことができる関数があります。私はこのブログ投稿を介して Flickr からアイデアを得ました。
http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/
最終的には複数の MySQL データベース間でデータをシャーディングする予定であり、概念実証としてこのコードを稼働させたいと考えています。
私の質問は、Doctrine 内でこの機能を使用するための最良の方法は何ですか? 明らかに、上記のチケット サーバーを使用して、どの Doctrine モデルにも自動インクリメント主キーが含まれていないことを指定する必要があります。
データベースに新しいレコードを挿入する前に、getPrimaryKey メソッドを使用して主キーを取得する拡張可能な Doctrine_Model メソッドはありますか? そうでない場合、アプリケーション内の別の場所からこの問題に取り組む必要がありますか?
理想的には、次のような Doctrine リレーションを使用する場合、上記の方法を使用して ID を生成したいと考えています。
また、このシナリオのもう 1 つの側面は、特定のシャードからデータを選択することです。私の現在の考えは、次のように各シャードに含まれるキー範囲のマスター リストを維持することです (シャードごとの行数が少ないことは無視してください)。
シャード A ユーザー ID 1 ~ 1000
シャード B ユーザー ID 1001 ~ 2000
シャード C ユーザー ID 2001 ~ 3000
次に getShard($table_name, $primary_key) のようなものを呼び出してシャードを取得し、Doctrine 接続をその特定のシャードに切り替えることができます。特定のユーザー/エンティティの関連データは同じシャードに存在する可能性が高いため、複数のシャードにまたがる関係についてはあまり心配していません。ただし、可能性がある可能性があるため、この問題に関するガイダンスも大歓迎です。
database - 異なるデータベースと通信する休止状態
自分のアプリが 2 つの異なるデータベースと通信する必要があり、それら自体がレプリケートされます (Postgres ストリーミング レプリケーションを使用)。その理由は、すべての読み取りを 1 つのデータベースに対して行い、他のデータベースに対して書き込みを行いたいからです。
アプリケーションで休止状態を使用しています。これを達成するためのすぐに使える方法はありますか?
-ありがとう
編集:はい、私が達成しようとしていることが理にかなっているのかどうかについてコメントしてください。
google-cloud-datastore - GAE-シャーディングされたプロパティに関するクエリ
ここで概説するように、GoogleAppEngineのシャーディング値の理論を理解しています。
http://code.google.com/appengine/articles/sharding_counters.html
しかし、シャーディングした値に対してクエリを実行したい場合はどうなりますか?値はN個の異なるカウンターにランダムに分割されているため、単純にクエリを実行することはできません。これらの値を合計して、メインエンティティを更新するための解決策はありますか?他の人がこの問題に対してどのような解決策を考え出したのか知りたいです。
編集:タスクキューAPIを発見しましたが、バックグラウンドでメイン値を更新するための解決策のようです。シャーディングと並行してこれを使用しようとした人はいますか?
mongodb - シャーディングされたMongoDBクラスターをクリーンにシャットダウンする
私は現在、mongosサーバー、構成サーバー、およびそれぞれ3つのmongod(マスタースレーブ)サーバーの2つのシャードを備えたmongoDBセットアップを持っています。それらをシャットダウンするときに、キューに入れられているデータが失われないように、またはサーバーが書き込み先のシャードを決定している間などに、それらがクリーンにシャットダウンされるようにしたいと思います。
MongoDBサーバーのクラスターをシャットダウンするための現在のベストプラクティスは何ですか?
シャットダウンするのに最適な順序、fsyncの発行、ロックの書き込みなど。
これを自動化して、バックアップや新しいコードのプッシュなど、データベースを一貫性のある状態にする必要があるものを簡単に作成するためのスクリプトを作成したいと思います。
mongodb - ObjectIdがMongoDBでのシャーディングを容易にするのはなぜですか?
ObjectIdを一意のキーとして使用するとシャーディングが簡単になることを読み続けていますが、それがなぜであるかについての比較的詳細な説明は見ていません。誰かがこれに光を当てることができますか?
私が尋ねる理由は、英語の文字列(明らかに一意になります)を一意のキーとして使用したいのですが、後でそれが私の手を縛らないようにしたいからです。
database - NHibernate または EF、シャードまたは手動シャーディング?
自分の判断が正しいか知りたいです。ユーザーがローカル データベース (おそらく SQL CE または SQLite) とリモートの共有データベース (ほとんどの場合 MySQL) からのデータベース エントリを混在させることができるアプリケーションを開発しています。理想的には、柔軟性があり、複数のデータベース サーバー タイプと互換性がある必要があります (初期構成に従って静的に、複数のタイプを動的に混合するのではありません) が、これはショーストッパーではありません。
コードは C#、.NET 4 です。
当然のことながら、NHibernate について考えていたのは、バージョン 3.0 で LINQ を備えていて、コードの読みやすさと効率性にプラスであり、モデル ファーストのアプローチが Entity Framework よりも自然だからです。また、混合データベース部分のシャードもあり、処理がはるかに簡単になります。もう 1 つのオプションは EF 4 です。EF 4 は、.NET コンテキストと Visual Studio で完全にサポートされており、有望な将来性があるため、私はそれを好みます。
Shards は十分に成熟していますか? かなり長い間 3 ベータ版に固執しており、死んでいるプロジェクトのように見えますが、この拡張機能に基づいて専門的なアプリケーションを展開した人はいますか? 未来はありますか?それとも別のオプションがありますか?
NHibernate 3 は Mono 上で動作しますか? 私はそう思いますが、実際の確認は素晴らしいことです。Web サーバーを代替インターフェイスとして開発する必要がある場合、これは EF に勝るもう 1 つの利点です。
情報やフィードバックをお寄せいただきありがとうございます。
更新 1
どうやら .NET 4 が問題であり、NHibernate を使用するには .NET 3.5 が賢明です。また、SQLite と SQL CE、または WPF のようなフレームワークの他の部分にも明らかに問題があります。
NHibernate では、異なるデータベース タイプ (MySQL と SQLite など) 間でのシャーディングが可能ですか?
したがって、クライアント側にとっては EF 4 の方が安全であり、可能な ASP.NET インターフェイスに関しては NHibernate の方が安全であると私は信じ始めています。