なぜget.phpや `core / file_storage_database`が作成されたのですか?


12

バージョン1.5または1.6前後から、Magentoのルートフォルダにという名前のファイルがありましたget.phpcore/file_storage_dataモデルを使用するこのファイルを使用すると、Magentoシステムの所有者は、ファイルシステムにイメージファイルがなくても、データベースのblob列から直接製品メディアファイルを提供できます。PHPはファイルの送信を処理します

#File: get.php
function sendFile($file)
{
    if (file_exists($file) || is_readable($file)) {
        $transfer = new Varien_File_Transfer_Adapter_Http();
        $transfer->send($file);
        exit;
    }
}

これは、Magentoの歴史的領域に向かっていますが、なぜこの機能が開発されたのですか?どうやら-少し狂っています。PHPはファイルを提供するための最も効率的な方法ではありませんが、MySQLのBLOBストレージが不安定であることの歴史があり、さらに安定したデータベースブロブの実装では、との仕事に背後の痛みで、私が見ることができるものからVarien_File_Transfer_Adapter_Http追加していませんこれらのファイルへのキャッシュヘッダー。

Magentoがこの機能を開発した理由を知っている人はいますか?それは実際に解決するために設定した目標/問題を達成しますか?誰かがそれを使用していますか?

回答:


12

この機能の元のSRSを実際に見つけたので、歴史的な目的でここで共有できます。

現在、メディアを保存する他のオプションはありませんが、Webサーバーのファイルシステムにあります。実行中のシステムのインスタンスが1つだけで、データベースがシステムインスタンスと同じサーバーにある場合、このアプローチは十分です。

ただし、システム展開の最も可能性の高い方法は同じではありません。顧客は、異なるサーバーにシステムの複数のインスタンスを展開しているため、同期が必要です。そのため、オプションとして画像を保存する2つの異なるオプション、データベースとCDN(コンテンツ配信ネットワーク)を開発する必要があります。

代替メディアストレージとしてのCDNは、特定のCDNとの完全な統合としてではなく、サポートオプションとしてのみシステムに実装されます。管理者は、CDNを自分で選択して構成するとともに、システム構成を少し変更する必要があります。

ユースケースを貼り付けませんが、CDNについては、イメージ/スキンのベースURLをCDN urlに変更するだけです(PULL CDNが必要だと思います)


3

私はそれを広範囲にテストしたことも本番環境で使用したこともありませんが、Elastic Beanstalk + Magentoガイドに使用しました。利点は、何も共有しないWebノードクラスターです。イメージファイルは、adminを介してアップロードされるとDBバックエンドに保存され、そこから最初に(そして理想的にはその後CDNから)提供されます。つまり、メディアを共有するためにNFSを避ける​​ことができます。


2

ここでの私の推測は、それがクラスター環境向けであることです。1つのdbノードを持つ複数のwebnode。セッション/キャッシュがdb(または他のノード)にもある場合、webnodeは読み取り専用になり、新しいwebnodeを起動するたびにメディアを同期する必要はありません。

全体として、解決すべき問題を探している工学的ソリューションのように見えることに同意します。


2

(他の人が言及しているように)複数のWebノードを持つスタックがNFSマウントを処理せずに単一の信頼できるイメージのソースを持つ方法を提供するため、Magento内でこれを見るのはかなり嬉しかったです。

あなたが私のような人で、ロードバランサーの内外でウェブノードを交換してデプロイを実行する場合(AWS起動構成/ Auto Scalingグループの使用など)、これは実際には非常に健全です。

通常、さまざまな理由でDBにイメージを配置することを避けたいと考えていますが、このプロセスが(基本的に)動作する方法は、イメージがDBからローカルファイルシステムにプルされ、その後のリクエストのためにそこから提供されることです。

さらに一歩進んで(ファイルシステムから画像を参照/参照する要求がさらに少なくなるように)CDNを使用し、Webサイトをオリジンとして設定し、他の人が説明するようにメディアURLを変更することをお勧めします。

ちなみに、ほとんどのMySQL構成には、DBに許可されるデータ転送のサイズを制限する非常に低い「max_allowed_pa​​cket」値があります。DBに画像を保存することを計画している場合は、足元で自分自身を撮影しないように、それを確認することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.