การผสานรวม Magento กับ Cloud Spanner

1. บทนำ

424db48d9db91638.png

การผสานรวม Magento กับแบ็กเอนด์ Cloud Spanner

Magento เป็นแพลตฟอร์มอีคอมเมิร์ซโอเพนซอร์สที่ใช้ PHP ซึ่งได้รับความนิยมอย่างกว้างขวางและจัดเก็บข้อมูลใน MySQL

Codelab นี้เป็นการพิสูจน์แนวคิดในการใช้ประโยชน์จาก Cloud Spanner แทน MySQL สำหรับโมดูลแคตตาล็อก ซึ่งมีประโยชน์สำหรับผู้ที่สนใจผสานรวม ทดสอบ และติดตั้งใช้งาน Magento หรือแอปพลิเคชัน PHP อื่นๆ กับ Spanner

Spanner คือฐานข้อมูลแบบกระจายที่มีการจัดการครบวงจรในระดับองค์กรและมีความสม่ำเสมอของ Google Cloud ซึ่งรวมข้อดีของโมเดลฐานข้อมูลเชิงสัมพันธ์เข้ากับการปรับขนาดในแนวนอนแบบไม่ใช่เชิงสัมพันธ์ ออกแบบมาเพื่อรองรับการติดตั้งใช้งานการประมวลผลธุรกรรมออนไลน์ทั่วโลก, ความหมายของ SQL, การปรับขนาดแนวนอนที่มีความพร้อมใช้งานสูง และความสอดคล้องของการดำเนินการ Spanner สามารถจัดการข้อมูลปริมาณมากได้ การใช้งานไม่ได้จำกัดเฉพาะแอปพลิเคชันขนาดใหญ่ แต่ยังช่วยให้การปรับมาตรฐานเครื่องมือฐานข้อมูลเดียวสำหรับภาระงานทั้งหมดที่ต้องใช้ RDBMS Spanner มีเวลาหยุดทำงานเป็น 0 สำหรับการบำรุงรักษาที่วางแผนไว้หรือความล้มเหลวของภูมิภาค โดยมี SLA ความพร้อมใช้งานที่ 99.999% โดยรองรับแอปพลิเคชันสมัยใหม่ด้วยการมอบความพร้อมใช้งานและความสามารถในการปรับขนาดสูง

สิ่งที่คุณจะได้เรียนรู้

  • วิธีติดตั้ง Magento ใน GCE
  • วิธีตั้งค่าโปรแกรมจำลอง Spanner
  • วิธีย้ายข้อมูลสคีมา MySQL ที่มีอยู่ไปยัง Spanner โดยใช้ HarbourBridge
  • สิ่งที่คุณต้องเปลี่ยนแปลงเพื่อผสานรวมแอปพลิเคชัน PHP เช่น Magento ที่ใช้ MySQL สำหรับแบ็กเอนด์ฐานข้อมูลให้ทำงานร่วมกับ Spanner

สิ่งที่คุณจะสร้าง

Codelab นี้มุ่งเน้นที่การผสานรวม Magento กับ Spanner เราจะให้บล็อกโค้ดและวิธีการตั้งค่าเพื่อให้คุณคัดลอกและวางได้ แต่จะไม่กล่าวถึงรายละเอียด

ใน Codelab นี้ คุณจะได้เริ่มผสานรวม Magento กับ Spanner คุณจะได้รับสิ่งต่อไปนี้

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud ที่เชื่อมต่อกับบัญชีสำหรับการเรียกเก็บเงิน
  • ความรู้ด้านการกำหนดค่า PHP, Linux และ Apache จะเป็นประโยชน์
  • ประสบการณ์การใช้งาน Magento จะเป็นประโยชน์ แต่ไม่จำเป็น

2. การเตรียมอินสแตนซ์ GCE

สร้างอินสแตนซ์ GCE

สร้างอินสแตนซ์ Compute Engine ใน Google Cloud Platform โดยทำตามขั้นตอนที่ระบุที่นี่

