0

私のメイン ストレージは MySQL ですが、本のタイトルと ID が保存されているリモートの MSSQL Serverを使用する必要があります。そのリモート MSSQL サーバーへの読み取り専用アクセス権があります。他のすべてのデータ (本の著者、出版年、説明など) は、ローカルの MySQL データベースに保存されています。ローカル MySQL にタイトルを保存できません (契約条件です)。私の PHP フレームワークでは、これらの本に説明やその他の多くのデータを追加できます。すべてのデータは MySQL に保存されています。

全体として、私はこのフレームワークの開発に問題はありませんが、1 つの弱点があります。その場合、検索を整理する方法について専門家のアドバイスが必要です。私は2つの異なるデータベースを使用しているため、単純な結合などは使用できません。もちろん、2 段階の検索を行うこともできます。1) タイトルを取得し、2) その他のものを取得し、PHP で結果を作成します。しかし、私はそれが非常に遅くなる可能性があることを恐れています. MySQLの一時テーブルでMSSQLからタイトルを選択する方法はありますか? それとも、そのようなデータベース連携のための優れた技術を見逃しているのでしょうか? どんな考えでも大歓迎です!

4

1 に答える 1

2

MySQL は MSSQL について何も知らないため、2 つの異なる種類のデータベース サーバーにまたがって参加することはできません。ただし、あなたの構造は、あなたが説明するものに対してそれほど悪くはありません。1) タイトルのみを検索する、2) タイトルとその他の情報を検索する、3) 他の情報のみを検索する、の 3 つの検索シナリオが考えられます。問題はケース 2 で、ケース 1 と 3 はどちらも簡単です。

あなたが言及したように、私がそれにアプローチする方法は、次のような2段階のプロセスです。

1) 検索クエリを取得する

2) 一致する可能性のあるタイトルの MSSQL 結果を取得する

3) a) タイトルの結果を一時テーブルに書き込むか、b) メモリ構造に保存します (検索結果のスコアリングに何を使用しているかによって異なります - MySQL 全文検索を使用している場合は、一時テーブルに書き込む必要があります)。

4a) タイトルが一時テーブルにある場合は、結合されたテーブルで検索を実行します

4b) タイトルがメモリ内にある場合は、必要に応じて他の書籍情報を検索し、メモリ内のデータを結合します。

タイトルをローカルに保存しないという制限により、パフォーマンスの問題が発生する可能性がありますが、クエリの数を最小限に抑えることは役に立ちます。

PSあなたの契約は正確に何と言っていますか? 本のタイトルをメモリに保存できますか? それとも、常にリモート サーバーに対してクエリを実行する必要がありますか? それらをメモリに保存できる場合は、MSSQL データベースにクエリを実行して、タイトルを MySQL メモリ テーブル ( http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html)、サーバーがシャットダウンするとメモリから消えます。

于 2013-01-29T19:20:21.150 に答える