- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Используется API для получения данных (товаров), API платный, поэтому необходимо минимизировать обращения. Для этого используется свой собственный кеш данных.
Также появилась задача на основе своего кеша показывать выборки, которые не может предоставить API.
Данные приходят в XML или JSON, я сам указываю в каком формате, поддерживаются оба варианта. JSON по идее удобнее.
Сейчас все хранится в файлах. Миллионы файлы, много, очень много. Стараюсь разбивать по разным папкам. По размеру ну гигов 500 наверное уже.
Каждый запрос просто полностью кладется в файл. В нем очень полей и значений. И потом смотрю есть данные в кеше, просто читаю файлы и выдаю вместе реального запроса.
Проблем несколько. Чистить кеш очень тяжело, сервак по сути умирает на это время.
Делать выборки по кешу нереально.
Сейчас хочу перенести все это на базу данных.
Прочитал в Mysql 5.7.6+ есть поддержка полей JSON и генерируемые поля.
Полей будет с десяток наверное.
Что хочу хранить.
1. Запросы на поиск. Разные варианты поиска. Т.е. просто нужно сохранить, строку идентификатор поиска, и результат - данные (json).
2. Сами товары. Идентификатор, данные (json), набор полей. Ну например Бренд и тому подобное.
Как лучше всего такое делать такое? Нормально ли запихнуть это все в MYSQL будет? Не сдохнет ли мускуль от таблиц таких размеров?
не сдохнет. если выборку по айди делать
Clickhouse может подойти. 1Тб там это нормальное количество. Если кеш нужно чистить по дням, например удалить все старше 30 дней то тут подойдут подневные партиции (по умолчанию там месяц кажется).
Clickhouse может подойти. 1Тб там это нормальное количество. Если кеш нужно чистить по дням, например удалить все старше 30 дней то тут подойдут подневные партиции (по умолчанию там месяц кажется).
Немного не то. За совет спасибо.
Clickhouse может подойти. 1Тб там это нормальное количество. Если кеш нужно чистить по дням, например удалить все старше 30 дней то тут подойдут подневные партиции (по умолчанию там месяц кажется).
Clickhouse не про это, она коллоночная база данных, она скорее про аггрегацию значений и постоянную запись, и про всякие паттерны 3д кубов и прочего. Это OLAP, автору на сколько я понял нужно OLTP.
Зачем вам JSON тип? Вы по нему искать собираетесь? Если да, то лучше PostgreSQL, или на крайняк Mongo. Если искать по JSON нет нужды - берите любую СУБД, поиску присваиваете идентификатор, JSON не храните в типе JSON, т.к. там валидация происходит. Просто берите BLOB и храните массив байт.
На счет справится/не справится, справится и с бОльшим количеством. Делаете партиции и все будет работать вполне себе.
А вообще, структура ваших данных и необходимые выборки до конца не ясны.
Используется API для получения данных (товаров), API платный, поэтому необходимо минимизировать обращения. Для этого используется свой собственный кеш данных.
Также появилась задача на основе своего кеша показывать выборки, которые не может предоставить API.
Данные приходят в XML или JSON, я сам указываю в каком формате, поддерживаются оба варианта. JSON по идее удобнее.
Сейчас все хранится в файлах. Миллионы файлы, много, очень много. Стараюсь разбивать по разным папкам. По размеру ну гигов 500 наверное уже.
Каждый запрос просто полностью кладется в файл. В нем очень полей и значений. И потом смотрю есть данные в кеше, просто читаю файлы и выдаю вместе реального запроса.
Проблем несколько. Чистить кеш очень тяжело, сервак по сути умирает на это время.
Делать выборки по кешу нереально.
Сейчас хочу перенести все это на базу данных.
Прочитал в Mysql 5.7.6+ есть поддержка полей JSON и генерируемые поля.
Полей будет с десяток наверное.
Что хочу хранить.
1. Запросы на поиск. Разные варианты поиска. Т.е. просто нужно сохранить, строку идентификатор поиска, и результат - данные (json).
2. Сами товары. Идентификатор, данные (json), набор полей. Ну например Бренд и тому подобное.
Как лучше всего такое делать такое? Нормально ли запихнуть это все в MYSQL будет? Не сдохнет ли мускуль от таблиц таких размеров?
1) Без проблем, хотя nosql база данных при таком объеме будет лучше.
2) Плохая идея. json / генерируемые столбцы хранятся виртуально, а не реально физически. И несмотря на возможность индексации - поиск по ним будет достаточно тормозным. Делайте таблицу с реальными полями по которым будет поиск (только с ними), полные json данные храните в отдельной таблице вообще (например в таблице из пункта 1). Если сможете нормализовать данные - будет вообще шикарно, но это как бы и так очевидно.
а) mysql такой объем вполне готов переваривать, но обратите внимание на myisam вариант. innodb неплох, но в сравнении с myisam может быть тормознее на относительно простых запросах.
б) если это хоть как-то возможно, используйте не утф8, а однобайтовую кодировку. Эта статейка до сих пор актуальна и такой вариант может сэкономить Вам реально много ресурсов.
1) Без проблем, хотя nosql база данных при таком объеме будет лучше.
2) Плохая идея. json / генерируемые столбцы хранятся виртуально, а не реально физически. И несмотря на возможность индексации - поиск по ним будет достаточно тормозным. Делайте таблицу с реальными полями по которым будет поиск (только с ними), полные json данные храните в отдельной таблице вообще (например в таблице из пункта 1). Если сможете нормализовать данные - будет вообще шикарно, но это как бы и так очевидно.
а) mysql такой объем вполне готов переваривать, но обратите внимание на myisam вариант. innodb неплох, но в сравнении с myisam может быть тормознее на относительно простых запросах.
б) если это хоть как-то возможно, используйте не утф8, а однобайтовую кодировку. Эта статейка до сих пор актуальна и такой вариант может сэкономить Вам реально много ресурсов.
1) nosql и прочие монги шмонги не будут лучше.
2) просто json можно хранить в текстовом поле и нормально по нему искать при этом, лишнего кода и объема это не добавляет.
P.S. я помню так в sqlite хранил кеш запросов к апи партнерки где слон. 50 гб файл нормально жил :D хотя это было не самое умное решение.
---------- Добавлено 28.04.2019 в 10:28 ----------
А по поводу объема, если поиск по этим текстам не нужен и все запросы по id , то текст (json) должен отлично сжиматься через gzdeflate, если текста в каждой ячейке много.
Без проблем, хотя nosql база данных при таком объеме будет лучше.
Когда пишете NoSQL, пишите какая именно. Бывают варианты для полностью противоположных задач.
2) Плохая идея. json / генерируемые столбцы хранятся виртуально, а не реально физически. И несмотря на возможность индексации - поиск по ним будет достаточно тормозным.
На самом деле, в некоторых случаях поиск по JSON даже быстрее, чем по реляционной модели.
Если сможете нормализовать данные - будет вообще шикарно, но это как бы и так очевидно.
Я так понял, там особо нечего нормализовать. Есть какой-то идентификатор, и куча байт которые нужно вернуть.
но обратите внимание на myisam вариант. innodb неплох, но в сравнении с myisam может быть тормознее на относительно простых запросах.
Да, действительно, обратите внимание на движок, который при малейшем сбои может покорраптить все таблицы. Приведите примеры, на каких запросах может быть тормознее (кроме COUNT(*))
А по поводу объема, если поиск по этим текстам не нужен и все запросы по id , то текст (json) должен отлично сжиматься через gzdeflate, если текста в каждой ячейке много.
Кстати, да. Но если нужно сжатие, я бы взял MyRocks, мы так одну базу до 400Гб ужали (с 1Тб)
Сейчас вот как раз есть одна толстая таблица на почти 3 млрд строк:
А вот время выборки по PK:
Таблица без партиций, кстати. Можно сделать PARTITION BY HASH(col) PARTITIONS 20; и будет все ещё быстрее работать
1) nosql и прочие монги шмонги не будут лучше.
Наверное все таки зависит от того что надо, а в данном случае это не до конца ясно. С учетом того, что
я бы монгу-шмонгу и пр. носкуэл не исключал. Например, каждая категория - отдельная коллекция (таблица в терминах скуэл бд), их, категорий,например, в Я-маркете, если не изменяет память что то между 2000-3000. Порядок цифр примерно ясен, явно меньше 24000 .
А дальше дело техники
Но, не настаиваю, в каждом конкретном случает могут быть другие аргументы, которые приведут к выбору иного решения.
2) просто json можно хранить в текстовом поле и нормально по нему искать при этом, лишнего кода и объема это не добавляет.
И диапазоны? Ну типа "Оптический Zoom от 40 до 80"
Когда пишете NoSQL, пишите какая именно. Бывают варианты для полностью противоположных задач.
Для задач ТС - по фиг.
На самом деле, в некоторых случаях поиск по JSON даже быстрее, чем по реляционной модели.
Нет.
Я так понял, там особо нечего нормализовать. Есть какой-то идентификатор, и куча байт которые нужно вернуть.
Возможно, но в пункте 2 есть "набор полей", а не просто "ид и дсон".
Да, действительно, обратите внимание на движок, который при малейшем сбои может покорраптить все таблицы.
Холивары на эту тему отгремели лет 5 назад уже, мы не будем это начинать тут и сейчас, но просто отвечая на вопрос - при небольшом сбое ничего не будет, при среднем - майисаму понадобится репаир тейбл и все на этом, при крупном - иннобд умрет а майисам потеряет часть данных. И не забывайте какой размер логов бинарных транзакций будет на базе размером в 500гб.
Приведите примеры, на каких запросах может быть тормознее (кроме COUNT(*))
https://www.percona.com/blog/2009/01/12/should-you-move-from-myisam-to-innodb/ до сих пор актуальная статья.
Для задач ТС - по фиг.
Бггг, ну и бред. Т.е., берем любую TSDB и пишем туда. Отличный совет. Уже на этом можно прекращать дискуссию, но ладно.
Нет.
Да.
при небольшом сбое ничего не будет, при среднем - майисаму понадобится репаир тейбл и все на этом, при крупном - иннобд умрет а майисам потеряет часть данных.
Это прямо из документации вырезка.
И не забывайте какой размер логов бинарных транзакций будет на базе размером в 500гб.
Какой, если я их отключу, а буду использовать redo log из InnoDB?
https://www.percona.com/blog/2009/01...sam-to-innodb/ до сих пор актуальная статья.
Да, как и все другие статьи вышедшие 10 лет назад.
Я бы ещё понял если бы вы посоветовали использовать MyISAM под табличку которая никогда не изменяется, используется под read-only, и в ней 500 не важных строк.
Ладно, не хочу время тратить на этот бессмысленный спор. Используйте и дальше MyISAM, пока его не выкинут из MySQL.