请记住,我对这些东西的经验很少.
我一直在尝试在Elastic Beanstalk中建立一个多服务器Magento站点,使用RDS作为数据库,使用EC2作为单独的管理员和前端服务器.我正在测试tools.pingdom.com上的几个不同设置的速度,主要是看他们称之为"等待"(DNS,连接,发送,等待,接收),假设这是一个粗略的度量,它需要多长时间Magento为页面生成html.我对在不同的设置上如何使用类似的服务器实例创建大致相同的页面时的等待时间变化非常困惑.我的价值在980到1.8之间.
我以为我开始注意到一种模式.似乎EC2与RDS实例处于相同可用区域的设置将更快且更一致地更快.所以我更改了弹性beanstalk配置,以便EC2与数据库位于同一区域.我不科学的发现是,在这次改变之后,我会一直等待大约1秒.在我看来,速度的相当显着的差异是由于应用服务器和数据库之间的网络延迟.
我的问题有三个部分.首先,这是人们对将实例保持在相同区域的期望,还是我在一小组测试结果中读得太多?其次,这是一个重要的现实世界速度差异?因为它似乎对我而言,似乎只会通过使用像NFS这样的东西共享媒体文件夹而变得更糟.第三,允许应用服务器在不同区域启动是否有任何优势,那些等待时间增加的优势是否值得?
另外,如果我做错了,请告诉我.
首先,我知道我应该使用模型而不是直接使用数据库.话虽如此,有没有人知道Magento如何处理非全球产品属性?
我有2个网站core_website:Admin(website_id = 0)和主网站(website_id = 1).我还有两个商店core_store:Admin(store_id = 0)和Default Store View(store_id = 0).似乎产品(或类别?)属性是否在范围内是全局属性存储在catalog_eav_attribute.is_global.值0对应于"商店视图"的范围,值1对应于"全局",2对应于"网站".到现在为止还挺好.
现在,如果我想为所有产品获取特定于商店的属性的值,例如"name"(eav_attribute.attribute_id= 71; eav_attribute.backend_type='varchar'; catalog_eav_attribute.is_global= 0),您会认为我会这样做:
SELECT *
FROM catalog_product_entity_varchar
WHERE attribute_id = 71
AND store_id = 1
Run Code Online (Sandbox Code Playgroud)
但这没有任何回报.所有这些名称实际上都在store_id= 0 行中.据我所知,数据库中存储为store_id= 1 的唯一属性是'url_key'和'url_path'.那么Magento如何存储这些价值呢?Magento如何检索它们?
是否所有值最初(或者)都存储为store_id= 0作为一种默认值,直到需要存储与该值不同的值?当需要存储与admin值不同的特定于商店的值时,magento会创建一个store_id= 1 的新行(或者它是什么store_id)?
如果那样 - 或类似的东西 - 就是这种情况,那么Magento如何检索特定于商店的值?它检查catalog_eav_attribute.is_global首先是有问题的属性?如果它是非全局的,那么它可以先用store_id= 1 查询,如果没有返回任何内容,那么查询默认值store_id= 0? …