有三个基于MySQL的Web应用程序需要相同的数据,例如:地理数据。这个数据在逻辑上不是应用程序的一部分。数据。甚至超过这个 - 它的外部数据,通常是一个独立的数据库。
如何处理这个问题?将此数据导入/存储在所有三个数据库中?如果没有,有什么策略可以在多个数据库之间共享这些数据?
其他(背景)信息:
前段时间我写了一个用于管理体育课程的网络应用程序。此数据库还包含一个非常简单的表cities
,其中包含id
和name
列以及大约20个手动插入的城市。
现在,我正在构建另外两个应用程序(用于体育合作伙伴搜索和管理网站上的广告)。两者都需要地理信息,特别是城市。
但这次我需要专业的地理数据。我选择了OpenGeoDB。
因此,我必须做出决定,如何存储/管理地理数据并在所有三个应用程序中使用它。
答案 0 :(得分:1)
在仅限MySQL的环境中,解决方案很简单:将数据存储在不同的数据库中(或更正确地"架构")并以相同的方式使用它在单个数据库中。因为在MySQL中,可以在模式中构建CONSTRAINT
和JOIN
,只需使用comon语法并添加模式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
;
甚至should not have any porformance disadvantages,只要所有数据库都存储在同一台机器上。
答案 1 :(得分:0)
如果由于性能原因需要单独的MySQL服务器,那么我建议将数据(通过mysqldump或LOAD FROM INFILE)加载到每个数据库。原因是a)你不会重载单个GEO数据库,b)你可以在每个MySQL服务器上本地加入它(如其他答案所示)。这应该非常快,而且由于GEO数据不会改变(或者不经常),因此脚本和管理非常容易。