かなり単純なPHP WebサイトのXMLデータレイヤーの作成方法については、私は疑問に思っていました。その理由は次のとおりです。PHPアプリケーション用のデータレイヤーとしてのXML
- dbサーバーが利用できません。
- xmlで表現できるシンプルなデータスキーマ。
- 私は、サーバーに依存しない自己完結型のアプリケーションを持っているというアイデアが気に入っています。
- 私は、他のプロジェクトで再利用するために小さなフレームワークに抽象化したいと考えています。
スキーマは、いくつかのルックアップテーブルとi18nを持つ簡単なブックカタログに似ています。だから、表現するのは簡単です。
メインxmlファイルのサイズは、100kbから15mbの範囲です。しかし、それはある時点で約100MBまで成長する可能性がある。
実際には、xmlデータを処理するためにモデルクラスを拡張することを検討しています。 は現在、私はこのように、XMLReaderをとのSimpleXMLの組み合わせでデータをフェッチ:
public function find($xpath){
while($this->xml_reader->read()){
if($this->xml_reader->nodeType===XMLREADER::ELEMENT &&
$this->xml_reader->localName == 'book'){
$node = $this->xml_reader->expand();
$dom = new DOMDocument();
$n = $dom->importNode($node, true);
$dom->appendChild($n);
$sx = simplexml_import_dom($n);
// xpath returns an array
$res = $sx->xpath($xpath);
if(isset($res[0]) && $res[0]){
$this->results[] = $res;
}
}
return $this->results;
}
ので、代わりにメモリ内の全体のxmlファイルをロードする、私は各セクションのSimpleXMLオブジェクトを作成し、その上でXPathクエリを実行しますオブジェクト。この関数は、SimpleXmlオブジェクトの配列を返します。保守的な検索のために、私はおそらく最初に見つかったアイテムを破るだろう。
私が聞いている質問は以下のとおりです。
- は、あなたも、大規模なデータストアへのメディアのために、実行可能な解決策として、これを考えるだろうか?
- PHPでXMLを処理する際に注意すべき点やパターンがありますか?
- 上記のコードは、大容量ファイル(100MB)に対応していますか?
- 大きなxmlファイルへの挿入や更新は、オーバーヘッドの少ない方法で処理できますか?
- より良い選択肢として代替データ形式を提案しますか?
のXPathでXMLライブラリを使用して、あなた自身を書いていない、とあなたはちょうどあなたを読んでいる場合は、いくつかのXMLファイルを使用し、ハッシュとしてそれらにアクセスし、あなたは大丈夫、と –
大丈夫ですデータを更新するのは苦しい(パフォーマンス上の)作業です –