1

地理データなど、同じデータを必要とする 3 つの MySQL ベースの Web アプリケーションがあります。このデータは論理的にアプリケーションのデータの一部ではありません。さらに、これは外部データであり、通常は独立したデータベースです。

これをどのように処理する必要がありますか?このデータを 3 つのデータベースすべてにインポート/保存しますか? そうでない場合、複数のデータベースでこのデータを使用するために、このデータを共有するにはどのような戦略がありますか?


追加 (背景) 情報:

しばらく前に、スポーツ コースを管理するための Web アプリケーションを作成しました。citiesこのデータベースには、列idを持つ非常に単純なテーブルとname、手動で挿入された約 20 の都市も含まれています。

現在、別の 2 つのアプリを作成しています (スポーツ パートナーの検索と Web サイト上の広告の管理用)。どちらも地理情報、特に都市も必要です。

しかし、今回はプロの地理データが必要です。OpenGeoDBを選択しました。

そのため、地理データをどのように保存/管理し、これを 3 つのアプリケーションすべてで使用するかを決定する必要があります。

4

2 に答える 2

2

MySQL のみのコンテキストでは、解決策は簡単です。異なるデータベース(より正確には「スキーマ」)にデータを格納し、単一のデータベースと同じように使用します。MySQL では、共通構文を使用し、スキーマ nam を追加してテーブルを指定するだけで、複数のスキーマにわたってCONSTRAINTs およびsを構築することが可能です。JOIN

外部キー

-- 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 に答える