Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Там 5 копеек, там еще 5 - пускай были бы.
Как можно стремиться к быстродействию и сидеть на рнр5?..
public function get_cache_nosql(string $keyword, bool $as_array = null)
{
if (is_null($as_array)) {
$as_array = true;
}
$file_path = $this->getFilePath($keyword);
if(!file_exists($file_path)) {
dtimer::log(__METHOD__. ' file_exists check. not found '.$file_path);
return null;
}
$content = file_get_contents($file_path);
// check if codepage isset transcode from codepage to utf8
if (!empty(self::$config['codepage'])) {
$content = iconv(self::$config['codepage'], "utf-8", $content);
}
$array = $this->decode($content, $as_array);
return $array;
}
public function get_cache_nosql($keyword,$as_array = null)
{
//проверка типов аргументов (вместо type hinting)
if(!is_string($keyword) || !is_bool($as_array)){
trigger_error(__METHOD__ . ' ' . __LINE__ . 'wrong argument type');
return false;
}
if (is_null($as_array)) {
$as_array = true;
}
$file_path = $this->getFilePath($keyword);
if(!file_exists($file_path)) {
dtimer::log(__METHOD__. ' file_exists check. not found '.$file_path);
return null;
}
$content = file_get_contents($file_path);
// check if codepage isset transcode from codepage to utf8
if (!empty(self::$config['codepage'])) {
$content = iconv(self::$config['codepage'], "utf-8", $content);
}
$array = $this->decode($content, $as_array);
return $array;
}
if(!empty($filter['category_id']))
в Simpla 1.X было поле "Название товара/категории в единственном числе".
Возможно вам стоить добавить такое поле, которое будет автоматически заполнятся при создании товара.
И еще - почти все фильтры в API работают как
если в них передается параметр как 0 - то они не срабатывают.Код:if(!empty($filter['category_id']))
Я про это и говорю, такое получается из-за заложенной в симплу логики работы фильтров свойств товаров, в окее ничего не меняли.А не в курсе как устроена логика с фильтрами. на окай большая проблема. если товаров 10, то яндекс найдет их более 1000 на страницах со свойствами, причем страницы окажутся пустыми. В общем окай генерит несуществующие страницы с отсутствующими товарами из свойств.
SELECT po.product_id, po.feature_id, po.value, count(po.product_id) as count
FROM s_options po
INNER JOIN s_products p ON p.id=po.product_id AND visible=1
INNER JOIN s_products_categories pc ON pc.product_id=po.product_id AND pc.category_id in('1')
WHERE 1 AND po.feature_id in('2','4','5')
GROUP BY po.feature_id, po.value
ORDER BY value=0, -value DESC, value
Не смог найти кто, но одни умельцы с большим количеством свойств "разрезали вертикально" такие таблицы на несколько, и джойнят их по первичному ключу. По этим таблицам они построили покрывающие/составные индексы.1. Самая главная - Mysql не позволяет создать индексы больше, чем на 63 столбца 1 таблицы. Без индексов поиск по таблице становится очень долгим.
Поэтому индексы лучше навешивать на одно поле типа int (bigint). Так они занимают не более 8байт. А в поле хранить преобразованный в десятичное число md5-хеш (я усекаю до 15 символов) нужных вам столбцов. По много миллионной базе запросы практически мгновенные получаются.Иногда индексы начинают по размеру приближаться к размерам данных. Обслуживание индексов - на это БД также тратит время, поэтому много индексов плохо. И индексы быстро работают, пока умещаются в память.
Фишка в том что число будет занимать максимум 8 байт, как и его индекс. md5 и так самый быстрый, а нативного md4 в php по моему нет. урезаю до 15 символов, чтоб не было проблем с конвертацией base_convert, поле должно быть BIGINT UNSIGNED.С кешем я уже так и сделал, только взял md4, а не md5 (пошустрее по тестам) и в базу их пишу bin(16), но твой вариант сделать десятичным числом и урезать до 15 символов кажется еще короче выходит?