วิธีการใช้ฐานข้อมูลเป็น slow_backend แทนที่จะเป็นไฟล์ใน Magento EE 1.12


14

ในวีโอไอพี EE 1.12.0.0 มันจะดูเหมือนว่าไม่ว่าสิ่งกำหนดค่าการเปลี่ยนแปลงฉันจะทำให้ไม่มีapp/etc/local.xmlแคชแฟ้มเริ่มต้นยังคงถูกนำมาใช้ (ซึ่งเป็นหลักฐานด้วยvar/cache/เสมอกรอก)

ความคาดหวัง

  • Memcached ใช้เป็น fast_backend
  • ฐานข้อมูลถูกใช้เป็น slow_backend
  • ไฟล์แคชไม่ได้ใช้เลย (เช่นvar/cache/ควรว่างเสมอ)

เอาต์พุตที่แท้จริง

  • Memcached ใช้เป็น fast_backend
  • ฐานข้อมูลไม่ได้ใช้เลย
  • กำลังใช้แคชไฟล์

ขั้นตอนการทดสอบ

  1. app/etc/local.xmlทำให้เกิดการเปลี่ยนแปลงการกำหนดค่า
  2. รีสตาร์ท Memcached และ Apache (สำหรับการวัดที่ดีและมันอยู่ในกล่อง dev ท้องถิ่นของฉันดังนั้นฉันอาจจะเช่นกัน)
  3. ล้างแคชไฟล์ ( rm -rf var/cache/*)
  4. รีเฟรชหน้าแรก
  5. ตรวจสอบเนื้อหาของไฟล์แคช ( ls var/cache)
  6. กลายเป็นเศร้าและกลับไปที่ # 1 ด้วยการเปลี่ยนแปลงการกำหนดค่าที่แตกต่างกัน

การกำหนดค่า

เนื้อหาของฉันapp/etc/local.xmlเป็นดังนี้:

<config>
    <global>
        <install>
            <date><![CDATA[{{actual_data}}]]></date>
        </install>
        <crypt>
            <key><![CDATA[{{actual_data}}]]></key>
        </crypt>
        <disable_local_modules>false</disable_local_modules>
        <resources>
            <db>
                <table_prefix><![CDATA[]]></table_prefix>
            </db>
            <default_setup>
                <connection>
                    <host><![CDATA[{{actual_data}}]]></host>
                    <username><![CDATA[{{actual_data}}]]></username>
                    <password><![CDATA[{{actual_data}}]]></password>
                    <dbname><![CDATA[{{actual_data}}]]></dbname>
                    <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                    <model><![CDATA[mysql4]]></model>
                    <type><![CDATA[pdo_mysql]]></type>
                    <pdoType><![CDATA[]]></pdoType>
                    <active>1</active>
                </connection>
            </default_setup>
        </resources>
        <session_save><![CDATA[db]]></session_save>
        <cache>memcached</cache>
        <slow_backend>database</slow_backend>
        <slow_backend_store_data>1</slow_backend_store_data>
        <memcached>
            <servers>
                <server>
                    <host><![CDATA[{{actual_data}}]]></host>
                    <port><![CDATA[{{actual_data}}]]></port>
                    <persistent><![CDATA[0]]></persistent>
                    <weight><![CDATA[2]]></weight>
                    <timeout><![CDATA[10]]></timeout>
                    <retry_interval><![CDATA[10]]></retry_interval>
                    <status><![CDATA[]]></status>
                </server>
            </servers>
            <compression><![CDATA[0]]></compression>
            <cache_dir><![CDATA[]]></cache_dir>
            <hashed_directory_level><![CDATA[]]></hashed_directory_level>
            <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
            <file_name_prefix><![CDATA[]]></file_name_prefix>
        </memcached>
    </global>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[admin]]></frontName>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

1
การอ่านที่จำเป็นต้องใช้: TwoLevels Cache Backend Mess ของ Magento / Zend Framework
benmarks

ฉันไม่เคยพบวิธีแก้ปัญหานี้ อย่างไรก็ตามเนื่องจากฉันได้ทำงานในโครงการวีโอไอพีเพิ่มเติมภายใต้การจ้างงานของ บริษัท อื่นและได้ใช้การกำหนดค่าที่คล้ายกับที่อธิบายไว้ที่นี่ฉันมีแนวโน้มที่จะเชื่อว่ามันเป็นปัญหาของหนึ่งใน: 1. การติดตั้งวีโอไอพี การปรับเปลี่ยน / โมดูล / ฯลฯ ) 2. สคริปต์การจัดเตรียมของ บริษัท สำหรับเซิร์ฟเวอร์ของพวกเขาได้รับการดัดแปลงมาไม่ดีจาก Drupal และมีบางอย่างที่พลาดไป 3. การกระทำของพระเจ้า / ธรรมชาติ 4. (น่าเป็นไปได้) มันเป็นวีโอไอพี ช่วยชาว Google ดังนั้นเขาจึงได้รับรางวัล!
Robr3rd

คำตอบ:


5

ฉันคิดว่านั่นไม่ใช่รูปแบบที่เหมาะสมสำหรับโหนดแคช ความเข้าใจของฉันคือการตั้งค่าแคชทั้งหมดควรจะซ้อนอยู่ภายใน<cache>โหนด เพื่อใช้แคชสองระดับกับฐานข้อมูล memcached + มันจะเป็นดังนี้:

<cache>
    <backend>memcached</backend>
    <slow_backend>database</slow_backend>
    <memcached>
        <servers>
            <server1>
                <host>...</host>
                <port>11211</port>
                <persistent>1</persistent>
                <weight>2</weight>
                <timeout>10</timeout>
                <retry_interval>10</retry_interval>
                <status/>
            </server1>
            ...
        </servers>
        <compression>0</compression>
        <cache_dir/>
        <hashed_directory_level/>
        <hashed_directory_umask/>
        <file_name_prefix/>
    </memcached>
</cache>

จำไว้ว่า<full_page_cache>สามารถกำหนดค่าได้ในลักษณะเดียวกันและสามารถใช้การตั้งค่าที่แตกต่างได้หากคุณต้องการ มันเป็นเพียงอินสแตนซ์แคชแยกกันสองตัว

ฉันขอแนะนำให้ใช้ Redisแทน รองรับแท็กดังนั้นจึงสามารถใช้เป็นแคชระดับเดียวและจะทำงานได้ดีกว่าฐานข้อมูล memcached + สองระดับ


3
ฉันสนับสนุน Redis เป็นที่สอง แบ็กเอนด์ db ช้าทำให้เกิดอันตรายมากกว่าที่จะช่วย
philwinkle

ฉันได้ลองใช้การกำหนดค่านั้น (จริง ๆ แล้วสิ่งที่ฉันเริ่มต้นด้วย - สิ่งที่ฉันโพสต์แนะนำเป็นทางเลือกเนื่องจากสิ่งที่กล่าวมาไม่ได้ทำงาน) จะ<full_page_cache>อาจจะเติมvar/cache ? var/full_page_cacheมันเป็นความเข้าใจของฉันว่ามันแทนที่จะใช้ ฉันได้ลองใช้แบบเดียวกัน<cache>...</cache>(สไตล์ของคุณ) สำหรับ<full_page_cache>และenterprise.xmlไม่มีประโยชน์ เท่าที่ Redis ดำเนินไปโชคไม่ดีที่ใช้แบ็กเอนด์ DB เป็นข้อกำหนด
Robr3rd

<cache>...<servers>...<server1>...</server1>ผมเพิ่งสังเกตเห็นว่าคุณมี คือ1ในserver1ความสำคัญ?
Robr3rd

@RobertRobinson - ไม่ไม่สำคัญเลยยกเว้นเป็นวิธีการกำหนดหลายโหนดภายใต้ <servers>ไม่สำคัญที่ทุกคนยกเว้นตามวิธีการกำหนดโหนดหลายภายใต้ คุณสามารถใช้ foo, bar, baz ได้อย่างง่ายดายเช่นเดียวกับ server1, server2, server3 คุณถูกต้องว่าfull_page_cacheอินสแตนซ์ได้รับไดเรกทอรีย่อยของตัวเองภายใต้varถ้ามันกำลังใช้ไฟล์
Fantasticrice

@RobertRobinson - คุณอาจจะสนใจในการขยายนี้เพื่อดูสถานะของการตั้งค่าของวีโอไอพี
fantasticrice
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.