เมื่อสร้างอินสแตนซ์ GCE ให้เปลี่ยนประเภทอินสแตนซ์เป็น e2-standard-2 และขนาดดิสก์บูตเป็น 20 GB คุณสามารถปล่อยให้ทุกอย่างเป็นค่าเริ่มต้นได้ แต่ต้องเลือก "อนุญาตการรับส่งข้อมูล HTTP" และ "อนุญาตการรับส่งข้อมูล HTTPS" เนื่องจากเราจะใช้ประโยชน์จากอินเทอร์เฟซเว็บของ Magento

ซึ่งจะส่งผลให้มีประเภทเครื่องเป็น e2-standard-2 ซึ่งไม่ใช่อินสแตนซ์แบบแกนประมวลผลร่วม และมี 2 vCPU, RAM 8 GB และพื้นที่ดิสก์ 20 GB

ระบบปฏิบัติการคือ Debian 10 การสร้างอินสแตนซ์อาจใช้เวลา 1-2 นาที

เมื่อสร้างแล้ว ให้เข้าสู่ระบบโดยคลิก "SSH" ใน Cloud Console

4bf915ef8d37c942.png

ซึ่งจะเป็นการเปิดหน้าต่างเบราว์เซอร์ใหม่และนำคุณไปยังเทอร์มินัล

ติดตั้งซอฟต์แวร์ที่จำเป็น

คุณจะต้องติดตั้งซอฟต์แวร์ที่จำเป็นบางอย่างก่อนเราจึงจะเรียกใช้ Magento ได้ โดยคุณจะติดตั้ง PHP, Elastic, MySQL และ Apache ตามรายละเอียดด้านล่าง

  1. ติดตั้งแพ็กเกจที่จำเป็น
sudo apt update

sudo apt -y install lsb-release apt-transport-https ca-certificates wget git screen composer google-cloud-sdk-spanner-emulator gcc
  1. ติดตั้งโมดูล PHP ที่จำเป็นสำหรับ Magento
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update

sudo apt -y install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip php7.4-bcmath php7.4-soap php7.4-grpc
  1. ติดตั้ง Elasticsearch และเริ่มบริการ
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

sudo apt update && sudo apt -y install elasticsearch

echo "-Xms1g
-Xmx1g" | sudo tee /etc/elasticsearch/jvm.options.d/jvm.options

sudo systemctl start elasticsearch.service
  1. ติดตั้ง MySQL

คุณกำลังติดตั้ง MySQL เพื่อติดตั้งสคีมา Magento เริ่มต้น จากนั้นคุณจะย้ายข้อมูลสคีมาไปยัง Spanner โดยใช้ HarbourBridge

wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb

sudo dpkg -i mysql-apt-config*

คำสั่ง dpkg ด้านบนจะแสดงข้อความแจ้งแบบอินเทอร์แอกทีฟเพื่อติดตั้งเซิร์ฟเวอร์ MySQL 5.7 เลือกตัวเลือกต่อไปนี้

  • เซิร์ฟเวอร์และคลัสเตอร์ MySQL
  • mysql-5.7
  • ตกลง

a018bfc2ee00bdf5.png 1a126e452ca7312e.png ae39c6f4bbe3be74.png

sudo apt update && sudo apt -y install mysql-server
# You will be prompted to enter a root password
  1. ติดตั้ง Apache2
sudo apt -y install apache2

sudo a2enmod proxy_fcgi rewrite

ติดตั้งและกำหนดค่า Magento2

โปรเจ็กต์ Magento Commerce Cloud มีสคีมาฐานข้อมูลและบริการต่างๆ เพื่อให้เข้าถึงเว็บไซต์และร้านค้า Magento ได้อย่างเต็มที่

