Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Как мы данные готовили
ORM и все-все-все в приложение Почта Mail.Ru
Кирилл Филимонов
Mail.Ru Group
Что должно уметь почтовое приложение?
Что должно уметь почтовое приложение?
● Написать письмо
Что должно уметь почтовое приложение?
● Написать письмо
● Отправить письмо
Что должно уметь почтовое приложение?
● Написать письмо
● Отправить письмо
● Получить письмо
Что должно уметь почтовое приложение?
● Написать письмо
● Отправить письмо
● Получить письмо
● Сохранить письмо
Что должно уметь почтовое приложение?
● Написать письмо
● Отправить письмо
● Получить письмо
● Сохранить письмо
Что должно уметь почтовое приложение?
● Написать письмо
● Отправить письмо
● Получить письмо
● Сохранить письмА
Domain Driven Slide
Domain Driven Slide
● Письмо
Domain Driven Slide
● Письмо
● Папка
Domain Driven Slide
● Письмо
● Папка
● Тред
Domain Driven Slide
● Письмо
● Папка
● Тред
● Аккаунт
● Фильтры
● Сессия
● Вложения
● Реклама
● Конфигурация
● ...
Domain Driven Slide
Domain Driven Slide
Thread
Presentation
Presentation
Presentation
Message
Message
Message
Domain Driven Slide
Domain Driven Slide
Domain Driven Slide
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)
Следствия
● Действие пользователя может порождать множество операций над
данными
● Операции над данными могут зависеть друг от друга
● Операции могут занимать значительное время
Что важно для пользователя
Что важно для пользователя
● Отзывчивый UI
Что важно для пользователя
● Отзывчивый UI
● Видеть результат операции, даже если она не успешна
Что важно для пользователя
● Отзывчивый UI
● Видеть результат операции, даже если она не успешна
● Скорость выполнения операции
Инструменты
● SQLite
● ORMLite
● Напильник
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)
Off-UI инструменты
● Thread
Off-UI инструменты
● Thread
● AsyncTask
Off-UI инструменты
● Thread
● AsyncTask
● Loader
Off-UI инструменты
● Thread
● AsyncTask
● Loader
● AsyncQueryHandler
● обработка отмены задач
Что может пойти не так
● обработка отмены задач
● orientation changes
Что может пойти не так
● обработка отмены задач
● orientation changes
● CursorAdapter
Что может пойти не так
● обработка отмены задач
● orientation changes
● CursorAdapter
● нотификация об изменениях
Что может пойти не так
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.
Что выбрали мы
Операция над данными
● Асинхронная операция — шаблон Command
● Операция над сущностями БД:
Группа операций
● Шаблон Composer
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл Филимонов (Mail.Ru Group)
Команда для Database пула
SQLite и ORMLite: транзакции
● SQLite
SQLite и ORMLite: транзакции
● SQLite
● ORMLite
Реализация команды с транзакцией
● Entity — базовый класс сущности
● ID - тип идентификатора
● тело request() будет выполнено в рамках транзакции
Доступ к результам из UI
“Ближе — проще”, unknown
Доступ к результам из UI
“Ближе — проще”, unknown
● закэшированы в памяти
Доступ к результам из UI
“Ближе — проще”, unknown
● закэшированы в памяти
● доступны из UI
DAO cache && UI cache
DAO object cache flow
Операции, обновляющие кэш:
● dao.create(...)
● dao.query(...)
● dao.delete(...)
DAO object cache flow
Операции, НЕ обновляющие кэш:
● dao.update(...)
● dao.update(PreparedUpdate)
DAO object cache flow
DAO object cache flow
CustomDao поддерживает обновления в ObjectCache
Взаимодействие кэшей
● тип операции
● класс сущности
● объект
Кэш операция
Буферизация операций
Буферизация нотификаций
● EntityManager
Получение данных из кэша
● EntityManager
● getFromCache(...)
Получение данных из кэша
● EntityManager
● getFromCache(...)
● loadMore(...)
Получение данных из кэша
● EntityManager
● getFromCache(...)
● loadMore(...)
● refresh(...)
Получение данных из кэша
● построение поисковых индексов в фоне
● индекс строится при изменении данных в объектном кэше
● передача построенного индекса в UI поток
● быстрый поиск в UI
Поиск
До:
● результаты > 1 сек
● progress bar на экране
После:
● результаты ~20 мс
● дополняются серверными результами
Поиск
Контакты
mailto: k.filimonov@corp.mail.ru
twitter.com/ fallfromheight
Кирилл Филимонов

More Related Content

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