2017-03-28 13 views
0

私は自分のホスティングで持っている計画では、データベースのサイズ制限がありますが、データベースの数に制限はありません。 これを解決するために、データベースを国別に分割し、各データベースの構造は同じであると考えました。 問題は、これらすべてのデータベースのデータを検索する方法です。 たとえば、各データベースにはusersテーブルを含めることができます。 問題は、これらすべてのデータベースで(たとえば)ユーザーを見つける方法です。Mysqlは複数のデータベース(同じ構造体)の値を見つける

/*This would be for one database*/ 
SELECT user_name FROM DB1.users WHERE user_name = 'my_user_name' LIMIT 1; 

(データベースの250することができます)すべてのデータベースから「my_user_name」を検索する方法はありますか? (ユーザーは一例に過ぎません。検索する値は商品、都市、座標など)

答えて

1

各データベースに別々の接続を開いて、各データベースに対してクエリを再実行する必要がありますあなた自身のコードで一緒にデータを結合してください。これは面倒なことになります。データベース名修飾子をすべて接頭辞に付けない限り、プライマリキーの衝突に関する問題に遭遇します。

あなたが使用しているどのような言語と述べていないが、擬似コードでは、それはこのようになります:

let connectionStrings: String[] { 
    "server=dbServer,database=asia", 
    "server=dbServer,database=europe", 
    "server=dbServer,database=northAmerica" 
} 

let users = new List<User>() 

foreach(connectionString in connectionStrings) { 

    let connection = new DBConnection(connectionString) 
    let reader = connection.executeQuery("SELECT * FROM Users") 
    while(reader.read()) { 

     let user = new User() { 
      userId = connection.databaseName + reader.get("userId"), 
      userName = reader.get("userName"), 
      // etc 
     } 
     users.add(user); 
    } 
} 

return users; 

あなたがしたいすべてのクエリのためにこれを繰り返します。

これは悪い考えです。データベースは安価で、ほとんどの共有ホスティングプロバイダは$ 5/mo計画でもギガバイトサイズのデータ​​ベースを提供しています。限り、彼らはあなたが、内側にはjoinコマンドを使用することができ、同じサーバーにしているよう

+0

警告のための「_thisが悪いidea_ある」感謝。 私は1GBのサイズを持っていますが、例えばgeonames.org(geonames.orgから)には約1.5-2 GBしかありません。だから私は国別に分けて、ユーザーの製品などで同じことをやろうと思った。最後には、各国に対応する参考文献だけを保存する、より少ない情報(2つの3つの列)データベース。 – MTK

1

SELECT a.userID, b.usersFirstName, b.usersLastName FROM databaseA.dbo.TableA a inner join database B.dbo.TableB b ON a.userID=b.userID

+0

データベース間の結合は一般的に高価ですが、参照整合性もありません。 – Dai

+0

これは完全に真です。最良の選択肢は、単にMTKのニーズに合ったホスティングプランを購入することですが、これはあなたの回答以外にも私が知っている唯一の選択肢です。 –

+0

ありがとうございました。 dbA0..dbA9 ... dbZ0 ... dbZ9(データベース250個)の内部ジョインを想像してみてください:私はそれが可能ではありません(または、コストは膨大です) – MTK

関連する問題