วิธีที่ง่ายที่สุดในการติดตั้งและเรียกใช้คือทำตามวิธีการของ Magento เพื่อติดตั้งโดยใช้ Composer ดังนี้

  1. ติดตั้ง Magento เวอร์ชัน 2.4.2 โดยใช้ Composer Magento 2 ต้องใช้ Composer เวอร์ชัน 1.x คุณอาจเห็นคำเตือนเกี่ยวกับการเลิกใช้งานการสนับสนุนสำหรับเวอร์ชันนี้
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.2 magento2
  1. ตั้งค่าสิทธิ์ของโฟลเดอร์
cd magento2

find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +

find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
  1. กำหนดค่าโฮสต์เสมือน Magento โดยสร้าง /etc/apache2/sites-available/magento.conf ที่มีเนื้อหาด้านล่าง
sudo nano /etc/apache2/sites-available/magento.conf

<VirtualHost *:80>
        ServerAdmin admin@local-magento.com
        DocumentRoot /var/www/html/magento/

        <Directory /var/www/html/magento/>
                Options Indexes FollowSymlinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <FilesMatch \.php$>
               SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. สร้างลิงก์สัญลักษณ์และรีสตาร์ท apache2
cd ~/magento2
sudo ln -s $(pwd) /var/www/html/magento 
sudo ln -s /etc/apache2/sites-available/magento.conf  /etc/apache2/sites-enabled/magento.conf
sudo rm /etc/apache2/sites-enabled/000-default.conf

sudo systemctl restart apache2
  1. สร้างฐานข้อมูลและผู้ใช้สำหรับ Magento ใน MySQL
export ROOT_PASSWORD="<root password from installation>"
export GCE_INSTANCE_IP="<GCE instance IP>"
mysql -uroot -p$ROOT_PASSWORD -e "create database magento"

bin/magento sampledata:deploy

bin/magento setup:install --base-url=http://$GCE_INSTANCE_IP/ --db-host=localhost \
--db-name=magento --db-user=root --db-password=$ROOT_PASSWORD --admin-firstname=admin \
--admin-lastname=demo --admin-email=good@example.com --admin-user=admin \
--admin-password=magento123 --language=en_US --currency=USD --timezone=America/Chicago \
--use-rewrites=1

sudo chown -R :www-data ~/magento2/. 
  1. ยืนยันพื้นที่ทํางานในเครื่อง หากต้องการยืนยันว่าสภาพแวดล้อมในเครื่องโฮสต์เซิร์ฟเวอร์ ให้เข้าถึงร้านค้าโดยใช้ URL ฐานที่คุณส่งในคําสั่งติดตั้ง ในตัวอย่างนี้ คุณสามารถเข้าถึงร้านค้า Magento ในพื้นที่ได้โดยใช้รูปแบบ URL ต่อไปนี้
  • http://<GCEexternalIP>/
  • http://<GCEexternalIP>/<adminuri>

คุณดู GCEexternalIP ได้ใน Cloud Console โดยทำดังนี้

3947f1164e1d5409.png

หากต้องการเปลี่ยน URI สำหรับแผงผู้ดูแลระบบ ให้ใช้คำสั่งนี้เพื่อค้นหา

php bin/magento info:adminuri
  1. ปิดใช้แคชทั้งหน้า สำหรับวัตถุประสงค์ในการพัฒนา คุณสามารถปิดใช้แคชทั้งหน้าของ Magento2 ได้ ซึ่งจะช่วยให้คุณแก้ไขข้อมูลใน Spanner และแสดงข้อมูลดังกล่าวในเว็บไซต์ได้โดยไม่ได้รับผลกระทบจากค่าที่แคชไว้
php bin/magento cache:disable full_page

ตั้งค่า Spanner

ติดตั้ง Spanner Emulator

