MB-Support

パソコン初心者のサポートページ

サイトのお知らせ:RSSを変更しました


サイト新着情報の要約を配信する RSS(アールエスエス:マイクロソフトでは Feeds(フィード)とも呼ばれています)の生成方法を改善しました。3 日間ほど時間が必要でしたが、以前紹介した「MySQL ポケットリファレンス」を読んだ事が、今回の改善ポイントの発見につながりました。前にも書きましたが、管理人は データベースだけを説明した参考書を所有しておらず、PHP の参考書に付録的に掲載されたデータベースの説明しか読んでいませんでした。その結果、何か情報を取得する度に、クリエが発生する状況する。個人のサイトなのでセキュリティだけ気をつければ、これでも稼働し続けられたのは事実。ところが、最近はそうもいかなくなってきました。



RSS を変更すると一時的なトラブルに巻き込まれるので、あまり手を出したくなかったのですが、購読してくれるユーザーが増えた事、それから、RSS を読み込んで自サイトに表示する(お決まりの広告を付けてまとめサイトみたいな感じ)手法が増えたので、RSS とてぞんざいにできない状況になりました。RSS リーダーに登録した場合、一定の間隔で更新を確認するためにアクセスが発生するので、RSS への問い合わせが増えてしまっている状態です。そこで、クリエを極力減少させる事になりました。



RSS を発行した当初は、一回のクリエで表示していました。ところが、ビデオページや掲示板などの機能を付加する事で、15 件の要約を表示するために、平均して 1 + 15 + 15 = 31 回ほどのクリエを発生していました。正確な数字が不明なのは、その時表示される内容により異なるからです。今回の変更で、4 〜 6 のクリエで表示できる様に変更しました。データベースのグループや結合、PHP の関数と配列を極力使い、これが可能になりました。



取得した RSS の保持数は、ブラウザや RSS リーダーにより異なるので一概に言えませんが、IE の場合は特定の件数が更新されるまで、過去のデータは重複するかも知れません。しかし、件数が多くなれば自然と解消されます。気になる場合は、一旦 RSS を削除して、再登録すれば改善されます。もちろん、再登録の場合は、過去の RSS の内容は消滅して、最新の15件だけを取得する事になります。この流れを説明すると・・・



壊れた様に見える RSS を右クリックして、コンテキストメニューの「削除(D)」をクリックします。



再び RSS にアクセスして、「このフィードを購読する」をクリックすればOKです。



改善された RSS を取得できました。件数は最新の 15 件になります。先にも書きましたが、気になる場合にこれを実行して下さい。特に何もしなくても、時間が経過すれば重複は解消されます。

さらに、RSS もサーバー側でキャッシュを利用する事にしました。RSS リーダーにより機能は異なりますが、<lastBuildDate> に最終更新日を追加すれば、更新されたか否かを RSS リーダーが判断できます。全ての RSS にこれを追加しましたが、さらにサーバー側でキャッシュ機能を有効にしました。更新するのは管理人だけなので(掲示板にコメントが投稿されても管理者が目を通してから表示されるので仕組みは同じ)、キャッシュをクリアするタイミングは当然把握しています。更新が無いのに、再取得によりクリエの発生は無駄なので、キャッシュを吐き出す事にしました。



今回の変更で重宝した SQL は、異なるデータベースでテーブルを結合する方法です。

select *
 from db1.tb1 as a,
 left join db2.tb1 as b
 on a.id=b.id
 where 条件

データベース db1 のテーブル tb1 の id カラムと、データベース db2 のテーブル tb1 の id カラムをキーに、左外部結合を実行する方法です。上の SQL 文では、二つのテーブルのカラムを全て表示する「*」になっています。左のテーブル(右のテーブルに関わらず、必ず表示される)をデータベース名(db1)から指定します。テーブル名は tb1 とします。これを毎回入力するのは面倒なので、a に省略しました(db1.tb1 as a)。次に、左外部結合の left join を入力して、外部結合するテーブルを入力しますが、ここでもデータベース名(tb2)から指定して、名称を b に省略しました(db2.tb1 as b)。あとは、キーとなるカラムを指定します。a.id は、データベース名(db1)、テーブル名(tb1)の カラム id を意味して、b.id はデータベース名(db2)、テーブル名(tb1)の カラム id を意味します。異なるデータベースの二つのテーブルのカラム id をキーに設定しました。抽出する条件があるならば、Where の後に入力します。

もともと結合する事を前提にテーブルを作成していない場合、カラムが重複してサーバーサイドスクリプトで取り出すのが面倒になります。そんな時は、取得するカラムを指定して、さらに名称を変更します。例えば、基準となるテーブル tb1 は全てのカラムを取得して、db2.tb1 は特定のカラムだけを取得する場合。

select a.*,b.id as 'b_id',b.item as 'b_item'
 from db1.tb1 as a,
 left join db2.tb1 as b
 on a.id=b.id
 where a.item like 'CPU%' order by day limit 15

db1.tb1 の全てのカラムを取得するのは、a.* とします。from の後に、db1.tb1 as a と指定したので、a は db1.tb1 だと分かります。db2.tb1 は、id 、item の二つのカラムだけ取得するとします。さらに、この二つのカラム名は、db1.tb1 と重複しているとします。この場合、名称を変更して取得すれば問題が解決します。db2.tb1 の id は b_id(b.id as 'b_id')に、db2.tb1 の item は b_item(b.item as 'b_item')に変更してみました。さらに、db1.tb1 の item に CPU から始まる文字だけを 15 件取得する場合、where a.item like 'CPU%' order by day limit 15 とします。

このやり方なら、結合する事を前提に作成されていないテーブルや、異なるデータベースのテーブルでも、外部結合が可能になり、必要な情報を結びつけて一度のクリエで多くの情報を取得できます。しかしながら、これらの変更が効いてくるのは、RSS ではなく、日記や掲示板かと思います。やり方が分かったので改善する事はできますが、これには地道な作業と時間が必要です。もうしばらくお待ち下さい。





BTOパソコン・ゲームPC・自作パソコンなら【TSUKUMO】 - 自作PCに必要なパーツ、豊富な品揃え

Copyright © 2017 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人サイト閲覧方法プライバシーポリシー著作権/免責事項