【问题标题】:Mysql find value in multiple database (same structure)Mysql在多个数据库中查找值(相同的结构)
【发布时间】:2017-03-28 20:47:55
【问题描述】:

根据我的托管计划,我有数据库的大小限制,但我没有数据库数量的限制。 为了解决这个问题,我曾考虑将我的数据库按国家划分,每个数据库都具有相同的结构。 问题是如何在所有这些数据库中查找数据。 例如,每个数据库都可以有一个用户表。 问题是如何在所有这些数据库中找到一个用户(例如)。 (可以是 250 个数据库)

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

有没有办法从所有数据库中搜索“my_user_name”? (用户只是一个例子……搜索的值可以是产品、城市、坐标等)

【问题讨论】:

    标签: mysql database


    【解决方案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 美元的计划中也提供千兆字节大小的数据库。

    【讨论】:

    • "这是个坏主意" 感谢您的警告。我有 1GB 的限制大小,但例如只有 geonames DB(来自 geonames.org)有大约 1.5-2 GB。所以我把它按国家划分,并考虑对用户产品等做同样的事情。我认为最后我会做一个信息较少的通用数据库(两三列),我将只保存与每个国家对应的参考资料数据库。
    【解决方案2】:

    只要它们在同一台服务器上,您就可以使用内部连接命令:

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

    【讨论】:

    • 跨数据库连接通常很昂贵,而且也没有参照完整性。
    • 这完全正确。最好的选择是简单地购买适合 MTK 需求的托管计划,但这是除了您的回复之外我知道的唯一选择。
    • 好的,谢谢。我知道我正在寻找它不可能(或者如果是,成本是巨大的)想象 dbA0..dbA9 ... dbZ0 ... dbZ9(250 个数据库)的内部连接:D
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2013-03-24
    • 2014-03-30
    相关资源
    最近更新 更多