是否有意义/如何在(MySQL)数据库之间共享数据?

时间:2014-05-19 10:34:03

标签: mysql database relational-database data-storage data-sharing

有三个基于MySQL的Web应用程序需要相同的数据,例如:地理数据。这个数据在逻辑上不是应用程序的一部分。数据。甚至超过这个 - 它的外部数据,通常是一个独立的数据库。

如何处理这个问题?将此数据导入/存储在所有三个数据库中?如果没有,有什么策略可以在多个数据库之间共享这些数据?


其他(背景)信息:

前段时间我写了一个用于管理体育课程的网络应用程序。此数据库还包含一个非常简单的表cities,其中包含idname列以及大约20个手动插入的城市。

现在,我正在构建另外两个应用程序(用于体育合作伙伴搜索和管理网站上的广告)。两者都需要地理信息,特别是城市。

但这次我需要专业的地理数据。我选择了OpenGeoDB

因此,我必须做出决定,如何存储/管理地理数据并在所有三个应用程序中使用它。

2 个答案:

答案 0 :(得分:1)

在仅限MySQL的环境中,解决方案很简单:将数据存储在不同的数据库中(或更正确地"架构")并以相同的方式使用它在单个数据库中。因为在MySQL中,可以在模式中构建CONSTRAINTJOIN,只需使用comon语法并添加模式nam来扩展表:

FOREIGN KEY

-- Schema schema_a
CREATE TABLE parent (
    id INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=INNODB;

-- Schema schema_b
CREATE TABLE child (
    id INT, 
    parent_id INT,
    INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id) 
        REFERENCES schema_a.parent(id)
        ON DELETE CASCADE
) ENGINE=INNODB;

JOIN

SELECT
    *
FROM
    schema_b.child
JOIN
    schema_a.parent ON schema_b.child.parent_id = schema_a.parent.id
;

甚至should not have any porformance disadvantages,只要所有数据库都存储在同一台机器上。

答案 1 :(得分:0)

如果由于性能原因需要单独的MySQL服务器,那么我建议将数据(通过mysqldump或LOAD FROM INFILE)加载到每个数据库。原因是a)你不会重载单个GEO数据库,b)你可以在每个MySQL服务器上本地加入它(如其他答案所示)。这应该非常快,而且由于GEO数据不会改变(或者不经常),因此脚本和管理非常容易。