問題タブ [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.

0 投票する
4 に答える
951 参照

database - Propel でのデータベースシャーディングのサポート

Propel のデータベース シャーディングのサポートがどれだけ優れているか気になりませんか? MySQL をデータベース サーバーとして使用し、Propel を ORM として使用して、PHP でアプリケーションを作成することを考えています。

私のアプリケーションがうまくいった場合に備えて、アーキテクチャを最初からスケーラブルに保つことが良いかもしれないと私は考えています。

あなたの見解は?

0 投票する
5 に答える
3968 参照

database - シャードデータベースで一意の行 ID を作成する方法は?

非シャード DB では、自動インクリメントを使用して一意の ID を生成し、特定の行を参照できます。

DB を 12 個のシャードに分割したいと考えています。特定のシャードに挿入すると、自動インクリメント ID が一意ではなくなりました。

この問題に対処する際に誰かの経験を聞きたいです。

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

mysql - データベースシャーディングのためのMySQLプロキシの代替

MySQLプロキシの代替手段はありますか?まだアルファ版なので使いたくないです。

table_1 table_2 table_3 table_4...table_10が10台のサーバーに分散している10台のMySQLサーバーがあります。各テーブルの構造は同じであり、データセットが異なる単なるシャードです。

MySQLプロキシに代わるものはありますか?クライアントアプリケーションを単一のSQL Server(プロキシ)に接続して、クエリを調べ、それに代わってデータをフェッチすることができます。

たとえば、クライアントがプロキシから「SELECT * FROM table_5 WHERE user = 123」を要求した場合、プロキシはtable_5を格納する5番目のSQL Serverに接続し、データを取得しますか?

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

java - Java を使用して、Google AppEngine データストアに特定のキーのオブジェクトが存在するかどうかを確認するにはどうすればよいですか?

シャーディング カウンターの例 (code.google.com/appengine/articles/sharding_counters.html) を Java に移植しようとしています。唯一の問題は、Java API に Python の「get_by_key_name」のような呼び出しがないことです。これが基本的な考え方です:

残念ながら、これを初めて実行すると JDOObjectNotFoundException がスローされます。特定の名前のカウンターが存在するかどうかを判断するクエリを実行できますが、それはトランザクションではありません。別のスレッドが同じことを行い、最終的に両方が同じキーを持つオブジェクトを作成する可能性があります。

私が理解していることから、(Java API の) トランザクション内でサポートされている唯一の操作は get と put です。では、まだ存在していない (つまり、'get' がない) キーでオブジェクトをロックし、それを作成した最初の唯一の人物であることを確認するにはどうすればよいでしょうか?

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

sharding - ジョブキューイングとデータベースシャーディングに関する優れたリンク/記事はありますか?

誰かが、ジョブキューイングを使用してWebアプリをスケーリングする方法/時期/理由に関する優れたリンクを持っていますか?また、データベースシャーディングに関する記事も役に立ちます:)

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

sharding - Web サイトのユーザーデータのシャーディングについて詳しく知るにはどうすればよいですか?

複数のサーバー間で Web サイトのユーザー データをシャーディングすることに関心があります。

たとえば、ユーザーは同じ場所からログインします。ただし、ログイン スクリプトは、ユーザー データが存在するサーバーを特定する必要があります。そのため、ログイン スクリプトはマスター レジストリにそのユーザー名を照会し、それがサーバー B にあることを返す場合があります。ログイン スクリプトはサーバー B に接続し、ユーザー名とパスワードを確認します。それは理にかなっていますか?データが存在する場所を解決するために、マスター レジストリのようなものを用意するのは普通ですか?

また、検索しましたが、シャーディングに関するチュートリアル/情報/戦略を見つけることができませんでした。このトピックについて知っているオンライン リソースがある場合は、共有していただければ幸いです。ありがとう!

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

database - Distributed Key-Value Data Store with Offline Access (Static Partitioning)

Need to be able to set server(s) that replicate all information, as a master data store that has all the data.

Also need servers that specifically store/replicate certain data, available in local LANs, so that when the internet connection goes down, they can still access their local data. Under normal circumstances, the clients will access most of their data from the local LAN, and may use others when the local LAN server goes down.

This is wanted alongside the benefits of a distributed data store, such as failure resistance and speed.

Which Distributed Key-Value Data Store or other data storage method would be most suited for this?

0 投票する
8 に答える
38624 参照

sql-server - 大規模なデータベース テーブルからの削除を高速化するにはどうすればよいですか?

私が解決しようとしている問題は次のとおりです。最近、複数のシャード間でデータベースの負荷を分散できるようにするデータ層の再設計を完了しました。シャードのバランスを保つために、あるシャードから別のシャードにデータを移行できる必要があります。これには、シャード A からシャード B にコピーし、シャード A からレコードを削除することが含まれます。しかし、非常に大きなテーブルがいくつかあり、多くの外部キーがそれらを指しているため、テーブルから 1 つのレコードを削除するのに 1 秒以上かかる場合があります。

場合によっては、テーブルから何百万ものレコードを削除する必要がありますが、実際には時間がかかりすぎます。

外部キーを無効にすることはオプションではありません。行の大量のバッチを削除することもオプションではありません。これは本番アプリケーションであり、大量の削除を行うとリソースがロックされすぎて障害が発生するためです。私は Sql Server を使用しており、パーティション分割されたテーブルについては知っていますが、パーティション分割の制限 (およびエンタープライズ エディションのライセンス料金) は非常に非現実的であり、実行できません。

この問題に取り組み始めたとき、途中で外部キー制約に違反しないように、リーフ レベルからデータ モデルの最上部までの行を削除する方法を理解するアルゴリズムを作成するのが難しいと思いました。しかし、一晩で消える必要があるレコードを削除するには数週間かかるため、その問題を解決しても役に立ちませんでした。

データを仮想的に削除されたものとしてマークする方法を既に構築しているため、アプリケーションに関する限り、データは失われていますが、大きなデータ ファイル、大きなバックアップ、低速のクエリをまだ処理しています。テーブル。

何か案は?ここで関連する古い投稿を既に読んでいますが、役立つものは何も見つかりませんでした。

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

python - 新しいモデルを作成するときに、シャーディングされたカウンターをGoogle App Engine / Djangoのどこに自動インクリメントする必要がありますか?

モデルMyModel(Googleのdb.Modelを拡張)があり、作成されたモデルの数を追跡したいと思います。

グーグルのシャーディングカウンターに関するI/Oトークのコードはかなり良いと思うので、それを使用しています。しかし、新しいコードを作成するときに、増分をどこで呼び出すべきかわかりません。(私はDjangoを使用しており、使い慣れたmodels.py、views.pyなどのレイアウトをプロジェクトのアプリケーションに合わせています。)

インクリメントコードをどこに置くかについて頭に浮かぶように思われるいくつかの可能性があります。

  1. Model.put()をオーバーロードして、モデルが初めて保存されたときにカウンターをインクリメントします。同様に、Model.delete()をオーバーロードして、カウンターをデクリメントします。

  2. ある種のリスナーを保存/削除にアタッチし、保存が新しいモデルのものであることを確認します(GAEにはそのようなリスナーがありますか?)

  3. モデルを作成/削除するview.pyの関数にカウンターインクリメントコードを配置します

私はこれを最善の方法で行う方法(および各オプションの長所/短所)についての提案や考えを強く求められます。

読んでくれてありがとう。

最高、ブライアン