62
Как мы данные готовили ORM и все-все-все в приложение Почта Mail.Ru Кирилл Филимонов Mail.Ru Group

Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

  • Upload
    ontico

  • View
    159

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Как мы данные готовилиORM и все-все-все в приложение Почта Mail.Ru

Кирилл ФилимоновMail.Ru Group

Page 2: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

Page 3: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

● Написать письмо

Page 4: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо

Page 5: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо

Page 6: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо● Сохранить письмо

Page 7: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо● Сохранить письмо

Page 8: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что должно уметь почтовое приложение?

● Написать письмо● Отправить письмо● Получить письмо● Сохранить письмА

Page 9: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide

Page 10: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide● Письмо

Page 11: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide● Письмо● Папка

Page 12: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide● Письмо● Папка● Тред

Page 13: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide● Письмо● Папка● Тред● Аккаунт● Фильтры● Сессия● Вложения● Реклама● Конфигурация● ...

Page 14: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide

Page 15: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven SlideThread

Presentation

Presentation

Presentation

Message

Message

Message

Page 16: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide

Page 17: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide

Page 18: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Domain Driven Slide

Page 19: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)
Page 20: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Следствия

● Действие пользователя может порождать множество операций над данными

● Операции над данными могут зависеть друг от друга● Операции могут занимать значительное время

Page 21: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что важно для пользователя

Page 22: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что важно для пользователя

● Отзывчивый UI

Page 23: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что важно для пользователя

● Отзывчивый UI● Видеть результат операции, даже если она не успешна

Page 24: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что важно для пользователя

● Отзывчивый UI● Видеть результат операции, даже если она не успешна● Скорость выполнения операции

Page 25: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Инструменты

● SQLite● ORMLite● Напильник

Page 26: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)
Page 27: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Off-UI инструменты● Thread

Page 28: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Off-UI инструменты● Thread● AsyncTask

Page 29: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Off-UI инструменты● Thread● AsyncTask● Loader

Page 30: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Off-UI инструменты● Thread● AsyncTask● Loader● AsyncQueryHandler

Page 31: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● обработка отмены задач

Что может пойти не так

Page 32: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● обработка отмены задач● orientation changes

Что может пойти не так

Page 33: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● обработка отмены задач● orientation changes● CursorAdapter

Что может пойти не так

Page 34: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● обработка отмены задач● orientation changes● CursorAdapter● нотификация об изменениях

Что может пойти не так

Page 35: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a

notification. Make sure the content of your adapter is not modified from a background thread, but only from

the UI thread.

Page 36: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Что выбрали мы

Page 37: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Операция над данными● Асинхронная операция — шаблон Command● Операция над сущностями БД:

Page 38: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Группа операций● Шаблон Composer

Page 39: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)
Page 40: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Команда для Database пула

Page 41: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

SQLite и ORMLite: транзакции● SQLite

Page 42: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

SQLite и ORMLite: транзакции● SQLite● ORMLite

Page 43: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Реализация команды с транзакцией

● Entity — базовый класс сущности● ID - тип идентификатора● тело request() будет выполнено в рамках транзакции

Page 44: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Доступ к результам из UI“Ближе — проще”, unknown

Page 45: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Доступ к результам из UI“Ближе — проще”, unknown

● закэшированы в памяти

Page 46: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Доступ к результам из UI“Ближе — проще”, unknown

● закэшированы в памяти● доступны из UI

Page 47: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

DAO cache && UI cache

Page 48: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

DAO object cache flow

Page 49: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Операции, обновляющие кэш:● dao.create(...)● dao.query(...)● dao.delete(...)

DAO object cache flow

Page 50: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Операции, НЕ обновляющие кэш:● dao.update(...)● dao.update(PreparedUpdate)

DAO object cache flow

Page 51: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

DAO object cache flowCustomDao поддерживает обновления в ObjectCache

Page 52: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Взаимодействие кэшей

Page 53: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● тип операции● класс сущности● объект

Кэш операция

Page 54: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Буферизация операций

Page 55: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Буферизация нотификаций

Page 56: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● EntityManager

Получение данных из кэша

Page 57: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● EntityManager● getFromCache(...)

Получение данных из кэша

Page 58: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● EntityManager● getFromCache(...)● loadMore(...)

Получение данных из кэша

Page 59: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● EntityManager● getFromCache(...)● loadMore(...)● refresh(...)

Получение данных из кэша

Page 60: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

● построение поисковых индексов в фоне● индекс строится при изменении данных в объектном кэше● передача построенного индекса в UI поток● быстрый поиск в UI

Поиск

Page 61: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

До:● результаты > 1 сек● progress bar на экране

После:● результаты ~20 мс● дополняются серверными результами

Поиск

Page 62: Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)

Контакты

mailto: [email protected]/ fallfromheight

Кирилл Филимонов