Cloud SDK มีโปรแกรมจำลองในหน่วยความจำแบบภายใน ซึ่งคุณสามารถใช้เพื่อพัฒนาและทดสอบแอปพลิเคชันได้ฟรีโดยไม่ต้องสร้างโปรเจ็กต์ GCP หรือบัญชีสำหรับการเรียกเก็บเงิน เนื่องจากโปรแกรมจำลองจะจัดเก็บข้อมูลไว้ในหน่วยความจำเท่านั้น สถานะทั้งหมด รวมถึงข้อมูล สคีมา และการกำหนดค่า จะหายไปเมื่อรีสตาร์ท โปรแกรมจำลองมี API เดียวกันกับบริการที่ใช้งานจริงของ Spanner และมีไว้สำหรับการพัฒนาและการทดสอบในเครื่อง ไม่ใช่สำหรับการติดตั้งใช้งานจริง

โปรดใช้ลิงก์ด้านล่างเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้ง การใช้งาน และการติดตั้งใช้งานโปรแกรมจำลอง

การใช้โปรแกรมจำลอง Spanner

# Set up a new configuration to use the emulator
gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project magento
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/

# Start emulator in a screen session
screen -S magento
gcloud emulators spanner start &
gcloud spanner instances create magento-instance --config=emulator-config --description='Magento Instance' --nodes=1

# Detach from screen 
ctrl+a+d

export SPANNER_EMULATOR_HOST=localhost:9010

ย้ายข้อมูล Magento MySQL ไปยัง Spanner

ก่อนที่จะเจาะลึกเรื่องการผสานรวม Spanner เราจะใช้เครื่องมือที่ชื่อ HarbourBridge เพื่อแปลงฐานข้อมูล MySQL ที่สร้างขึ้นเป็นส่วนหนึ่งของการติดตั้ง Magento ข้างต้นเป็น Spanner

โดยหลักๆ แล้ว HarbourBridge จะมีเวิร์กโฟลว์อัตโนมัติสำหรับการโหลดเนื้อหาของฐานข้อมูล MySQL หรือ PostgreSQL ที่มีอยู่ลงใน Spanner โดยไม่ต้องกำหนดค่าใดๆ ไม่ต้องเขียนไฟล์ Manifest หรือแผนที่ข้อมูล แต่จะนำเข้าฐานข้อมูลต้นทาง สร้างสคีมา Spanner สร้างฐานข้อมูล Spanner ใหม่ที่ป้อนข้อมูลจากฐานข้อมูลต้นทาง และสร้างรายงานการประเมินแบบละเอียด HarbourBridge ออกแบบมาเพื่อโหลดฐานข้อมูลที่มีขนาดไม่เกิน 20-30 GB เพื่อวัตถุประสงค์ในการประเมิน ไม่ใช่การย้ายข้อมูลแบบเต็มรูปแบบ

HarbourBridge จะเริ่มต้นการย้ายข้อมูลระยะแรกไปยัง Spanner โดยใช้ฐานข้อมูลต้นทาง MySQL หรือ PostgreSQL ที่มีอยู่เพื่อให้คุณเริ่มต้นใช้งาน Spanner ได้อย่างรวดเร็ว โดยจะสร้างรายงานการประเมินที่มีคะแนนความเหมาะสมในการย้ายข้อมูลโดยรวมสำหรับ Spanner, การวิเคราะห์การแมปประเภททีละตาราง และรายการฟีเจอร์ที่ใช้ในฐานข้อมูลต้นทางซึ่ง Spanner ไม่รองรับ

คุณใช้ HarbourBridge กับ Spanner Emulator หรือกับอินสแตนซ์ Spanner โดยตรงได้

HarbourBridge README มีคู่มือเริ่มใช้งานฉบับย่อแบบทีละขั้นตอนสำหรับการใช้เครื่องมือกับอินสแตนซ์ Spanner

ติดตั้ง HarbourBridge

ดาวน์โหลดเครื่องมือลงในเครื่องแล้วติดตั้ง คุณต้องติดตั้ง Golang เพื่อให้การดำเนินการนี้ทำงานได้ การติดตั้งโมดูลที่จำเป็นทั้งหมดในอินสแตนซ์ใหม่ที่ไม่ได้ตั้งค่า Go ไว้ก่อนหน้านี้อาจใช้เวลาสักครู่

