我正在使用Shopware 6.4.6.1
我有3英里左右。数据库中的订单和客户。
当我使用后端搜索特定的订单号时,系统会对数据库启动一个非常复杂的查询,这个查询太慢,无法及时响应,因此我得到了一个超时。这样,就不可能使用后端查找订单。数据库对查询中使用的表没有任何索引,这一点我觉得很奇怪。
据我所知,elasticsearch集群仅用于产品、类别等,而不是查找订单和客户。
在SW6中,以一种性能良好的方式查找特定的订单/客户,并与数百万个订单/客户一起工作的一般概念是什么?
发布于 2022-06-01 13:17:59
这里没有密码,只是一个一般的答案。
最好的解决方案是建立一个Elasticsearch集群(或者完成ELK堆栈)。为此您将需要一个自定义索引器(用于告诉Shopware您希望在弹性中使用哪些字段),并用如下所示来装饰/扩展核心ApiControllers的search()方法:
if (in_array($entityName,['order','customer'])) {
$context->addState(Context::STATE_ELASTICSEARCH_AWARE);
}我们对Shopware 6进行了自定义扩展,并在Elsaticsearch中添加了客户和订单数据,因此这使得搜索非常快捷。就像SW6中的产品搜索一样。
一个不太有希望的解决方案是向MySQL添加适当的DB索引。这使我的订单搜索速度加快了30%-40%。我无法理解为什么Shopware在最初没有索引的情况下发布了它的DB,也许它与在写时重新构建索引的必要性有关,这消耗了相当多的内存。不知道。我们应该检查所有涉及的表的索引。
总的来说,我认为他们在所有后端搜索中都做得很糟糕,使得其中的很多都无法使用,特别是当你有大量数据的时候。可能是SW6最令人失望的事.
在我们的旧的,前SW6平台,我们有严重的性能问题,因为巨大的表,也。在那里,解决方案是向DB中添加一个附加的order_lookup表,其中只有极小的列集(大部分是串连字符串,并且只有真正搜索到客户支持的字段)。该表优化了索引,每次添加或编辑新的顺序时,都会使用MySQL触发器写入数据。在后端,一个定制的搜索页面查询order_lookup表。如果Elasticsearch不适合您,您可以在SW6中做类似的事情。
https://stackoverflow.com/questions/72460468
复制相似问题