Rambler.iOS #8: Как не стать жертвой бэкендеровRAMBLER&Co
Клиент-серверное взаимодействие лежит в основе большинства мобильных приложений. Язык общения между клиентом и сервером всегда закреплён определённым контрактом. Однако валидация этого контракта незаслуженно остаётся в стороне. Отсюда и большинство проблем на клиенте — некорректное отображение, неконсистентность данных и падения.
Как избежать этих проблем и повысить уровень crash-free ваших приложений, добавив предварительную валидацию, расскажет Ирина Дягилева.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...DevDay
- Часть первая. SQL и программный код - как, имея очень простую задачу, получить очень плохое решение.
- Антракт. Почему нам неудобно писать SQL
- Часть вторая. Почему существующие решения - отстой.
- Антракт. Мечты об идеальном инструменте разработки SQL
- Часть третья. История велосипеда, или свой инструмент самый лучший
Rambler.iOS #8: Как не стать жертвой бэкендеровRAMBLER&Co
Клиент-серверное взаимодействие лежит в основе большинства мобильных приложений. Язык общения между клиентом и сервером всегда закреплён определённым контрактом. Однако валидация этого контракта незаслуженно остаётся в стороне. Отсюда и большинство проблем на клиенте — некорректное отображение, неконсистентность данных и падения.
Как избежать этих проблем и повысить уровень crash-free ваших приложений, добавив предварительную валидацию, расскажет Ирина Дягилева.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Р...DevDay
- Часть первая. SQL и программный код - как, имея очень простую задачу, получить очень плохое решение.
- Антракт. Почему нам неудобно писать SQL
- Часть вторая. Почему существующие решения - отстой.
- Антракт. Мечты об идеальном инструменте разработки SQL
- Часть третья. История велосипеда, или свой инструмент самый лучший
Как создать дата-платформу с нуля / Павел Тарасов (ЦИАН)Ontico
HighLoad++ 2017
Зал «Сингапур», 8 ноября, 18:00
Тезисы:
http://www.highload.ru/2017/abstracts/2863.html
На определенной стадии развития компании появляется необходимость собирать, анализировать и принимать решения, исходя из данных. Причин может быть много: аналитика для BI, внедрение машинного обучения в сервисы, поставка данных заказчику.
...
Поисковая оптимизация интернет-магазина на базе Drupal CommerceAlexey Kostin
1. Немного о сборках (например о том, чем хороша http://commercebox.org/).
2. Немного о том, какие страницы (и почему) следует использовать для оптимизации и последующего приземления трафика (landing pages) в большинстве интернет-магазинов.
3. Новый универсальный модуль metatags для Drupal 7: выжимаем максимум из интеграции с токенами.
4. Несколько простых способов повышения конверсии для магазина, работающего в популярной тематике.
5. Must have расширения для Drupal Commerce и кейсы их эффективного использования.
https://bit.ly/2X6Domb
В нашу эпоху головокружительных достижений в области искусственного интеллекта, облачных вычислений и передовой аналитики, как ни странно, многие организации по-прежнему полагаются на архитектуры данных, построенные в прошлом веке. Однако, ситуация быстро меняется с ростом применения виртуализации данных в реальном времени для обеспечения безопасного, логического доступа к информации. Данный подход позволяет отказаться от физической трансформации и перемещения данных в хранилище, прежде чем они могут быть использованы бизнесом.
Посетите этот новый вебинар на русском языке, чтобы узнать:
- Что такое виртуализация данных?
- Чем данный подход отличается от других корпоративных технологий интеграции данных, таких как ETL
- Почему крупнейшие организации используют виртуализацию в масштабах всего предприятия
Узнайте больше о проблемах интеграции данных, решаемых с помощью виртуализации и вариантах применения этой динамично развивающейся технологии.
1. Подменяем контент сайта
2. Персонализируем страницу на основе меток
3. Показатели отвлеченности - отслеживанием составным событием (просмотры + время на сайте + километраж мыши и т.д. - отправляем событие - легко анализировать)
4. clientId
5. Промокод
6. Табличка Google Docs для отправки данных
7. iframe формы (добавление)
В своем выступлении я постараюсь отойти от ставших уже стандартными описаний по настройке Google Tag Manager: установке счетчиков, междоменном отслеживании, формирование datalayer и т.д. Многое из этого и так раскрыто в многочисленных гайдах в интернете и вряд ли заслуживает дополнительного внимания.
Необходимо двигаться вперед, уходить от стандартного и изведанного, к новому и интересному, открывать перспективные и нераскрытые возможности, развивать себя и рынок.
В данном свете нет ничего более интересного, чем исследование возможностей самого, казалось бы, просто из тегов GTM – пользовательский HTML, который позволяет на лету изменять, добавлять и удалить контент на страницах вашего сайта. Мы постараемся понять, используя практические примеры, реальные возможности, открывающиеся перед нами и постараемся научиться правильно думать и понимать такой инструмент как GTM.
Как создать дата-платформу с нуля / Павел Тарасов (ЦИАН)Ontico
HighLoad++ 2017
Зал «Сингапур», 8 ноября, 18:00
Тезисы:
http://www.highload.ru/2017/abstracts/2863.html
На определенной стадии развития компании появляется необходимость собирать, анализировать и принимать решения, исходя из данных. Причин может быть много: аналитика для BI, внедрение машинного обучения в сервисы, поставка данных заказчику.
...
Поисковая оптимизация интернет-магазина на базе Drupal CommerceAlexey Kostin
1. Немного о сборках (например о том, чем хороша http://commercebox.org/).
2. Немного о том, какие страницы (и почему) следует использовать для оптимизации и последующего приземления трафика (landing pages) в большинстве интернет-магазинов.
3. Новый универсальный модуль metatags для Drupal 7: выжимаем максимум из интеграции с токенами.
4. Несколько простых способов повышения конверсии для магазина, работающего в популярной тематике.
5. Must have расширения для Drupal Commerce и кейсы их эффективного использования.
https://bit.ly/2X6Domb
В нашу эпоху головокружительных достижений в области искусственного интеллекта, облачных вычислений и передовой аналитики, как ни странно, многие организации по-прежнему полагаются на архитектуры данных, построенные в прошлом веке. Однако, ситуация быстро меняется с ростом применения виртуализации данных в реальном времени для обеспечения безопасного, логического доступа к информации. Данный подход позволяет отказаться от физической трансформации и перемещения данных в хранилище, прежде чем они могут быть использованы бизнесом.
Посетите этот новый вебинар на русском языке, чтобы узнать:
- Что такое виртуализация данных?
- Чем данный подход отличается от других корпоративных технологий интеграции данных, таких как ETL
- Почему крупнейшие организации используют виртуализацию в масштабах всего предприятия
Узнайте больше о проблемах интеграции данных, решаемых с помощью виртуализации и вариантах применения этой динамично развивающейся технологии.
1. Подменяем контент сайта
2. Персонализируем страницу на основе меток
3. Показатели отвлеченности - отслеживанием составным событием (просмотры + время на сайте + километраж мыши и т.д. - отправляем событие - легко анализировать)
4. clientId
5. Промокод
6. Табличка Google Docs для отправки данных
7. iframe формы (добавление)
В своем выступлении я постараюсь отойти от ставших уже стандартными описаний по настройке Google Tag Manager: установке счетчиков, междоменном отслеживании, формирование datalayer и т.д. Многое из этого и так раскрыто в многочисленных гайдах в интернете и вряд ли заслуживает дополнительного внимания.
Необходимо двигаться вперед, уходить от стандартного и изведанного, к новому и интересному, открывать перспективные и нераскрытые возможности, развивать себя и рынок.
В данном свете нет ничего более интересного, чем исследование возможностей самого, казалось бы, просто из тегов GTM – пользовательский HTML, который позволяет на лету изменять, добавлять и удалить контент на страницах вашего сайта. Мы постараемся понять, используя практические примеры, реальные возможности, открывающиеся перед нами и постараемся научиться правильно думать и понимать такой инструмент как GTM.
2. Товар в каталоге
Скомпилировать seo-заголовок товара
Seo, keywords, description
Посчитать обсуждения на форуме
Узнать рейтинг и кол-во отзывов
Скомпилировать краткую строку
Узнать диапазон цен магазинов
Проверить б/у предложения
Загрузить конфигурации
Загрузить галерею, видео, 3d-изображение
Получить группы параметров, сами параметры и их значения для товара
3. Как быстро отображать эту
информацию?
Покрыть кэшем
Нагрузка на сервер все равно остается
Пользователь видит неактуальную информацию
Держать кэш все время поднятым
Огромные интервалы между индексациями
Процессор все время занят
7. Собственно, содержание
Индексы и объекты
Индексация и поиск по параметрам
Булевы и flag-параметры
Словари и их диапазоны
Числа и их диапазоны
Карты отображения
Сочетание параметров
Сортировка
Числа и строки
Составная
Группировка
Как написать код
17. Сортировка по строке
Product:3 => Apple Iphone 3
Product:6 => Apple Iphone 6
3
4
5
SET
STRING KEYS
SORT set BY
Product:* ALPHA
STORE tmp
3
6
LIST
LRANGE list 1 5
19. Процесс индексации
1.трансформация объекта для индексации
2.построение цепочки index builder-ов
3.вычисление diff
4.выполнение index builder-ов
5.сохранение состояния индекса
6.коммит транзакции
7.событие - оповещение об изменении
индекса
22. Diff-механизм
Name: Apple Iphone 6
Price: 100000
Parameters:
Bool
Wifi: true
Number
Height: 100
Name: Apple Iphone 6
Price: 100000
parameters.bool.Wifi: true
parameters.number.Height: 100
Name: Apple Iphone 6
Price: 200000
parameters.bool.Wifi: true
Price: 200000
Parameters.number.height: 100
UPDATE
DELETE
23. Интерфейс index builder-а
/**
* This interface should be implemented by various Redis index builders
*/
interface BuilderInterface
{
/**
* Returns true if this key should be indexed by this builder
*/
public function matches($key);
/**
* Executes Redis command to update index
*/
public function update($redis, array $product, $key, $value);
/**
* Executes Redis command to delete index
*/
public function delete($redis, array $product, $key, $value);
}
24. Пример index builder-а
class BoolIndex extends Builder
{
public function matches($key)
{
return str_is($this->filter, $key);
}
public function update($redis, array $product, $key, $value)
{
if ($value) {
$redis->sadd($key, $product['id']);
}
}
public function delete($redis, array $product, $key, $value)
{
if ($value) {
$redis->srem($key, $product['id']);
}
}
}
27. Процесс поиска
1.Создание цепочки Query на основе
аргументов
2.Выполнение подзапросов в рамках
IntersectionQuery в pipeline
3.Сортировка с пагинацией
4.Группировка (опционально)
5.Получение объектов по ID
6.Удаление временных ключей
Key-value, memcache, catalog, show, lots info
How many 17 gb - catalog, 700 k product, 700k categories
Пример - каталог, с чего вдруг стали использовать редис. Показать на шапке товара
Да нет фильтры, фильтрует список товаров, храним да и нет, отсутствие не храним
Пример товара, готовая структура в редисе, пример добавления, пример поиска, готовый ключ, а чего вы не сделаете каталог на редис?. Пагинация, сортировка - позже
Отличие от буль, есть множество всех, вычитание
Теже флаги, отличия в ключе, плюс юнионы/диффы
От до равно, inf для открытых,
Отдельно для start/end, два множества
Числовой айди, строковый ключ, хэш, схема ключа
временный ключ при необходимости
выполнение zinter
сортированное/несортированное множество
выполнение zrange/zrevrange
для пагинации
вычисление start/stop на основе page/limit
выполнение zcard
total found
zunionstore
weights
индексация строк для сортировки
используются строковые ключи (string)
set/del
приводится к нижнему регистру
strtolower
в имени ключа - ID объекта
Method name? Hash?
Product:titles : 123 -> apple iphone
нельзя использовать zset, zrangebylex
выполнение sort
критерий сортировки - строковые ключи
создание временного списка
опция alpha = true
опция store
получение total count
выполнение lrange
пагинация
индексация для группировки
используются сортированные множества (zset)
содержат карту отображения для группировки
score - parent_id
value - object_id
Query after this
ключ для группировки
показывает связи между объектами
выполняется обычный поиск
попадают и обычные объекты, и представители групп
выполняется zinter
множество ID объектов
сортированное множество базовый объект => дочерний объект
weights 0, 1
выполняется zrange, array_unique, sadd
из результата поиска отбираются сначала только базовые модели
сортировка и пагинация
затем - дочерние объекты
формируется дерево объектов
получаем текущее состояние индекса - hget
приводим к плоскому виду текущее и новое состояние индекса - array_dot
вызываем builder-ы для удаления и добавления - array_diff_assoc
какие индексы существуют для объекта
удалить объект из индексов при изменении характеристик
быстрая переиндексация