# Install golang
cd ~
wget https://golang.org/dl/go1.17.2.linux-amd64.tar.gz
sudo tar -zxvf go1.17.2.linux-amd64.tar.gz -C /usr/local
rm go1.17.2.linux-amd64.tar.gz

echo 'export GOROOT=/usr/local/go' | sudo tee -a /etc/profile
echo 'export PATH=/usr/local/go/bin:$HOME/go/bin:$PATH' | sudo tee -a /etc/profile
source /etc/profile

# Install harbourbridge
git clone https://github.com/cloudspannerecosystem/harbourbridge
cd harbourbridge
go run github.com/cloudspannerecosystem/harbourbridge help

ย้ายข้อมูล

ใช้คำสั่งต่อไปนี้เพื่อย้ายข้อมูลฐานข้อมูล Magento ไปยัง Spanner

mysqldump --user='root' --password=$ROOT_PASSWORD magento | go run github.com/cloudspannerecosystem/harbourbridge -driver=mysqldump -dbname=magento

ตั้งค่าเครื่องมือ spanner-cli

go install github.com/cloudspannerecosystem/spanner-cli@latest

3. แปลง Magento ให้ทำงานกับ Spanner

ตอนนี้เราได้เรียกใช้ Magento และสร้างอินสแตนซ์ Spanner พร้อมกับย้ายข้อมูลฐานข้อมูล Magento แล้ว เราจะมาดูวิธีแก้ไข Magento เพื่อให้ทำงานกับข้อมูลที่จัดเก็บไว้ใน Spanner

ระบบจะดำเนินการตามขั้นตอนต่อไปนี้เพื่อแปลงการติดตั้ง Magento

  • โคลนโปรเจ็กต์ magento-spanner-port
  • เปลี่ยนการเชื่อมต่อกับ Spanner
  • ตรวจสอบว่ารายละเอียดแคตตาล็อกมาจาก Spanner

โคลน Fork ของโปรเจ็กต์ Magento

โคลนโค้ดของแอปพลิเคชัน PHP สำหรับ Magento ซึ่งมีการแก้ไขสำหรับโมดูลแคตตาล็อก สิ่งที่อยากได้ และรถเข็นจาก URL Git ที่ระบุไว้ด้านล่าง

cd ~
git clone https://github.com/searceinc/magento-spanner-port

ไดเรกทอรีหน้าแรกควรมีลักษณะดังนี้

$ ls
go  harbourbridge  magento-spanner-port  magento2

โดย magento2 คือฐานของโค้ดที่เราจะแก้ไขโดยใช้โค้ดจาก magento-spanner-port

เปลี่ยนการเชื่อมต่อกับ Spanner

หากต้องการตรวจสอบว่าการแก้ไขโค้ดแสดงใน UI หรือไม่ ให้ทำตามขั้นตอนด้านล่าง

ดูตัวอย่างการใช้งานได้ที่ลิงก์ GitHub https://github.com/searceinc/magento-spanner-port

  • ต้องใช้ไลบรารีของไคลเอ็นต์ PHP สำหรับ google/cloud-spanner
  • เพิ่ม Spanner Adapter เพื่อสร้างการเชื่อมต่อกับ Spanner
  • กำหนดค่าอินสแตนซ์ Spanner และข้อมูลเซิร์ฟเวอร์
  • เพิ่ม SpannerInterface และ Spanner ใน Adapter เพื่อใช้การเชื่อมต่อกับ Spanner

ก่อนอื่น เราต้องติดตั้งไลบรารี PHP ของ Cloud Spanner โดยใช้ Composer ในไดเรกทอรี magento2 ให้เรียกใช้คำสั่งนี้

cd ~/magento2
composer require google/cloud-spanner

จากนั้นเราจะเพิ่มไฟล์ Spanner Adapter จาก magento-spanner-port ลงในฐานของโค้ด magento2

