Я создаю приложение, которое включает в себя функцию массового тега миллионов записей, более или менее интерактивно. Взаимодействие с пользователем очень похоже на Gmail, где пользователи могут отмечать отдельные электронные письма или массовые теги большого количества электронных писем. Мне также нужен быстрый доступ для чтения к этим членам тегов, и где шаблон чтения более или менее случайный.Стратегия сохранения для низкой латентности читает и пишет
Прямо сейчас мы используем Mysql и вставляем одну строку для каждой пары тегов-документов. Написание миллионов строк в Mysql занимает некоторое время (высокий уровень ввода-вывода), даже при массовых вставках и большой оптимизации. Нам нужно, чтобы это был интерактивный процесс, а не пакетный процесс.
Данные, которые мы храним и считываем, согласованность и доступность данных не так важны, как производительность и масштабируемость. Поэтому, в случае сбоя системы во время записи, я могу справиться с некоторой потерей данных. Однако в определенный момент данные, безусловно, должны быть сохранены для вторичного хранилища.
Таким образом, чтобы подвести итог, вот требования:
- Низкая латентность сыпучие пишет потенциально десятки миллионов записей необходим
- Данные, которые будут упорствовать в некотором роде
- Низкая латентность случайного чтения
- Прочные запись не требуется
- Eventual консистенции хорошо
Вот некоторые решения, я посмотрел на:
- Написать за кэшей (Terracotta, GigaSpaces, когерентность), где записи записываются в память и осушенных в базу данных асинхронно. Меня это немного пугает, потому что они добавляют некоторую сложность в приложение, которое я бы хотел избежать.
- высоко масштабируемых ключ-значение магазины, как MongoDB, HBase, Tokyo Tyrant