Я ищу базу данных, соответствующую этим критериям:
- Может быть непостоянным;
- Практически все ключи БД нужно обновлять раз в 3-6 часов (100М+ ключей общим размером 100Гб)
- Возможность быстрого выбора данных по ключу (или Primary Key)
- Это должна быть СУБД (поэтому LevelDB не подходит)
- Когда данные записываются, кластер БД должен иметь возможность обслуживать запросы (хотя отдельные узлы могут быть заблокированы)
- Не в памяти — наш набор данных превысит пределы оперативной памяти
- Горизонтальное масштабирование и репликация
- Поддержка полной перезаписи всех данных (MongoDB не освобождает место после удаления данных)
- Поддержка С# и Java
Вот мой процесс работы с такой базой данных: У нас есть аналитический кластер, который производит 100 М записей (50 ГБ) данных каждые 4–6 часов. Данные представляют собой «ключ — массив [20]». Эти данные необходимо раздавать пользователям через интерфейсную систему со скоростью 1-10 тыс. запросов в секунду. В среднем запрашивается только ~15% данных, остальное будет перезаписано через 4-6 часов, когда будет сгенерирован следующий набор данных.
Что я пробовал:
- МонгоДБ. Накладные расходы на хранение данных, высокие затраты на дефрагментацию.
- Редис. Выглядит идеально, но он ограничен оперативной памятью, а наши данные превышают его.
Итак, вопрос: есть ли что-то похожее на Redis, но не ограниченное размером оперативной памяти?