~/magento2$ cp -r ../magento-spanner-port/lib/internal/Magento/Framework/DB/Adapter/Spanner vendor/magento/framework/DB/Adapter/.
~/magento2$ ls -l vendor/magento/framework/DB/Adapter/Spanner
total 16
-rw-r--r-- 1 derekdowney derekdowney 10378 Nov  9 21:03 Spanner.php
-rw-r--r-- 1 derekdowney derekdowney  2948 Nov  9 21:03 SpannerInterface.php

ตอนนี้ให้แก้ไขไฟล์ DB/Adapter/Spanner/Spanner.php เพื่อป้อนข้อมูลการเชื่อมต่อ Spanner สำหรับ $project_id, $instance และ $database

$ nano vendor/magento/framework/DB/Adapter/Spanner/Spanner.php

class Spanner implements SpannerInterface
{
    /**
     * Google cloud project id
     * @var string
     */
    private $project_id = 'magento';

    /**
     * Google cloud instance name
     * @var string
     */
    private $instance  = 'magento-instance';

    /**
     * Cloud Spanner database name
     * @var string
     */
    private $database  = 'magento';

    /**
     * Is Cloud Spanner emulator
     * @var bool
     */
    private $is_emulator = true;
...
   /**
    * Set database connection adapter
    *
    * @param \Magento\Framework\DB\Adapter\AdapterInterface $conn
    * @return $this
    * @throws \Magento\Framework\Exception\LocalizedException
    */
   public function setConnection(\Magento\Framework\DB\Adapter\AdapterInterface $conn)
   {
       $this->_conn = $conn;
       $this->_select = $this->_conn->select();
       $this->_isOrdersRendered = false;
       return $this;
   }


   /**
     * Set Cloud Spanner database connection adapter
     *
     * @return void
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    private function setSpannerConnection()
    {
        $this->_spanner_conn = new Spanner();
    }

แก้ไขคลาส AbstractDB ภายใน Magento เพื่อเชื่อมต่อกับ Spanner โดยใช้ฟังก์ชันการเชื่อมต่อที่สร้างขึ้นใหม่ภายใน Spanner Adapter เพิ่มบรรทัดสีเขียวหลังบรรทัดสีขาวในไฟล์ ดูที่ vendor/magento/framework/Data/Collection/AbstractDb.php

$ nano vendor/magento/framework/Data/Collection/AbstractDb.php
...
use Psr\Log\LoggerInterface as Logger;
use Magento\Framework\DB\Adapter\Spanner\Spanner;
...
    protected $_conn;

    /**
     * Cloud Spanner connection
     *
     * @var \Magento\Framework\DB\Adapter\Spanner\SpannerAdapterInterface
     */
    protected $_spanner_conn;
...
       if ($connection !== null) {
            $this->setConnection($connection);
        }
        $this->setSpannerConnection();
        $this->_logger = $logger;
...
   /**
     * Retrieve connection object
     *
     * @return AdapterInterface
     */
    public function getConnection()
    {
        return $this->_conn;
    }

