- Для чего нужна каждая таблица описано в комментариях в create_schema.sql.
- Предусмотрена возможность разбиения всех основных таблиц на несколько баз данных/хостов для равномерного распределения нагрузки.
- Код для работы с данными расположен в файлах database.php, storage.php и shards.php.
- Мэппинг таблиц по базам настраивается в config.php.
- Предусмотрено кэширование часто используемой информации: блока наиболее новых заказов и лога недавно удаленных и отмененных заказов. Для этого используются MEMORY таблицы.
- Кэширование можно включить/отключить в config.php. Его лучше отключать, если не планируется высокой нагрузки, т.к. он имеет короткое время жизни и при обновлении забирает большой блок из базы.
- Можно выделить под кэш произвольное количество хостов. Выбор будет происходить по user_id. Настраивается в config.php
- Соответствующий код расположен в caches.php.
- Предусмотрено хранение сессий в базе данных. Настроить это можно в config.php. Таблица sessions также может быть распределенной.
- Соответствующий код расположен в sessions.php.
- Тематически разбить файл database.php - он слишком большой.
- Оптимизировать кэш. Сейчас при обновлении done_or_canceled-кэша мы удаляем устаревшие заказы из waiting_orders-кэша, расположенного в той же базе, чтобы исключить отдачу юзеру отмененных/выполненных заказов как новых, что влечет лишние операции записи.
- Более умный кэш. Например, не загружать записи большим блоком и уметь кэшировать не только первые N записей.
- Возможность гибкого добавление новых шардов (сейчас - hardcoded). Нужен другой алогирм выбора, либо хранить в базе.
- Отделить "драйвер" БД от запросов (database.php) для легкой поддержки других БД. Нужны свои плейсхолдеры или simple request builder?
- Кэширование xcache или shm (или memcached) вместо memory таблиц.
- Веб-сокеты или long-polling для быстрого обновления ленты.
- Retina-friendly progress-индикаторы.
- Улучшить логгирование - например опционально логгировать работу с кэшом, чтобы подобрать для него наиболее эффективные параметры.
- Подумать над workflow-specific UI - сейчас используется один UI ленты везде.
- Защита от CSRF.
- Поддержка English и других валют.