問題タブ [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.
sharding - データベースシャーディングの入門書はどこにありますか?
現在シャーディングされているデータベースがあります。シャーディングされたデータベースに出くわしたのはこれが初めてであり、それらについてもう少し知りたいと思います。
のようなもの:
- データベースをシャーディングするのはいつ良い考えですか?
- データベースをシャーディングするのは、どのデータベースサイズで行うのがよいでしょうか。
- シャーディングを削除するのはどれくらい簡単ですか?
sql - 多くのSQL接続を再作成しても大丈夫ですか(SQL 2008)
データベースへの多くの挿入を実行するとき、私は通常次のようなコードを持っています:
データベースをシャーディングしたいので、挿入するアイテムに基づいて接続文字列を選択する必要があります。これにより、私のコードはこのように実行されます
これは基本的に、アイテムごとにデータベースへの新しい接続を作成することを意味します。これは機能しますか、それとも挿入ごとに接続を再作成すると、ひどいオーバーヘッドが発生しますか?
sql - シャードテーブルを使用したデータベースの冗長性の実装
サーバーのクラスター全体でテーブルを水平方向にシャーディングすることにより、負荷分散を実装しようとしています。サーバーに障害が発生した場合にライブ冗長性を実装するためのオプションは何ですか?
1つではなく(2)INSERTを実行するのが効果的でしょうか... 1つはターゲットシャードに、もう1つはプライマリシャードが応答しない場合にアクセスできるセカンダリシャードに実行しますか?それとももっと良い方法はありますか?
ありがとう。
database - データベースシャーディングで非正規化/セカンダリインデックスをどのように処理しますか?
2つのセカンダリインデックスを持つ「メッセージ」テーブルがあるとします。
- "recipient_id"
- "sender_id"
「メッセージ」テーブルを「recipient_id」でシャーディングしたい。特定の受信者に送信されたすべてのメッセージを取得する方法では、1つのシャードにクエリを実行するだけで済みます。
しかし同時に、特定の送信者から送信されたすべてのメッセージを要求するクエリを作成できるようにしたいと思います。ここで、そのクエリを「メッセージ」テーブルのすべてのシャードに送信したくありません。これを行う1つの方法は、データを複製し、「message_by_sender」テーブルを「sender_id」でシャーディングすることです。
このアプローチの問題は、メッセージが送信されるたびに、「message」テーブルと「message_by_sender」テーブルの両方にメッセージを挿入する必要があることです。
しかし、「message」に挿入した後、「message_by_sender」への挿入が失敗した場合はどうなりますか?その場合、メッセージは「message」に存在しますが、「message_by_sender」には存在しません。
メッセージが「message」に存在する場合、2フェーズコミットに頼らずに「message_by_sender」にも存在することを確認するにはどうすればよいですか?
これは、データベースをシャーディングする人にとっては非常に一般的な問題であるに違いありません。どのように対処しますか?
image - 画像のシャーディングとブラウザキャッシュ内の複数のアイテムを回避する方法
ページのレンダリング速度を向上させるために、複数のサブドメインからの画像を提供する画像シャーディングの実装を検討しています。同じサーバーから同じ画像が取得されるようにするにはどうすればよいですか?
同じ画像が複数のドメインから提供される次のようなシナリオは避けたいです:images1.domain.com/image1.gif images2.domain.com/image2.gif images2.domain.com/image3.gif images2.domain .com / image1.gif
Javaを実行しています-イメージファイル名をチェックサム/フィンガープリントし、それに基づいて常に同じサーバーに割り当てる方法はありますか?
python - 2 つのデータベース クエリの結果を効率的に結合する方法
異なるサーバーに 2 つのテーブルがあり、データセットを組み合わせて一致させる効率的な方法を見つける手助けが必要です。次に例を示します。
ストーリーを保持するサーバー 1 から、次のようなクエリを実行します。
しかし、サーバー 2 から各 author_id に関する情報を取得したいと思います。
ここで、これら 2 つのクエリを組み合わせる方法が必要なので、ストーリー、avatar_url、member_id を含む dict を作成します。
このデータが 1 つのサーバー上にある場合、次のような単純な結合になります。
しかし、複数のサーバーにデータを保存しているため、これは不可能です。
これを行う最も効率的な方法は何ですか? 私のアプリケーション コードでマージが発生する可能性があることは理解しています... dict ループの数を最小限に抑える効率的なサンプル コードは大歓迎です!
ありがとう。
lucene - Hibernate Search を使用したカスタム Lucene シャーディング
Hibernate Searchを使用してカスタムのLuceneシャーディング/パーティション化を経験した人はいますか?
Hibernate Searchのドキュメントには、Lucene Sharding について次のように記載されています。
場合によっては、特定のエンティティ タイプのインデックス データを複数の Lucene インデックスに分割 (シャード) する必要があります。デフォルトでは、1 回の検索ですべてのシャードを開く必要があるため、検索が遅くなるため、差し迫った必要がない限り、このソリューションはお勧めしません。つまり、問題が発生するまで実行しないでください:)
Hibernate Search でシャードの 1 つをクエリのターゲットにできるような方法でシャーディングを実装した人はいますか?
この場合、クエリごとに 1 つのシャードのみを対象とする Lucene クエリがあります。
mysql - 単一のマシンからシャードされた DB を実行する
これはばかげているように聞こえますが、2 台のマシンで実行する必要がなくなったと思われるシャード DB があり、代わりに 1 台のマシンで実行したいと考えています。
それが潜在的にどのように行われるかについてのアイデアはありますか? 逆を達成する方法については多くのリソースがありますが、これを行う方法についてはほとんどありません
architecture - スケーラブルな Twitter のようなサービスを設計するには?
Twitterのアーキテクチャに関する情報を持っている人はいますか?
私が特に興味を持っているいくつかの特定のアイテム:
彼らがメッセージキューを使用していることは知っています。しかし、キューは正確には何のために使用されるのでしょうか?
彼らはつぶやきを「複製」しますか?もしそうなら、どのように?たとえば、10,000 人のフォロワーを持つユーザーが「hello world」とツイートしたとします。Twitter は "hello world" を 1 回だけ保存し、それらの 10,000 人のフォロワーのそれぞれが同じデータベース テーブルからそのツイートを読み取る必要がありますか、それとも各フォロワーが独自の "私がフォローしているツイート" データを持ち、"hello world" が 10,000 複製されますか?フォロワーごとに1回?
上記のポイントに多少関連しています: ツイートの送信者、ツイートのフォロワー、ツイート ID、ツイートの日時など、データをどのようにシャーディングするのでしょうか?
彼らがどんな技術を使っているか知っていますか?MySQL、RoR、Starling、Scala、memcached について読みました。しかし、それは少し前のことであり、情報はあまり詳細ではありませんでした。更新された情報や詳細はありますか?
database - カスタムインストールごとにデータベースを試すことができませんでした。回復する予定ですか?
現在、3年ほど本番モードになっているWebアプリケーションがあります。歴史的に、さまざまな理由により、データベースを使用することが決定されました-顧客ごとのインストール。
今、私たちは今、展開が非常に遅いという事実に出くわしました。
環境の複雑さを軽減するために、すべてのデータベースを1つに戻すことを検討する必要がありますか?それとも危険すぎる考えですか?
私が今目にしている問題は、これらのデータベースをマージして参照整合性を保存するのが非常に難しいことです(異なるデータベースのテーブルの主キーを明確に区別することはできません)。
データベースはそれほど大きくないため、複数のデータベースを使用することで負荷を軽減できるというメリットはあまりありません。