1

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

应该如何处理?将这些数据导入/存储在所有三个数据库中?如果没有,有什么策略可以在多个数据库中共享这些数据以使用这些数据?


附加(背景)信息:

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

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

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

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

4

2 回答 2

2

在仅 MySQL 的上下文中,解决方案很简单:将数据存储在不同的数据库(或更准确地说是“模式”)中,并以与在单个数据库中相同的方式使用它。由于在 MySQL 中,可以跨模式构建CONSTRAINTs 和JOINs,只需使用通用语法并添加模式 nam 来分隔表:

外键

-- 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;

加入

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

它甚至不应该有任何性能劣势,只要所有数据库都存储在同一台机器上。

于 2014-05-19T11:43:56.447 回答
0

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

于 2014-05-20T02:50:23.473 回答