同じスキーマで何千ものMySQLデータベースを照会する

私は過去数ヶ月間頭を悩ませている問題があります。私はすべて同じスキーマを使用して、同じサーバー上にある数万のMySQLデータベースを持っています。私はそれらのすべてを照会して結果のリストを得ることができるようにしたい。現在、PHPスクリプトを使用してすべてのデータベースをループし、それぞれのデータベースでクエリを実行しています。場合によっては非常に長い時間(10分以上)かかることがありますので、明らかに最善の解決策ではありません。

ここに私がしたいことの例があります:

何かを選択します。db_prefix _ *。tablename where something = 1;

...結果の1つのセットを返すようにします.db_prefix_ *はデータベースの名前です。

このようなことが存在するのか、私は夢を見ているのでしょうか?

これらのデータベースを複数のサーバーに移動するので、この問題はより複雑になるかもしれませんが、そこに着くとその道を渡ります。

0
そのようなことはありません.DBを1つの大きなDBにまとめるのはどうですか?
追加された 著者 Yahia,
私は、必要な関連データを更新して同期させる補助データベースを作成するというアイデアを思いついたので、個別にヒットする必要があるデータベースを正確に把握することができます。これは最も魅力的な選択肢のように見え始めていますが、そのようなデータを複製すると、最も優雅な(またはリアルタイムの)解決策ではないように感じられます。
追加された 著者 Brian Herbert,

4 答え

なぜデータベースを永久にマージせず、元のデータベースが何であったかを示す追加の列を追加するだけです。私は、それらのデータ・データが何らかの意味を持っていたとしたら、あなたが非常に多くのデータベースを持つ理由を理解していません。必要に応じて、そのように拡張可能な別のデータベースを検討してください。

1
追加された

これはあなたが探しているものですか?

DECLARE @sqlQuery nvarchar(MAX)
SET @sqlQuery=''
select @[email protected]+'select something from '+ SCHEMA_NAME  +'.tableName' from INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME LIKE 'db_prefix_%'
print @sqlQuery
EXEC sp_executeSQL @sqlQuery

私はSQLサーバーのバックグラウンドから来て、私がここに何かが間違っている場合は、私を修正してくださいMySQLを翻訳するために最善を尽くしました。

1
追加された
"私は同じサーバー上に何万ものMySQLデータベースを持っています"
追加された 著者 Baz1nga,
それから私は誤解した。
追加された 著者 Konerak,

Parallel :: ForkManager は、perlのための "単純な並列処理フォークマネージャ"を提供しています。

クエリの重要度に基づいてプロセスの最大数を上下に変更することもできますし、nice/ioniceを使用してサーバーに過大な負荷がかからないようにすることもできます。

0.7.6以降のバージョンを使用している限り、データ構造を親プロセスに戻すことができます。これにより、結果を後処理することができます(例えば要約を表示するなど)。

0
追加された

短い答えはいいえです。すべてのPHP mysqlドライバ(afaik)は、すでに反復処理を行っているので、データベースへの接続を独立して扱います。必要な構文を許可するドライバがあったとしても、MySQL自体のために、あるレベルでデータベースごとに新しい接続を作成していることは間違いありません。

長い答えは「はい」です。複数のデータベースにインデックスを作成できます。複数のDBにまたがって同じスキーマを使用することは本質的にシャーディングなので、これは既知の問題です(プライマリキーの非一意性が問題になるかもしれません)。複数のデータベースにわたって something に索引を作成すると、特に索引付けされたフィールドの値のみが必要な場合は、リアルタイムのパフォーマンスを得ることができます。 Twitterのレポートは早い段階でmysqlテーブルのインデックスを使って成功しています(http://engineering.twitter.com/2011/05/engineering-behind-twitters-new-search.html)ので、先例があります。シャーリングMySQLコミュニティは、PHPコミュニティ(http://planet.mysql.com/?tag_search=2013)よりもRailsコミュニティ内で生産性が高く(おそらく)、そこにいくつかのポインタがあるかもしれません。

最近同様の規模の問題に直面して、我々は単にMongoに船を飛ばした。

0
追加された