   /**
     * Retrieve connection object
     *
     * @return SpannerAdapterInterface
     */
    public function getSpannerConnection()
    {
        return $this->_spanner_conn;
    }
...

เมื่อสร้างการเชื่อมต่อแล้ว เราต้องแก้ไขวิธีการดึงข้อมูลจากอะแดปเตอร์ MySQL เป็นอะแดปเตอร์ Spanner แก้ไขเมธอด _loadAttributes ใน AbstractCollection เพื่อเชื่อมต่อกับ Spanner และดึงข้อมูลจาก Spanner แทนที่เส้นสีแดงด้วยเส้นสีเขียว

ดูที่ /app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php

$ nano ./vendor/magento/module-eav/Model/Entity/Collection/AbstractCollection.php

use Magento\Framework\Exception\LocalizedException;
use Google\Cloud\Spanner\SpannerClient;

...
               try {
                    if (is_array($selects)) {
                        $select = implode(' UNION ALL ', $selects);
                    } else {
                        $select = $selects;
                    }
                   $values = $this->getConnection()->fetchAll($select);
                   $con = $this->getSpannerConnection();

                    /**
                     * Cloud Spanner follows strict type so cast the columns in common type
                     */
                    $select = $con->addCast($select, "`t_d`.`value`", 'string');
                    $select = $con->addCast($select, "`t_s`.`value`", 'string');
                    $select = $con->addCast($select, "IF(t_s.value_id IS NULL, t_d.value, t_s.value)", 'string');
                    
                    $values = $con->fetchAll($select);

...

ตรวจสอบว่ารายละเอียดแคตตาล็อกมาจาก Spanner

เท่านี้ก็เรียบร้อย ตอนนี้คุณไปที่การติดตั้ง Magento ในเบราว์เซอร์และตรวจสอบว่าระบบกำลังโหลดข้อมูลได้แล้ว

ตัวอย่างเช่น รายการแคตตาล็อกสำหรับนาฬิกามีดังนี้

13b54ba4482408fc.png

แก้ไขข้อมูล Spanner ผ่านเทอร์มินัลสำหรับผลิตภัณฑ์รายการใดรายการหนึ่ง และค้นหาข้อมูลผ่านเทอร์มินัลเพื่อยืนยันการแก้ไขใน Spanner

$ spanner-cli -pmagento -i magento-instance -d magento
spanner> SELECT * FROM catalog_product_entity_varchar WHERE value LIKE "Aim Analog%";
+----------+--------------+----------+-----------+--------------------+
| value_id | attribute_id | store_id | entity_id | value              |
+----------+--------------+----------+-----------+--------------------+
| 390      | 73           | 0        | 36        | Aim Analog Watch |
+----------+--------------+----------+-----------+--------------------+
1 rows in set (80.711542ms)

spanner> UPDATE catalog_product_entity_varchar SET value = "Aim Analog Spanner" WHERE value_id=390;
Query OK, 1 rows affected (0.19 sec)

spanner> SELECT * FROM catalog_product_entity_varchar WHERE value_id=390;
+----------+--------------+----------+-----------+--------------------+
| value_id | attribute_id | store_id | entity_id | value              |
+----------+--------------+----------+-----------+--------------------+
| 390      | 73           | 0        | 36        | Aim Analog Spanner |
+----------+--------------+----------+-----------+--------------------+
1 rows in set (80.711542ms)

ตอนนี้ให้โหลดหน้าจอซ้ำเพื่อยืนยันว่าชื่อของนาฬิกาเปลี่ยนเป็น "Aim Analog Spanner" แล้วตามที่อัปเดตผ่านเทอร์มินัล Spanner

63a9c7b065c7051f.png

4. ขอแสดงความยินดี

ขอแสดงความยินดี คุณเชื่อมต่อโมดูลแคตตาล็อกของ Magento ให้ทำงานกับ Spanner ได้สำเร็จแล้ว แม้จะไม่ใช่การผสานรวมอย่างเต็มรูปแบบ แต่ตอนนี้คุณก็ทราบองค์ประกอบที่จะใช้เชื่อมต่อแอปพลิเคชัน PHP เช่น Magento กับอินสแตนซ์ Spanner แล้ว

การล้างข้อมูล

เมื่อตั้งค่าและตรวจสอบความถูกต้องของ POC เสร็จแล้ว คุณอาจต้องการลบทรัพยากร GCP ที่สร้างขึ้นในระหว่างกระบวนการนี้ ซึ่งรวมถึงเครื่องเสมือน Compute Engine และอินสแตนซ์ Cloud Spanner หากคุณตัดสินใจที่จะใช้แทนโปรแกรมจำลอง

ขั้นตอนต่อไปคืออะไร

นี่เป็นเพียงโมเดลต้นแบบสำหรับ POC ของ Spanner

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับ Spanner และเทคโนโลยีที่เราใช้ใน Codelab นี้ โปรดดูแหล่งข้อมูลเพิ่มเติมต่อไปนี้